From 8bb395dbf49886ca2c73fe5378bfb6fbcbbc1a03 Mon Sep 17 00:00:00 2001
From: graham <graham.macpherson@strath.ac.uk>
Date: Wed, 21 Jan 2009 10:04:01 +0000
Subject: [PATCH] Removing CV files temporarily for conflict resolution

---
 .../CV2DMesher/CGALTriangulation2Ddefs.H      |  84 --
 .../mesh/generation/CV2DMesher/CV2D.C         | 567 ----------
 .../mesh/generation/CV2DMesher/CV2D.H         | 514 ---------
 .../mesh/generation/CV2DMesher/CV2DI.H        | 169 ---
 .../mesh/generation/CV2DMesher/CV2DIO.C       | 285 -----
 .../mesh/generation/CV2DMesher/CV2DMesher.C   | 116 ---
 .../mesh/generation/CV2DMesher/Make/files     |  14 -
 .../mesh/generation/CV2DMesher/Make/options   |  16 -
 .../mesh/generation/CV2DMesher/controls.C     |  76 --
 .../mesh/generation/CV2DMesher/indexedFace.H  | 148 ---
 .../generation/CV2DMesher/indexedVertex.H     | 261 -----
 .../insertBoundaryConformPointPairs.C         | 290 ------
 .../CV2DMesher/insertFeaturePoints.C          | 162 ---
 .../CV2DMesher/insertSurfaceNearPointPairs.C  | 103 --
 .../insertSurfaceNearestPointPairs.C          | 223 ----
 .../mesh/generation/CV2DMesher/querySurface.C | 229 ----
 .../mesh/generation/CV2DMesher/querySurface.H | 149 ---
 .../mesh/generation/CV2DMesher/tolerances.C   |  62 --
 .../CV3DMesher/CGALTriangulation3Ddefs.H      |  84 --
 .../mesh/generation/CV3DMesher/CV3D.C         | 722 -------------
 .../mesh/generation/CV3DMesher/CV3D.H         | 460 --------
 .../mesh/generation/CV3DMesher/CV3DI.H        | 175 ----
 .../mesh/generation/CV3DMesher/CV3DIO.C       | 244 -----
 .../mesh/generation/CV3DMesher/CV3DMesher.C   | 138 ---
 .../mesh/generation/CV3DMesher/Make/files     |  15 -
 .../mesh/generation/CV3DMesher/Make/options   |  18 -
 ...0080723_edgeAimingFeatureReconstuction.tar | Bin 3441 -> 0 bytes
 .../20080808_3EdgeSpecificImplementation.tar  | Bin 4814 -> 0 bytes
 .../backup/20080820_featurePointsDone.tar     | Bin 16761 -> 0 bytes
 .../hardCodedSimpleCubeForPolyTopoChange.H    |  96 --
 .../indexedVertex_with_displacementSum.H      | 289 -----
 .../mesh/generation/CV3DMesher/calcDualMesh.C | 642 ------------
 .../mesh/generation/CV3DMesher/controls.C     |  68 --
 .../mesh/generation/CV3DMesher/indexedCell.H  | 154 ---
 .../generation/CV3DMesher/indexedVertex.H     | 294 ------
 .../insertBoundaryConformPointPairs.C         |  56 -
 .../CV3DMesher/insertFeaturePoints.C          | 615 -----------
 .../CV3DMesher/insertSurfaceNearPointPairs.C  |  45 -
 .../insertSurfaceNearestPointPairs.C          | 986 ------------------
 .../mesh/generation/CV3DMesher/querySurface.C | 248 -----
 .../mesh/generation/CV3DMesher/querySurface.H | 162 ---
 .../mesh/generation/CV3DMesher/tolerances.C   |  77 --
 42 files changed, 9056 deletions(-)
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/CGALTriangulation2Ddefs.H
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/CV2D.C
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/CV2D.H
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/CV2DI.H
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/CV2DIO.C
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/CV2DMesher.C
 delete mode 100755 applications/utilities/mesh/generation/CV2DMesher/Make/files
 delete mode 100755 applications/utilities/mesh/generation/CV2DMesher/Make/options
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/controls.C
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/indexedFace.H
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/indexedVertex.H
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/insertBoundaryConformPointPairs.C
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/insertFeaturePoints.C
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/insertSurfaceNearPointPairs.C
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/insertSurfaceNearestPointPairs.C
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/querySurface.C
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/querySurface.H
 delete mode 100644 applications/utilities/mesh/generation/CV2DMesher/tolerances.C
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/CGALTriangulation3Ddefs.H
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/CV3D.C
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/CV3D.H
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/CV3DI.H
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/CV3DIO.C
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/CV3DMesher.C
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/Make/files
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/Make/options
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/backup/20080723_edgeAimingFeatureReconstuction.tar
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/backup/20080808_3EdgeSpecificImplementation.tar
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/backup/20080820_featurePointsDone.tar
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/backup/hardCodedSimpleCubeForPolyTopoChange.H
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/backup/indexedVertex_with_displacementSum.H
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/calcDualMesh.C
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/controls.C
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/indexedCell.H
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/indexedVertex.H
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/insertBoundaryConformPointPairs.C
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/insertFeaturePoints.C
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/insertSurfaceNearPointPairs.C
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/insertSurfaceNearestPointPairs.C
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/querySurface.C
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/querySurface.H
 delete mode 100644 applications/utilities/mesh/generation/CV3DMesher/tolerances.C

diff --git a/applications/utilities/mesh/generation/CV2DMesher/CGALTriangulation2Ddefs.H b/applications/utilities/mesh/generation/CV2DMesher/CGALTriangulation2Ddefs.H
deleted file mode 100644
index 0ecbed8082e..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/CGALTriangulation2Ddefs.H
+++ /dev/null
@@ -1,84 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Typedefs
-    CGALTriangulation2Ddefs
-
-Description
-    CGAL data structures used for 2D Delaunay meshing.
-
-    Define CGAL_INEXACT to use Exact_predicates_inexact_constructions kernel
-    otherwise the more robust but much less efficient
-    Exact_predicates_exact_constructions will be used.
-
-    Define CGAL_HIERARCHY to use hierarchical Delaunay triangulation which is
-    faster but uses more memory than the standard Delaunay triangulation.
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef CGALTriangulation2Ddefs_H
-#define CGALTriangulation2Ddefs_H
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#include "CGAL/Delaunay_triangulation_2.h"
-
-#include "indexedVertex.H"
-#include "indexedFace.H"
-
-#ifdef CGAL_INEXACT
-    // Fast kernel using a double as the storage type but the triangulation
-    // may fail
-    #include "CGAL/Exact_predicates_inexact_constructions_kernel.h"
-    typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
-#else
-    // Very robust but expensive kernel
-    #include "CGAL/Exact_predicates_exact_constructions_kernel.h"
-    typedef CGAL::Exact_predicates_exact_constructions_kernel K;
-#endif
-
-typedef CGAL::indexedVertex<K>                           Vb;
-typedef CGAL::indexedFace<K>                             Fb;
-
-#ifdef CGAL_HIERARCHY
-    // Data structures for hierarchical Delaunay triangulation which is more
-    // efficient but also uses more storage
-    #include "CGAL/Triangulation_hierarchy_2.h"
-    typedef CGAL::Triangulation_hierarchy_vertex_base_2<Vb>  Vbh;
-    typedef CGAL::Triangulation_data_structure_2<Vbh, Fb>    Tds;
-    typedef CGAL::Delaunay_triangulation_2<K, Tds>           Triangulation;
-    typedef CGAL::Triangulation_hierarchy_2<Triangulation>   HTriangulation;
-#else
-    // Data structures for standard Delaunay triangulation
-    typedef CGAL::Triangulation_data_structure_2<Vb, Fb>     Tds;
-    typedef CGAL::Delaunay_triangulation_2<K, Tds>           Triangulation;
-    typedef Triangulation                                    HTriangulation;
-#endif
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/CV2D.C b/applications/utilities/mesh/generation/CV2DMesher/CV2D.C
deleted file mode 100644
index e03fccbf472..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/CV2D.C
+++ /dev/null
@@ -1,567 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV2D.H"
-#include "Random.H"
-#include "transform.H"
-#include "IFstream.H"
-#include "uint.H"
-#include "ulong.H"
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-void Foam::CV2D::insertBoundingBox()
-{
-    Info<< "insertBoundingBox: creating bounding mesh" << endl;
-    scalar bigSpan = 10*tols_.span;
-    insertPoint(point2D(-bigSpan, -bigSpan), Vb::FAR_POINT);
-    insertPoint(point2D(-bigSpan, bigSpan), Vb::FAR_POINT);
-    insertPoint(point2D(bigSpan, -bigSpan), Vb::FAR_POINT);
-    insertPoint(point2D(bigSpan, bigSpan), Vb::FAR_POINT);
-}
-
-
-void Foam::CV2D::fast_restore_Delaunay(Vertex_handle vh)
-{
-    int i;
-    Face_handle f = vh->face(), next, start(f);
-
-    do
-    {
-        i=f->index(vh);
-        if (!is_infinite(f))
-        {
-            if (!internal_flip(f, cw(i))) external_flip(f, i);
-            if (f->neighbor(i) == start) start = f;
-        }
-        f = f->neighbor(cw(i));
-    } while (f != start);
-}
-
-void Foam::CV2D::external_flip(Face_handle& f, int i)
-{
-    Face_handle n = f->neighbor(i);
-
-    if
-    (
-        CGAL::ON_POSITIVE_SIDE
-     != side_of_oriented_circle(n, f->vertex(i)->point())
-    ) return;
-
-    flip(f, i);
-    i = n->index(f->vertex(i));
-    external_flip(n, i);
-}
-
-bool Foam::CV2D::internal_flip(Face_handle& f, int i)
-{
-    Face_handle n = f->neighbor(i);
-
-    if
-    (
-        CGAL::ON_POSITIVE_SIDE
-     != side_of_oriented_circle(n, f->vertex(i)->point())
-    )
-    {
-        return false;
-    }
-
-    flip(f, i);
-
-    return true;
-}
-
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::CV2D::CV2D
-(
-    const dictionary& controlDict,
-    const querySurface& qSurf
-)
-:
-    HTriangulation(),
-    qSurf_(qSurf),
-    controls_(controlDict),
-    tols_(controlDict, controls_.minCellSize, qSurf.bb()),
-    z_((1.0/3.0)*(qSurf_.bb().min().z() + qSurf_.bb().max().z())),
-    startOfInternalPoints_(0),
-    startOfSurfacePointPairs_(0),
-    startOfBoundaryConformPointPairs_(0)
-{
-    insertBoundingBox();
-    insertFeaturePoints();
-}
-
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-Foam::CV2D::~CV2D()
-{}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-void Foam::CV2D::insertPoints
-(
-    const point2DField& points,
-    const scalar nearness
-)
-{
-    Info<< "insertInitialPoints(const point2DField& points): ";
-
-    startOfInternalPoints_ = number_of_vertices();
-    label nVert = startOfInternalPoints_;
-
-    // Add the points and index them
-    forAll(points, i)
-    {
-        const point2D& p = points[i];
-
-        if (qSurf_.wellInside(toPoint3D(p), nearness))
-        {
-            insert(toPoint(p))->index() = nVert++;
-        }
-        else
-        {
-            Warning
-                << "Rejecting point " << p << " outside surface" << endl;
-        }
-    }
-
-    Info<< nVert << " vertices inserted" << endl;
-
-    if (controls_.writeInitialTriangulation)
-    {
-        // Checking validity of triangulation
-        assert(is_valid());
-
-        writeTriangles("initial_triangles.obj", true);
-        writeFaces("initial_faces.obj", true);
-    }
-}
-
-
-void Foam::CV2D::insertPoints(const fileName& pointFileName)
-{
-    IFstream pointsFile(pointFileName);
-
-    if (pointsFile.good())
-    {
-        insertPoints(point2DField(pointsFile), 0.5*controls_.minCellSize2);
-    }
-    else
-    {
-        FatalErrorIn("insertInitialPoints")
-            << "Could not open pointsFile " << pointFileName
-            << exit(FatalError);
-    }
-}
-
-
-void Foam::CV2D::insertGrid()
-{
-    Info<< "insertInitialGrid: ";
-
-    startOfInternalPoints_ = number_of_vertices();
-    label nVert = startOfInternalPoints_;
-
-    scalar x0 = qSurf_.bb().min().x();
-    scalar xR = qSurf_.bb().max().x() - x0;
-    int ni = int(xR/controls_.minCellSize) + 1;
-    scalar deltax = xR/ni;
-
-    scalar y0 = qSurf_.bb().min().y();
-    scalar yR = qSurf_.bb().max().y() - y0;
-    int nj = int(yR/controls_.minCellSize) + 1;
-    scalar deltay = yR/nj;
-
-    Random rndGen(1321);
-    scalar pert = controls_.randomPurturbation*min(deltax, deltay);
-
-    for (int i=0; i<ni; i++)
-    {
-        for (int j=0; j<nj; j++)
-        {
-            point p(x0 + i*deltax, y0 + j*deltay, 0);
-
-            if (controls_.randomiseInitialGrid)
-            {
-                p.x() += pert*(rndGen.scalar01() - 0.5);
-                p.y() += pert*(rndGen.scalar01() - 0.5);
-            }
-
-            if (qSurf_.wellInside(p, 0.5*controls_.minCellSize2))
-            {
-                insert(Point(p.x(), p.y()))->index() = nVert++;
-            }
-        }
-    }
-
-    Info<< nVert << " vertices inserted" << endl;
-
-    if (controls_.writeInitialTriangulation)
-    {
-        // Checking validity of triangulation
-        assert(is_valid());
-
-        writeTriangles("initial_triangles.obj", true);
-        writeFaces("initial_faces.obj", true);
-    }
-}
-
-
-void Foam::CV2D::insertSurfacePointPairs()
-{
-    startOfSurfacePointPairs_ = number_of_vertices();
-
-    if (controls_.insertSurfaceNearestPointPairs)
-    {
-        insertSurfaceNearestPointPairs();
-    }
-
-    if (controls_.writeNearestTriangulation)
-    {
-        writeFaces("near_allFaces.obj", false);
-        writeFaces("near_faces.obj", true);
-        writeTriangles("near_triangles.obj", true);
-    }
-
-    // Insertion of point-pais for near-points may cause protrusions
-    // so insertBoundaryConformPointPairs must be executed last
-    if (controls_.insertSurfaceNearPointPairs)
-    {
-        insertSurfaceNearPointPairs();
-    }
-
-    startOfBoundaryConformPointPairs_ = number_of_vertices();
-}
-
-
-void Foam::CV2D::boundaryConform()
-{
-    if (!controls_.insertSurfaceNearestPointPairs)
-    {
-        markNearBoundaryPoints();
-    }
-
-    // Mark all the faces as SAVE_CHANGED
-    for
-    (
-        Triangulation::Finite_faces_iterator fit = finite_faces_begin();
-        fit != finite_faces_end();
-        fit++
-    )
-    {
-        fit->faceIndex() = Fb::SAVE_CHANGED;
-    }
-
-    for (label iter=1; iter<=controls_.maxBoundaryConformingIter; iter++)
-    {
-        label nIntersections = insertBoundaryConformPointPairs
-        (
-            "surfaceIntersections_" + Foam::name(iter) + ".obj"
-        );
-
-        if (nIntersections == 0)
-        {
-            break;
-        }
-        else
-        {
-            Info<< "BC iteration " << iter << ": "
-                << nIntersections << " point-pairs inserted" << endl;
-        }
-
-        // Any faces changed by insertBoundaryConformPointPairs will now
-        // be marked CHANGED, mark those as SAVE_CHANGED and those that
-        // remained SAVE_CHANGED as UNCHANGED
-        for
-        (
-            Triangulation::Finite_faces_iterator fit = finite_faces_begin();
-            fit != finite_faces_end();
-            fit++
-        )
-        {
-            if (fit->faceIndex() == Fb::SAVE_CHANGED)
-            {
-                fit->faceIndex() = Fb::UNCHANGED;
-            }
-            else if (fit->faceIndex() == Fb::CHANGED)
-            {
-                fit->faceIndex() = Fb::SAVE_CHANGED;
-            }
-        }
-    }
-
-    Info<< nl;
-}
-
-
-void Foam::CV2D::removeSurfacePointPairs()
-{
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (vit->index() >= startOfSurfacePointPairs_)
-        {
-            remove(vit);
-        }
-    }
-}
-
-
-void Foam::CV2D::newPoints(const scalar relaxation)
-{
-    Info<< "newPointsFromVertices: ";
-
-    const vectorField& faceNormals = qSurf_.faceNormals();
-
-    // Initialise the total displacement and its distance for writing out
-    vector2D totalDisp = vector2D::zero;
-    scalar totalDist = 0;
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (vit->internalPoint())
-        {
-            // Current dual-cell defining vertex ("centre")
-            point2DFromPoint defVert0 = toPoint2D(vit->point());
-
-            Triangulation::Edge_circulator ec = incident_edges(vit);
-            Triangulation::Edge_circulator ecStart = ec;
-
-            // Circulate around the edges to find the first which is not
-            // infinite
-            do
-            {
-                if (!is_infinite(ec)) break;
-            } while (++ec != ecStart);
-
-            // Store the start-end of the first non-infinte edge
-            point2D de0 = toPoint2D(circumcenter(ec->first));
-
-            // Keep track of the maximum edge length^2
-            scalar maxEdgeLen2 = 0.0;
-
-            // Keep track of the index of the longest edge
-            label edgecd0i = -1;
-
-            // Edge counter
-            label edgei = 0;
-
-            do
-            {
-                if (!is_infinite(ec))
-                {
-                    // Get the end of the current edge
-                    point2D de1 = toPoint2D
-                    (
-                        circumcenter(ec->first->neighbor(ec->second))
-                    );
-
-                    // Store the current edge vector
-                    edges[edgei] = de1 - de0;
-
-                    // Store the edge mid-point in the vertices array
-                    vertices[edgei] = 0.5*(de1 + de0);
-
-                    // Move the current edge end into the edge start for the
-                    // next iteration
-                    de0 = de1;
-
-                    // Keep track of the longest edge
-
-                    scalar edgeLen2 = magSqr(edges[edgei]);
-
-                    if (edgeLen2 > maxEdgeLen2)
-                    {
-                        maxEdgeLen2 = edgeLen2;
-                        edgecd0i = edgei;
-                    }
-
-                    edgei++;
-                }
-            } while (++ec != ecStart);
-
-            // Initialise cd0 such that the mesh will align
-            // in in the x-y directions
-            vector2D cd0(1, 0);
-
-            if (controls_.relaxOrientation)
-            {
-                // Get the longest edge from the array and use as the primary
-                // direction of the coordinate system of the "square" cell
-                cd0 = edges[edgecd0i];
-            }
-
-            if (controls_.nearWallAlignedDist > 0)
-            {
-                pointIndexHit pHit = qSurf_.tree().findNearest
-                (
-                    toPoint3D(defVert0),
-                    controls_.nearWallAlignedDist2
-                );
-
-                if (pHit.hit())
-                {
-                    cd0 = toPoint2D(faceNormals[pHit.index()]);
-                }
-            }
-
-            // Rotate by 45deg needed to create an averaging procedure which
-            // encourages the cells to be square
-            cd0 = vector2D(cd0.x() + cd0.y(), cd0.y() - cd0.x());
-
-            // Normalise the primary coordinate direction
-            cd0 /= mag(cd0);
-
-            // Calculate the orthogonal coordinate direction
-            vector2D cd1(-cd0.y(), cd0.x());
-
-
-            // Restart the circulator
-            ec = ecStart;
-
-            // ... and the counter
-            edgei = 0;
-
-            // Initialise the displacement for the centre and sum-weights
-            vector2D disp = vector2D::zero;
-            scalar sumw = 0;
-
-            do
-            {
-                if (!is_infinite(ec))
-                {
-                    // Pick up the current edge
-                    const vector2D& ei = edges[edgei];
-
-                    // Calculate the centre to edge-centre vector
-                    vector2D deltai = vertices[edgei] - defVert0;
-
-                    // Set the weight for this edge contribution
-                    scalar w = 1;
-
-                    if (controls_.squares)
-                    {
-                        w = magSqr(deltai.x()*ei.y() - deltai.y()*ei.x());
-                        // alternative weights
-                        //w = mag(deltai.x()*ei.y() - deltai.y()*ei.x());
-                        //w = magSqr(ei)*mag(deltai);
-
-                        // Use the following for an ~square mesh
-                        // Find the coordinate contributions for this edge delta
-                        scalar cd0deltai = cd0 & deltai;
-                        scalar cd1deltai = cd1 & deltai;
-
-                        // Create a "square" displacement
-                        if (mag(cd0deltai) > mag(cd1deltai))
-                        {
-                            disp += (w*cd0deltai)*cd0;
-                        }
-                        else
-                        {
-                            disp += (w*cd1deltai)*cd1;
-                        }
-                    }
-                    else
-                    {
-                        // Use this for a hexagon/pentagon mesh
-                        disp += w*deltai;
-                    }
-
-                    // Sum the weights
-                    sumw += w;
-                }
-                else
-                {
-                    FatalErrorIn("CV2D::newPoints() const")
-                        << "Infinite triangle found in internal mesh"
-                        << exit(FatalError);
-                }
-
-                edgei++;
-
-            } while (++ec != ecStart);
-
-            // Calculate the average displacement
-            disp /= sumw;
-            totalDisp += disp;
-            totalDist += mag(disp);
-
-            // Move the point by a fraction of the average displacement
-            movePoint(vit, defVert0 + relaxation*disp);
-        }
-    }
-
-    Info << "\nTotal displacement = " << totalDisp
-         << " total distance = " << totalDist << endl;
-}
-
-
-void Foam::CV2D::moveInternalPoints(const point2DField& newPoints)
-{
-    label pointI = 0;
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (vit->internalPoint())
-        {
-            movePoint(vit, newPoints[pointI++]);
-        }
-    }
-}
-
-
-void Foam::CV2D::write() const
-{
-    if (controls_.writeFinalTriangulation)
-    {
-        writeFaces("allFaces.obj", false);
-        writeFaces("faces.obj", true);
-        writeTriangles("allTriangles.obj", false);
-        writeTriangles("triangles.obj", true);
-        writePatch("patch.pch");
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/CV2D.H b/applications/utilities/mesh/generation/CV2DMesher/CV2D.H
deleted file mode 100644
index 171623fb049..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/CV2D.H
+++ /dev/null
@@ -1,514 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Class
-    CV2D
-
-Description
-    Conformal-Voronoi 2D automatic mesher with grid or read initial points
-    and point position relaxation with optional "squarification".
-
-    There are a substantial number of options to this mesher read from 
-    CV2DMesherDict file e.g.:
-
-    // Min cell size used in tolerances when inserting points for
-    // boundary conforming.
-    // Also used to as the grid spacing usind in insertGrid.
-    minCellSize  0.05;
-
-    // Feature angle used to inser feature points
-    // 0 = all features, 180 = no features
-    featureAngle 45;
-
-    // Maximum quadrant angle allowed at a concave corner before
-    // additional "mitering" lines are added
-    maxQuadAngle 110;
-
-    // Should the mesh be square-dominated or of unbiased hexagons
-    squares      yes;
-
-    // Near-wall region where cells are aligned with the wall specified as a 
-    // number of cell layers
-    nearWallAlignedDist 3;
-
-    // Chose if the cell orientation should relax during the iterations
-    //  or remain fixed to the x-y directions
-    relaxOrientation    no;
-
-    // Insert near-boundary point mirror or point-pairs
-    insertSurfaceNearestPointPairs yes;
-
-    // Mirror near-boundary points rather than insert point-pairs
-    mirrorPoints   no;
-
-    // Insert point-pairs vor dual-cell vertices very near the surface
-    insertSurfaceNearPointPairs yes;
-
-    // Choose if to randomise the initial grid created by insertGrid.
-    randomiseInitialGrid yes;
-
-    // Perturbation fraction, 1 = cell-size.
-    randomPurturbation   0.1;
-
-    // Number of relaxation iterations.
-    nIterations      5;
-
-    // Relaxation factor at the start of the iteration sequence.
-    // 0.5 is a sensible maximum and < 0.2 converges better.
-    relaxationFactorStart 0.8;
-
-    // Relaxation factor at the end of the iteration sequence.
-    // Should be <= relaxationFactorStart
-    relaxationFactorEnd   0;
-
-    writeInitialTriangulation no;
-    writeFeatureTriangulation no;
-    writeNearestTriangulation no;
-    writeInsertedPointPairs   no;
-    writeFinalTriangulation   yes;
-
-    // Maximum number of iterations used in boundaryConform.
-    maxBoundaryConformingIter 5;
-
-    minEdgeLenCoeff           0.5;
-    maxNotchLenCoeff          0.3;
-    minNearPointDistCoeff     0.25;
-    ppDistCoeff               0.05;
-
-SourceFiles
-    CGALTriangulation2Ddefs.H
-    indexedVertex.H
-    indexedFace.H
-    CV2DI.H
-    CV2D.C
-    CV2DIO.C
-    tolerances.C
-    controls.C
-    insertFeaturePoints.C
-    insertSurfaceNearestPointPairs.C
-    insertSurfaceNearPointPairs.C
-    insertBoundaryConformPointPairs.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef CV2D_H
-#define CV2D_H
-
-#define CGAL_INEXACT
-#define CGAL_HIERARCHY
-
-#include "CGALTriangulation2Ddefs.H"
-
-#include "querySurface.H"
-#include "point2DFieldFwd.H"
-#include "dictionary.H"
-#include "Switch.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-/*---------------------------------------------------------------------------*\
-                           Class CV2D Declaration
-\*---------------------------------------------------------------------------*/
-
-class CV2D
-:
-    public HTriangulation
-{
-public:
-
-    class controls
-    {
-    public:
-
-        //- Minimum cell size below which protusions through the surface are
-        //  not split
-        scalar minCellSize;
-
-        //- Square of minCellSize
-        scalar minCellSize2;
-
-        //- The feature angle used to select corners to be
-        //  explicitly represented in the mesh.
-        //  0 = all features, 180 = no features
-        scalar featAngle;
-
-        //- Maximum quadrant angle allowed at a concave corner before
-        //  additional "mitering" lines are added
-        scalar maxQuadAngle;
-
-        //- Should the mesh be square-dominated or of unbiased hexagons
-        Switch squares;
-
-        //- Near-wall region where cells are aligned with the wall
-        scalar nearWallAlignedDist;
-
-        //- Square of nearWallAlignedDist
-        scalar nearWallAlignedDist2;
-
-        //- Chose if the cell orientation should relax during the iterations
-        //  or remain fixed to the x-y directions
-        Switch relaxOrientation;
-
-        //- Insert near-boundary point mirror or point-pairs
-        Switch insertSurfaceNearestPointPairs;
-
-        //- Mirror near-boundary points rather than insert point-pairs
-        Switch mirrorPoints;
-
-        //- Insert point-pairs vor dual-cell vertices very near the surface
-        Switch insertSurfaceNearPointPairs;
-
-        Switch writeInitialTriangulation;
-        Switch writeFeatureTriangulation;
-        Switch writeNearestTriangulation;
-        Switch writeInsertedPointPairs;
-        Switch writeFinalTriangulation;
-
-        Switch randomiseInitialGrid;
-        scalar randomPurturbation;
-
-        label maxBoundaryConformingIter;
-
-        //- Relaxation factor at the start of the iteration
-        scalar relaxationFactorStart;
-
-        //- Relaxation factor at the end of the iteration
-        scalar relaxationFactorEnd;
-
-        controls(const dictionary& controlDict);
-    };
-
-
-    class tolerances
-    {
-    public:
-
-        //- Maximum cartesian span of the geometry
-        scalar span;
-
-        //- Square of span
-        scalar span2;
-
-        //- Minumum edge-length of the cell size below which protusions
-        //  through the surface are not split
-        scalar minEdgeLen;
-
-        //- Square of minEdgeLen
-        scalar minEdgeLen2;
-
-        //- Maximum notch size below which protusions into the surface are
-        //  not filled
-        scalar maxNotchLen;
-
-        //- Square of maxNotchLen
-        scalar maxNotchLen2;
-
-        //- The minimum distance alowed between a dual-cell vertex
-        // and the surface before a point-pair is introduced
-        scalar minNearPointDist;
-
-        //- Square of minNearPoint
-        scalar minNearPointDist2;
-
-        //- Distance between boundary conforming point-pairs
-        scalar ppDist;
-
-        //- Square of ppDist
-        scalar ppDist2;
-
-        tolerances
-        (
-            const dictionary& controlDict,
-            scalar minCellSize,
-            const boundBox&
-        );
-    };
-
-
-private:
-
-    // Private data
-
-        //- The surface to mesh
-        const querySurface& qSurf_;
-
-        //- Meshing controls
-        controls controls_;
-
-        //- Meshing tolerances
-        tolerances tols_;
-
-        //- z-level
-        scalar z_;
-
-        //- Keep track of the start of the internal points
-        label startOfInternalPoints_;
-
-        //- Keep track of the start of the surface point-pairs
-        label startOfSurfacePointPairs_;
-
-        //- Keep track of the boundary conform point-pairs
-        //  stored after the insertion of the surface point-pairs in case
-        //  the boundary conform function is called more than once without
-        //  removing and insertin the surface point-pairs
-        label startOfBoundaryConformPointPairs_;
-
-        //- Temporary storage for a dual-cell
-        static const label maxNvert = 20;
-        mutable point2D vertices[maxNvert+1];
-        mutable vector2D edges[maxNvert+1];
-
-
-    // Private Member Functions
-
-        //- Disallow default bitwise copy construct
-        CV2D(const CV2D&);
-
-        //- Disallow default bitwise assignment
-        void operator=(const CV2D&);
-
-
-        //- Insert point and return it's index
-        inline label insertPoint
-        (
-            const point2D& pt,
-            const label type
-        );
-
-        inline bool insertMirrorPoint
-        (
-            const point2D& nearSurfPt,
-            const point2D& surfPt
-        );
-
-        //- Insert a point-pair at a distance ppDist either side of
-        //  surface point point surfPt in the direction n
-        inline void insertPointPair
-        (
-            const scalar mirrorDist,
-            const point2D& surfPt,
-            const vector2D& n
-        );
-
-        //- Create the initial mesh from the bounding-box
-        void insertBoundingBox();
-
-        //- Insert point groups at the feature points.
-        void insertFeaturePoints();
-
-        //- Insert point-pairs at the given set of points using the surface
-        //  normals corresponding to the given set of surface triangles
-        //  and write the inserted point locations to the given file.
-        void insertPointPairs
-        (
-            const DynamicList<point2D>& nearSurfacePoints,
-            const DynamicList<point2D>& surfacePoints,
-            const DynamicList<label>& surfaceTris,
-            const fileName fName
-        );
-
-        //- Check to see if dual cell specified by given vertex iterator
-        //  intersects the boundary and hence reqires a point-pair.
-        bool dualCellSurfaceIntersection
-        (
-            const Triangulation::Finite_vertices_iterator& vit
-        ) const;
-
-        //- Insert point-pairs at the nearest points on the surface to the 
-        //  control vertex of dual-cells which intersect the boundary in order
-        //  to provide a boundary-layer mesh.
-        //  NB: This is not guaranteed to close the boundary
-        void insertSurfaceNearestPointPairs();
-
-        //- Insert point-pairs at small duak-cell edges on the surface in order
-        //  to improve the boundary-layer mesh generated by
-        //  insertSurfaceNearestPointPairs.
-        void insertSurfaceNearPointPairs();
-
-        //- Insert point-pair and correcting the Finite_vertices_iterator
-        //  to account for the additional vertices
-        void insertPointPair
-        (
-            Triangulation::Finite_vertices_iterator& vit,
-            const point2D& p,
-            const label trii
-        );
-
-        //- Insert point-pair at the best intersection point between the lines
-        //  from the dual-cell real centroid and it's vertices and the surface.
-        bool insertPointPairAtIntersection
-        (
-            Triangulation::Finite_vertices_iterator& vit,
-            const point2D& defVert,
-            const point2D vertices[],
-            const scalar maxProtSize
-        );
-
-        //- Insert point-pairs corresponding to dual-cells which intersect
-        //  the boundary surface
-        label insertBoundaryConformPointPairs(const fileName& fName);
-
-        void markNearBoundaryPoints();
-
-        //- Restore the Delaunay contraint 
-        void fast_restore_Delaunay(Vertex_handle vh);
-
-        // Flip operations used by fast_restore_Delaunay
-        void external_flip(Face_handle& f, int i);
-        bool internal_flip(Face_handle& f, int i);
-
-
-public:
-
-    // Constructors
-
-        //- Construct for given surface
-        CV2D(const dictionary& controlDict, const querySurface& qSurf);
-
-
-    // Destructor
-
-        ~CV2D();
-
-
-    // Member Functions
-
-        // Access
-
-            const controls& meshingControls() const
-            {
-                return controls_;
-            }
-
-
-        // Conversion functions between point2D, point and Point
-
-            inline const point2D& toPoint2D(const point&) const;
-            inline point toPoint3D(const point2D&) const;
-
-#           ifdef CGAL_INEXACT
-                typedef const point2D& point2DFromPoint;
-                typedef const Point& PointFromPoint2D;
-#           else
-                typedef point2D point2DFromPoint;
-                typedef Point PointFromPoint2D;
-#           endif
-
-            inline point2DFromPoint toPoint2D(const Point&) const;
-            inline PointFromPoint2D toPoint(const point2D&) const;
-            inline point toPoint3D(const Point&) const;
-
-
-        // Point insertion
-
-            //- Create the initial mesh from the given internal points.
-            //  Points must be inside the boundary by at least nearness
-            //  otherwise they are ignored.
-            void insertPoints
-            (
-                const point2DField& points,
-                const scalar nearness
-            );
-
-            //- Create the initial mesh from the internal points in the given 
-            //  file.  Points outside the geometry are ignored.
-            void insertPoints(const fileName& pointFileName);
-
-            //- Create the initial mesh as a regular grid of points.
-            //  Points outside the geometry are ignored.
-            void insertGrid();
-
-            //- Insert all surface point-pairs from
-            //  insertSurfaceNearestPointPairs and
-            //  findIntersectionForOutsideCentroid
-            void insertSurfacePointPairs();
-
-            //- Insert point-pairs where there are protrusions into
-            //  or out of the surface
-            void boundaryConform();
-
-
-        // Point removal
-
-            //- Remove the point-pairs introduced by insertSurfacePointPairs
-            //  and boundaryConform
-            void removeSurfacePointPairs();
-
-
-        // Point motion
-
-            inline void movePoint(const Vertex_handle& vh, const point2D& p);
-
-            //- Move the internal points to the given new locations and update
-            //  the triangulation to ensure it is Delaunay
-            void moveInternalPoints(const point2DField& newPoints);
-
-            //- Calculate the displacements to create the new points
-            void newPoints(const scalar relaxation);
-
-
-        // Write
-
-            //- Write internal points to .obj file
-            void writePoints(const fileName& fName, bool internalOnly) const;
-
-            //- Write triangles as .obj file
-            void writeTriangles(const fileName& fName, bool internalOnly) const;
-
-            //- Write dual faces as .obj file
-            void writeFaces(const fileName& fName, bool internalOnly) const;
-
-            //- Calculates dual points (circumcentres of tets) and faces
-            //  (point-cell walk of tets). Returns
-            // - dualPoints (in triangle ordering)
-            // - dualFaces (compacted)
-            void calcDual(point2DField& dualPoints, faceList& dualFaces) const;
-
-            //- Write patch
-            void writePatch(const fileName& fName) const;
-
-            void write() const;
-};
-
-
-inline bool boundaryTriangle(const CV2D::Face_handle fc);
-inline bool outsideTriangle(const CV2D::Face_handle fc);
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#include "CV2DI.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/CV2DI.H b/applications/utilities/mesh/generation/CV2DMesher/CV2DI.H
deleted file mode 100644
index 1d194371947..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/CV2DI.H
+++ /dev/null
@@ -1,169 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*---------------------------------------------------------------------------*/
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-inline Foam::label Foam::CV2D::insertPoint
-(
-    const point2D& p,
-    const label type
-)
-{
-    uint nVert = number_of_vertices();
-
-    Vertex_handle vh = insert(toPoint(p));
-
-    if (nVert == number_of_vertices())
-    {
-        WarningIn("Foam::CV2D::insertPoint")
-            << "Failed to insert point " << p << endl;
-    }
-    else
-    {
-        vh->index() = nVert;
-        vh->type() = type;
-    }
-
-    return vh->index();
-}
-
-
-inline bool Foam::CV2D::insertMirrorPoint
-(
-    const point2D& nearSurfPt,
-    const point2D& surfPt
-)
-{
-    point2D mirrorPoint(2*surfPt - nearSurfPt);
-
-    if (qSurf_.outside(toPoint3D(mirrorPoint)))
-    {
-        insertPoint(mirrorPoint, Vb::MIRROR_POINT);
-        return true;
-    }
-    else
-    {
-        return false;
-    }
-}
-
-
-inline void Foam::CV2D::insertPointPair
-(
-    const scalar ppDist,
-    const point2D& surfPt,
-    const vector2D& n
-)
-{
-    vector2D ppDistn = ppDist*n;
-
-    label master = insertPoint
-    (
-        surfPt - ppDistn,
-        number_of_vertices() + 1
-    );
-    
-    insertPoint(surfPt + ppDistn, master);
-}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-inline const Foam::point2D& Foam::CV2D::toPoint2D(const point& p) const
-{
-    return reinterpret_cast<const point2D&>(p);
-}
-
-inline Foam::point Foam::CV2D::toPoint3D(const point2D& p) const
-{
-    return point(p.x(), p.y(), z_);
-}
-
-
-#ifdef CGAL_INEXACT
-
-inline Foam::CV2D::point2DFromPoint Foam::CV2D::toPoint2D(const Point& P) const
-{
-    return reinterpret_cast<point2DFromPoint>(P);
-}
-
-inline Foam::CV2D::PointFromPoint2D Foam::CV2D::toPoint(const point2D& p) const
-{
-    return reinterpret_cast<PointFromPoint2D>(p);
-}
-
-#else
-
-inline Foam::CV2D::point2DFromPoint Foam::CV2D::toPoint2D(const Point& P) const
-{
-    return point2D(CGAL::to_double(P.x()), CGAL::to_double(P.y()));
-}
-
-inline Foam::CV2D::PointFromPoint2D Foam::CV2D::toPoint(const point2D& p) const
-{
-    return Point(p.x(), p.y());
-}
-
-#endif
-
-
-inline Foam::point Foam::CV2D::toPoint3D(const Point& P) const
-{
-    return point(CGAL::to_double(P.x()), CGAL::to_double(P.y()), z_);
-}
-
-
-inline void Foam::CV2D::movePoint(const Vertex_handle& vh, const point2D& p)
-{
-    vh->set_point(toPoint(p));
-    fast_restore_Delaunay(vh);
-}
-
-
-// * * * * * * * * * * * * * * * Friend Functions  * * * * * * * * * * * * * //
-
-inline bool Foam::boundaryTriangle(const CV2D::Face_handle fc)
-{
-    return boundaryTriangle
-    (
-        *fc->vertex(0),
-        *fc->vertex(1),
-        *fc->vertex(2)
-    );
-}
-
-inline bool Foam::outsideTriangle(const CV2D::Face_handle fc)
-{
-    return outsideTriangle
-    (
-        *fc->vertex(0),
-        *fc->vertex(1),
-        *fc->vertex(2)
-    );
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/CV2DIO.C b/applications/utilities/mesh/generation/CV2DMesher/CV2DIO.C
deleted file mode 100644
index 0e76f5c43a0..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/CV2DIO.C
+++ /dev/null
@@ -1,285 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*---------------------------------------------------------------------------*/
-
-#include "CV2D.H"
-#include "OFstream.H"
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-void Foam::CV2D::writePoints(const fileName& fName, bool internalOnly) const
-{
-    Info<< "Writing points to " << fName << nl << endl;
-    OFstream str(fName);
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (!internalOnly || vit->internalOrBoundaryPoint())
-        {
-            meshTools::writeOBJ(str, toPoint3D(vit->point()));
-        }
-    }
-}
-
-
-void Foam::CV2D::writeTriangles(const fileName& fName, bool internalOnly) const
-{
-    Info<< "Writing triangles to " << fName << nl << endl;
-    OFstream str(fName);
-
-    labelList vertexMap(number_of_vertices());
-    label verti = 0;
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (!internalOnly || !vit->farPoint())
-        {
-            vertexMap[vit->index()] = verti++;
-            meshTools::writeOBJ(str, toPoint3D(vit->point()));
-        }
-    }
-
-    for
-    (
-        Triangulation::Finite_faces_iterator fit = finite_faces_begin();
-        fit != finite_faces_end();
-        ++fit
-    )
-    {
-        if
-        (
-            !internalOnly 
-         || (
-                fit->vertex(0)->internalOrBoundaryPoint()
-             || fit->vertex(1)->internalOrBoundaryPoint()
-             || fit->vertex(2)->internalOrBoundaryPoint()
-            )
-        )
-        {
-            str << "f " << vertexMap[fit->vertex(0)->index()] + 1
-                << ' ' << vertexMap[fit->vertex(1)->index()] + 1
-                << ' ' << vertexMap[fit->vertex(2)->index()] + 1
-                << nl;
-        }
-    }
-}
-
-
-void Foam::CV2D::writeFaces(const fileName& fName, bool internalOnly) const
-{
-    Info<< "Writing dual faces to " << fName << nl << endl;
-    OFstream str(fName);
-
-    label dualVerti = 0;
-
-    for
-    (
-        Triangulation::Finite_faces_iterator fit = finite_faces_begin();
-        fit != finite_faces_end();
-        ++fit
-    )
-    {
-        if
-        (
-            !internalOnly
-         || (
-                fit->vertex(0)->internalOrBoundaryPoint()
-             || fit->vertex(1)->internalOrBoundaryPoint()
-             || fit->vertex(2)->internalOrBoundaryPoint()
-            )
-        )
-        {
-            fit->faceIndex() = dualVerti++;
-            meshTools::writeOBJ(str, toPoint3D(circumcenter(fit)));
-        }
-        else
-        {
-            fit->faceIndex() = -1;
-        }
-    }
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (!internalOnly || vit->internalOrBoundaryPoint())
-        {
-            Face_circulator fcStart = incident_faces(vit);
-            Face_circulator fc = fcStart;
-
-            str<< 'f';
-
-            do
-            {
-                if (!is_infinite(fc))
-                {
-                    if (fc->faceIndex() < 0)
-                    {
-                        FatalErrorIn
-                        (
-                            "Foam::CV2D::writeFaces"
-                            "(const fileName& fName, bool internalOnly)"
-                        )<< "Dual face uses vertex defined by a triangle"
-                            " defined by an external point"
-                            << exit(FatalError);
-                    }
-
-                    str<< ' ' << fc->faceIndex() + 1;
-                }
-            } while (++fc != fcStart);
-
-            str<< nl;
-        }
-    }
-}
-
-
-void Foam::CV2D::calcDual(point2DField& dualPoints, faceList& dualFaces) const
-{
-    // Dual points stored in triangle order.
-    dualPoints.setSize(number_of_faces());
-    label dualVerti = 0;
-
-    for
-    (
-        Triangulation::Finite_faces_iterator fit = finite_faces_begin();
-        fit != finite_faces_end();
-        ++fit
-    )
-    {
-        if
-        (
-            fit->vertex(0)->internalOrBoundaryPoint()
-         || fit->vertex(1)->internalOrBoundaryPoint()
-         || fit->vertex(2)->internalOrBoundaryPoint()
-        )
-        {
-            fit->faceIndex() = dualVerti;
-            dualPoints[dualVerti++] = toPoint2D(circumcenter(fit));
-        }
-        else
-        {
-            fit->faceIndex() = -1;
-        }
-    }
-
-    dualPoints.setSize(dualVerti);
-
-
-    // Create dual faces
-    // ~~~~~~~~~~~~~~~~~
-
-    dualFaces.setSize(number_of_vertices());
-    label dualFacei = 0;
-    labelList faceVerts(maxNvert);
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (vit->internalOrBoundaryPoint())
-        {
-            Face_circulator fcStart = incident_faces(vit);
-            Face_circulator fc = fcStart;
-            label verti = 0;
-
-            do
-            {
-                if (!is_infinite(fc))
-                {
-                    if (fc->faceIndex() < 0)
-                    {
-                        FatalErrorIn
-                        (
-                            "Foam::CV2D::calcDual"
-                            "(point2DField& dualPoints, faceList& dualFaces)"
-                        )<< "Dual face uses vertex defined by a triangle"
-                            " defined by an external point"
-                            << exit(FatalError);
-                    }
-
-                    // Look up the index of the triangle
-                    faceVerts[verti++] = fc->faceIndex();
-                }
-            } while (++fc != fcStart);
-
-            if (faceVerts.size() > 2)
-            {
-                dualFaces[dualFacei++] =
-                    face(labelList::subList(faceVerts, verti));
-            }
-            else
-            {
-                Info<< "From triangle point:" << vit->index()
-                    << " coord:" << toPoint2D(vit->point())
-                    << " generated illegal dualFace:" << faceVerts
-                    << endl;
-            }
-        }
-    }
-
-    dualFaces.setSize(dualFacei);
-}
-
-
-void Foam::CV2D::writePatch(const fileName& fName) const
-{
-    point2DField dual2DPoints;
-    faceList dualFaces;
-
-    calcDual(dual2DPoints, dualFaces);
-    pointField dualPoints(dual2DPoints.size());
-    forAll(dualPoints, ip)
-    {
-        dualPoints[ip] = toPoint3D(dual2DPoints[ip]);
-    }
-
-    // Dump as primitive patch to be read by extrudeMesh.
-    OFstream str(fName);
-
-    Info<< "Writing patch to be used with extrudeMesh to file " << fName
-        << endl;
-
-    str << dualPoints << nl << dualFaces << nl;
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/CV2DMesher.C b/applications/utilities/mesh/generation/CV2DMesher/CV2DMesher.C
deleted file mode 100644
index 0cc0720a73b..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/CV2DMesher.C
+++ /dev/null
@@ -1,116 +0,0 @@
-/*---------------------------------------------------------------------------*\
- =========                   |
- \\      /   F ield          | OpenFOAM: The Open Source CFD Toolbox
-  \\    /    O peration      |
-   \\  /     A nd            | Copyright (C) 1991-2007 OpenCFD Ltd.
-    \\/      M anipulation   |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Application
-    CV2DMesher
-
-Description
-    Conformal-Voronoi 2D automatic mesher with grid or read initial points
-    and point position relaxation with optional "squarification".
-
-\*---------------------------------------------------------------------------*/
-
-#include "CV2D.H"
-#include "argList.H"
-#include "IFstream.H"
-
-using namespace Foam;
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-// Main program:
-
-int main(int argc, char *argv[])
-{
-    argList::noParallel();
-    argList::validArgs.clear();
-    argList::validArgs.append("surface");
-    argList::validOptions.insert("pointsFile", "<filename>");
-
-    argList args(argc, argv);
-
-    // Read control dictionary
-    // ~~~~~~~~~~~~~~~~~~~~~~~
-    dictionary controlDict(IFstream(args.executable() + "Dict")());
-
-    label nIterations(readLabel(controlDict.lookup("nIterations")));
-
-
-    // Read the surface to conform to
-    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    querySurface surf(args.args()[1]);
-    surf.writeTreeOBJ();
-
-    Info<< nl
-        << "Read surface with " << surf.size() << " triangles from file "
-        << args.args()[1] << nl << endl;
-
-
-    // Read and triangulation
-    // ~~~~~~~~~~~~~~~~~~~~~~
-
-    CV2D mesh(controlDict, surf);
-    if (args.options().found("pointsFile"))
-    {
-        fileName pointFileName(IStringStream(args.options()["pointsFile"])());
-        mesh.insertPoints(pointFileName);
-        mesh.insertSurfacePointPairs();
-        mesh.boundaryConform();
-    }
-    else
-    {
-        mesh.insertGrid();
-        mesh.insertSurfacePointPairs();
-        mesh.boundaryConform();
-    }
-
-    for (int iter=1; iter<=nIterations; iter++)
-    {
-        Info<< nl
-            << "Relaxation iteration " << iter << nl
-            << "~~~~~~~~~~~~~~~~~~~~~~~~" << endl;
-
-        scalar relax =
-           mesh.meshingControls().relaxationFactorStart
-         +
-         (
-            mesh.meshingControls().relaxationFactorEnd
-          - mesh.meshingControls().relaxationFactorStart
-         )
-         *scalar(iter)/scalar(nIterations);
-
-        mesh.newPoints(relax);
-        mesh.removeSurfacePointPairs();
-        mesh.insertSurfacePointPairs();
-        mesh.boundaryConform();
-    }
-
-    mesh.write();
-
-    Info<< nl << "End\n" << endl;
-
-    return 0;
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/Make/files b/applications/utilities/mesh/generation/CV2DMesher/Make/files
deleted file mode 100755
index 8e24df0b449..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/Make/files
+++ /dev/null
@@ -1,14 +0,0 @@
-#include CGAL_FILES
-
-querySurface.C
-CV2D.C
-controls.C
-tolerances.C
-insertFeaturePoints.C
-insertSurfaceNearestPointPairs.C
-insertSurfaceNearPointPairs.C
-insertBoundaryConformPointPairs.C
-CV2DIO.C
-CV2DMesher.C
-
-EXE = $(FOAM_APPBIN)/CV2DMesher
diff --git a/applications/utilities/mesh/generation/CV2DMesher/Make/options b/applications/utilities/mesh/generation/CV2DMesher/Make/options
deleted file mode 100755
index 45810b76e30..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/Make/options
+++ /dev/null
@@ -1,16 +0,0 @@
-//EXE_DEBUG = -DFULLDEBUG -g -O0
-EXE_NDEBUG = -DNDEBUG
-
-include $(GENERAL_RULES)/CGAL
-FFLAGS = -DCGAL_FILES='"${CGAL_PATH}/CGAL/files"'
-
-EXE_INC = \
-    ${EXE_NDEBUG} \
-    ${CGAL_INC} \
-    -I$(LIB_SRC)/meshTools/lnInclude \
-    -I$(LIB_SRC)/triSurface/lnInclude
-
-EXE_LIBS = \
-    -lmeshTools \
-    -ltriSurface
-
diff --git a/applications/utilities/mesh/generation/CV2DMesher/controls.C b/applications/utilities/mesh/generation/CV2DMesher/controls.C
deleted file mode 100644
index 816cd28e65a..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/controls.C
+++ /dev/null
@@ -1,76 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV2D.H"
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::CV2D::controls::controls(const dictionary& controlDict)
-:
-    minCellSize(readScalar(controlDict.lookup("minCellSize"))),
-    minCellSize2(Foam::sqr(minCellSize)),
-
-    featAngle(readScalar(controlDict.lookup("featureAngle"))),
-    maxQuadAngle(readScalar(controlDict.lookup("maxQuadAngle"))),
-    squares(controlDict.lookup("squares")),
-
-    nearWallAlignedDist
-    (
-        readScalar(controlDict.lookup("nearWallAlignedDist"))*minCellSize
-    ),
-    nearWallAlignedDist2(Foam::sqr(nearWallAlignedDist)),
-
-    relaxOrientation(controlDict.lookup("relaxOrientation")),
-
-    insertSurfaceNearestPointPairs
-    (
-        controlDict.lookup("insertSurfaceNearestPointPairs")
-    ),
-    mirrorPoints(controlDict.lookup("mirrorPoints")),
-    insertSurfaceNearPointPairs
-    (
-        controlDict.lookup("insertSurfaceNearPointPairs")
-    ),
-    writeInitialTriangulation(controlDict.lookup("writeInitialTriangulation")),
-    writeFeatureTriangulation(controlDict.lookup("writeFeatureTriangulation")),
-    writeNearestTriangulation(controlDict.lookup("writeNearestTriangulation")),
-    writeInsertedPointPairs(controlDict.lookup("writeInsertedPointPairs")),
-    writeFinalTriangulation(controlDict.lookup("writeFinalTriangulation")),
-    randomiseInitialGrid(controlDict.lookup("randomiseInitialGrid")),
-    randomPurturbation(readScalar(controlDict.lookup("randomPurturbation"))),
-    maxBoundaryConformingIter
-    (
-        readLabel(controlDict.lookup("maxBoundaryConformingIter"))
-    ),
-    relaxationFactorStart
-    (
-        readScalar(controlDict.lookup("relaxationFactorStart"))
-    ),
-    relaxationFactorEnd(readScalar(controlDict.lookup("relaxationFactorEnd")))
-{}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/indexedFace.H b/applications/utilities/mesh/generation/CV2DMesher/indexedFace.H
deleted file mode 100644
index b291e106de7..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/indexedFace.H
+++ /dev/null
@@ -1,148 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Class
-    indexedFace
-
-Description
-    An indexed form of CGAL::Triangulation_face_base_2<K> used to keep
-    track of the vertices in the triangulation.
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef indexedFace_H
-#define indexedFace_H
-
-#include <CGAL/Triangulation_2.h>
-#include "indexedVertex.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace CGAL
-{
-
-/*---------------------------------------------------------------------------*\
-                       Class indexedFace Declaration
-\*---------------------------------------------------------------------------*/
-
-template<class Gt, class Fb=CGAL::Triangulation_face_base_2<Gt> >
-class indexedFace 
-:
-    public Fb
-{
-    // Private data
-
-        //- The index for this triangle face
-        //  -1: triangle and changed and associated data needs updating
-        // >=0: index of triangles, set by external update algorithm
-        int index_;
-
-
-public:
-
-    enum faceTypes
-    {
-        UNCHANGED           = 0,
-        CHANGED             = -1,
-        SAVE_CHANGED        = -2
-    };
-
-    typedef typename Fb::Vertex_handle                   Vertex_handle;
-    typedef typename Fb::Face_handle                     Face_handle;
-
-    template < typename TDS2 >
-    struct Rebind_TDS
-    {
-        typedef typename Fb::template Rebind_TDS<TDS2>::Other Fb2;
-        typedef indexedFace<Gt, Fb2>  Other;
-    };
-
-
-    indexedFace()
-    :
-        Fb(),
-        index_(CHANGED)
-    {}
-
-    indexedFace(Vertex_handle v0, Vertex_handle v1, Vertex_handle v2)
-    :
-        Fb(v0, v1, v2),
-        index_(CHANGED)
-    {}
-
-    indexedFace
-    (
-        Vertex_handle v0, 
-        Vertex_handle v1,
-        Vertex_handle v2, 
-        Face_handle n0, 
-        Face_handle n1,
-        Face_handle n2
-    )
-    :
-        Fb(v0, v1, v2, n0, n1, n2),
-        index_(CHANGED)
-    {}
-
-
-    void set_vertex(int i, Vertex_handle v)
-    {
-        index_ = CHANGED;
-        Fb::set_vertex(i, v);
-    }
-
-    void set_vertices()
-    {
-        index_ = CHANGED;
-        Fb::set_vertices();
-    }
-
-    void set_vertices(Vertex_handle v0, Vertex_handle v1, Vertex_handle v2)
-    {
-        index_ = CHANGED;
-        Fb::set_vertices(v0, v1, v2);
-    }
-
-
-    int& faceIndex()
-    {
-        return index_;
-    }
-
-    int faceIndex() const
-    {
-        return index_;
-    }
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace CGAL
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/indexedVertex.H b/applications/utilities/mesh/generation/CV2DMesher/indexedVertex.H
deleted file mode 100644
index 0a1e0b5df68..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/indexedVertex.H
+++ /dev/null
@@ -1,261 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Class
-    indexedVertex
-
-Description
-    An indexed form of CGAL::Triangulation_vertex_base_2<K> used to keep
-    track of the vertices in the triangulation.
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef indexedVertex_H
-#define indexedVertex_H
-
-#include <CGAL/Triangulation_2.h>
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace CGAL
-{
-
-/*---------------------------------------------------------------------------*\
-                       Class indexedVertex Declaration
-\*---------------------------------------------------------------------------*/
-
-template<class Gt, class Vb=CGAL::Triangulation_vertex_base_2<Gt> >
-class indexedVertex 
-:
-    public Vb
-{
-    // Private data
-
-        //- The index for this triangle vertex
-        int index_;
-
-        //- Index of pair-point :
-        //  NEAR_BOUNDARY_POINT : internal near boundary point.
-        //  INTERNAL_POINT      : internal point.
-        //  FAR_POINT           : far-point.
-        //  >= 0                : part of point-pair. Index of other point.
-        //                        Lowest numbered is inside one (master).
-        int type_;
-
-
-public:
-
-    enum pointTypes
-    {
-        NEAR_BOUNDARY_POINT = -4,
-        INTERNAL_POINT      = -3,
-        MIRROR_POINT        = -2,
-        FAR_POINT           = -1
-    };
-
-    typedef typename Vb::Vertex_handle      Vertex_handle;
-    typedef typename Vb::Face_handle        Face_handle;
-    typedef typename Vb::Point              Point;
-
-    template<typename TDS2>
-    struct Rebind_TDS
-    {
-        typedef typename Vb::template Rebind_TDS<TDS2>::Other    Vb2;
-        typedef indexedVertex<Gt,Vb2>                           Other;
-    };
-
-
-    indexedVertex()
-    :
-        Vb(),
-        index_(INTERNAL_POINT),
-        type_(INTERNAL_POINT)
-    {}
-
-    indexedVertex(const Point& p)
-    :
-        Vb(p),
-        index_(INTERNAL_POINT),
-        type_(INTERNAL_POINT)
-    {}
-
-    indexedVertex(const Point& p, Face_handle f)
-    :
-        Vb(f, p),
-        index_(INTERNAL_POINT),
-        type_(INTERNAL_POINT)
-    {}
-
-    indexedVertex(Face_handle f)
-    :
-        Vb(f),
-        index_(INTERNAL_POINT),
-        type_(INTERNAL_POINT)
-    {}
-
-
-    int& index()
-    {
-        return index_;
-    }
-
-    int index() const
-    {
-        return index_;
-    }
-
-
-    int& type()
-    {
-        return type_;
-    }
-
-    int type() const
-    {
-        return type_;
-    }
-
-
-    //- Is point a far-point
-    inline bool farPoint() const
-    {
-        return type_ == FAR_POINT;
-    }
-
-    //- Is point internal, i.e. not on boundary
-    inline bool internalPoint() const
-    {
-        return type_ <= INTERNAL_POINT;
-    }
-
-    //- Is point internal and near the boundary
-    inline bool nearBoundary() const
-    {
-        return type_ == NEAR_BOUNDARY_POINT;
-    }
-
-    //- Set the point to be near the boundary
-    inline void setNearBoundary()
-    {
-        type_ = NEAR_BOUNDARY_POINT;
-    }
-
-    //- Is point a mirror point
-    inline bool mirrorPoint() const
-    {
-        return type_ == MIRROR_POINT;
-    }
-
-    //- Either master or slave of pointPair.
-    inline bool pairPoint() const
-    {
-        return type_ >= 0;
-    }
-
-    //- Master of a pointPair is the lowest numbered one.
-    inline bool ppMaster() const
-    {
-        if (type_ > index_)
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    //- Slave of a pointPair is the highest numbered one.
-    inline bool ppSlave() const
-    {
-        if (type_ >= 0 && type_ < index_)
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    //- Either original internal point or master of pointPair.
-    inline bool internalOrBoundaryPoint() const
-    {
-        return internalPoint() || ppMaster();
-    }
-
-    //- Is point near the boundary or part of the boundary definition
-    inline bool nearOrOnBoundary() const
-    {
-        return pairPoint() || mirrorPoint() || nearBoundary();
-    }
-
-    //- Do the two given vertices consitute a boundary point-pair
-    inline friend bool pointPair
-    (
-        const indexedVertex& v0,
-        const indexedVertex& v1
-    )
-    {
-        return v0.index_ == v1.type_ || v1.index_ == v0.type_;
-    }
-
-    //- Do the three given vertices consitute a boundary triangle
-    inline friend bool boundaryTriangle
-    (
-        const indexedVertex& v0,
-        const indexedVertex& v1,
-        const indexedVertex& v2
-    )
-    {
-        return (v0.pairPoint() && pointPair(v1, v2))
-            || (v1.pairPoint() && pointPair(v2, v0))
-            || (v2.pairPoint() && pointPair(v0, v1));
-    }
-
-    //- Do the three given vertices consitute an outside triangle
-    inline friend bool outsideTriangle
-    (
-        const indexedVertex& v0,
-        const indexedVertex& v1,
-        const indexedVertex& v2
-    )
-    {
-        return (v0.farPoint() || v0.ppSlave())
-            || (v1.farPoint() || v1.ppSlave())
-            || (v2.farPoint() || v2.ppSlave());
-    }
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace CGAL
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/insertBoundaryConformPointPairs.C b/applications/utilities/mesh/generation/CV2DMesher/insertBoundaryConformPointPairs.C
deleted file mode 100644
index 63ddbadf0a3..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/insertBoundaryConformPointPairs.C
+++ /dev/null
@@ -1,290 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV2D.H"
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-void Foam::CV2D::insertPointPair
-(
-    Triangulation::Finite_vertices_iterator& vit,
-    const point2D& p,
-    const label trii
-)
-{
-    if
-    (
-        !controls_.mirrorPoints
-     || !insertMirrorPoint(toPoint2D(vit->point()), p)
-    )
-    {
-        insertPointPair
-        (
-            tols_.ppDist,
-            p,
-            toPoint2D(qSurf_.faceNormals()[trii])
-        );
-    }
-
-    vit = Triangulation::Finite_vertices_iterator
-    (
-        CGAL::Filter_iterator
-        <
-            Triangulation::All_vertices_iterator,
-            Triangulation::Infinite_tester
-        >(finite_vertices_end(), vit.predicate(), vit.base())
-    );
-}
-
-
-bool Foam::CV2D::insertPointPairAtIntersection
-(
-    Triangulation::Finite_vertices_iterator& vit,
-    const point2D& defVert,
-    const point2D vertices[],
-    const scalar maxProtSize2
-)
-{
-    bool found = false;
-    point2D interPoint;
-    label interTri = -1;
-    scalar interDist2 = 0;
-
-    Face_circulator fcStart = incident_faces(vit);
-    Face_circulator fc = fcStart;
-    label vi = 0;
-
-    do
-    {
-        if (!is_infinite(fc))
-        {
-            pointIndexHit pHit = qSurf_.tree().findLine
-            (
-                toPoint3D(defVert),
-                toPoint3D(vertices[vi])
-            );
-
-            if (pHit.hit())
-            {
-                scalar dist2 =
-                    magSqr(toPoint2D(pHit.hitPoint()) - vertices[vi]);
-
-                // Check the point is further away than the furthest so far
-                if (dist2 > interDist2)
-                {
-                    scalar mps2 = maxProtSize2;
-
-                    // If this is a boundary triangle reset the tolerance
-                    // to avoid finding a hit point very close to a boundary
-                    // vertex
-                    if (boundaryTriangle(fc))
-                    {
-                        mps2 = tols_.maxNotchLen2;
-                    }
-
-                    if (dist2 > mps2)
-                    {
-                        found = true;
-                        interPoint = toPoint2D(pHit.hitPoint());
-                        interTri = pHit.index();
-                        interDist2 = dist2;
-                    }
-                }
-            }
-
-            vi++;
-        }
-    } while (++fc != fcStart);
-
-    if (found)
-    {
-        insertPointPair(vit, interPoint, interTri);
-        return true;
-    }
-    else
-    {
-        return false;
-    }
-}
-
-
-Foam::label Foam::CV2D::insertBoundaryConformPointPairs
-(
-    const fileName& fName
-)
-{
-    label nIntersections = 0;
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        vit++
-    )
-    {
-        // Consider only those points part of point-pairs or near boundary
-        if (!vit->nearOrOnBoundary())
-        {
-            continue;
-        }
-
-        // Counter-clockwise circulator
-        Face_circulator fcStart = incident_faces(vit);
-        Face_circulator fc = fcStart;
-
-        bool infinite = false;
-        bool changed = false;
-
-        do
-        {
-            if (is_infinite(fc))
-            {
-                infinite = true;
-                break;
-            }
-            else if (fc->faceIndex() < Fb::UNCHANGED)
-            {
-                changed = true;
-                break;
-            }
-        } while (++fc != fcStart);
-
-        // If the dual-cell is connected to the infinite point or none of the
-        // faces whose circumcentres it uses have changed ignore
-        if (infinite || !changed) continue;
-
-        fc = fcStart;
-        label nVerts = 0;
-
-        do
-        {
-            vertices[nVerts++] = toPoint2D(circumcenter(fc));
-
-            if (nVerts == maxNvert)
-            {
-                break;
-            }
-        } while (++fc != fcStart);
-
-        // Check if dual-cell has a large number of faces in which case
-        // assumed to be in the far-field and reject
-        if (nVerts == maxNvert) continue;
-
-        // Set n+1 vertex to the first vertex for easy circulating
-        vertices[nVerts] = vertices[0];
-
-        // Convert triangle vertex to OpenFOAM point
-        point2DFromPoint defVert = toPoint2D(vit->point());
-
-        scalar maxProtSize2 = tols_.maxNotchLen2;
-
-        if (vit->internalOrBoundaryPoint())
-        {
-            // Calculate metrics of the dual-cell
-            // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-            // The perimeter of the dual-cell
-            scalar perimeter = 0;
-
-            // Twice the area of the dual-cell
-            scalar areaT2 = 0;
-
-            for (int vi=0; vi<nVerts; vi++)
-            {
-                vector2D edge(vertices[vi+1] - vertices[vi]);
-                perimeter += mag(edge);
-                vector2D otherEdge = defVert - vertices[vi];
-                areaT2 += mag(edge.x()*otherEdge.y() - edge.y()*otherEdge.x());
-            }
-
-            // If the dual-cell is very small reject refinement
-            if (areaT2 < tols_.minEdgeLen2) continue;
-
-            // Estimate the cell width
-            scalar cellWidth = areaT2/perimeter;
-
-
-            // Check dimensions of dual-cell
-            /*
-            // Quick rejection of dual-cell refinement based on it's perimeter
-            if (perimeter < 2*tols_.minCellSize) continue;
-
-            // Also check the area of the cell and reject refinement
-            // if it is less than that allowed
-            if (areaT2 < tols_.minCellSize2) continue;
-
-            // Estimate the cell width and reject refinement if it is less than
-            // that allowed
-            if (cellWidth < 0.5*tols_.minEdgeLen) continue;
-            */
-
-            if
-            (
-                perimeter > 2*controls_.minCellSize
-             && areaT2 > controls_.minCellSize2
-             && cellWidth > 0.5*tols_.minEdgeLen
-            )
-            {
-                maxProtSize2 = 0.25*tols_.maxNotchLen2;
-            }
-        }
-
-        if (insertPointPairAtIntersection(vit, defVert, vertices, maxProtSize2))
-        {
-            nIntersections++;
-        }
-    }
-
-    return nIntersections;
-}
-
-
-void Foam::CV2D::markNearBoundaryPoints()
-{
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        vit++
-    )
-    {
-        if (vit->internalPoint())
-        {
-            point vert(toPoint3D(vit->point()));
-
-            pointIndexHit pHit =
-                qSurf_.tree().findNearest(vert, 4*controls_.minCellSize2);
-
-            if (pHit.hit())
-            {
-                vit->setNearBoundary();
-            }
-        }
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/insertFeaturePoints.C b/applications/utilities/mesh/generation/CV2DMesher/insertFeaturePoints.C
deleted file mode 100644
index 9c4d26d80d7..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/insertFeaturePoints.C
+++ /dev/null
@@ -1,162 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV2D.H"
-#include "plane.H"
-#include "triSurfaceTools.H"
-#include "mathematicalConstants.H"
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-// Create feature points/edges by creating a triplet in the corner.
-// (this triplet will have as its circumcentre the feature)
-void Foam::CV2D::insertFeaturePoints()
-{
-    labelList featEdges(qSurf_.extractFeatures2D(controls_.featAngle));
-
-    const pointField& localPts = qSurf_.localPoints();
-
-    forAll(featEdges, i)
-    {
-        label edgeI = featEdges[i];
-        const edge& featEdge = qSurf_.edges()[edgeI];
-
-        // Get the feature point as the mid-point of the edge and convert to 2D
-        point2D featPt = toPoint2D(featEdge.centre(qSurf_.localPoints()));
-
-        // Pick up the two faces adjacent to the feature edge
-        const labelList& eFaces = qSurf_.edgeFaces()[edgeI];
-
-        label faceA = eFaces[0];
-        vector2D nA = toPoint2D(qSurf_.faceNormals()[faceA]);
-
-        label faceB = eFaces[1];
-        vector2D nB = toPoint2D(qSurf_.faceNormals()[faceB]);
-
-        // Intersect planes parallel to faceA and faceB offset by ppDist.
-        plane planeA(toPoint3D(featPt - tols_.ppDist*nA), toPoint3D(nA));
-        plane planeB(toPoint3D(featPt - tols_.ppDist*nB), toPoint3D(nB));
-        plane::ray interLine(planeA.planeIntersect(planeB));
-
-        // The reference point is where this line intersects the z_ plane
-        point2D refPt = toPoint2D
-        (
-            interLine.refPoint()
-          + ((z_ - interLine.refPoint().z())/interLine.dir().z())
-           *interLine.dir()
-        );
-
-        point2D faceAVert = toPoint2D
-        (
-            localPts[triSurfaceTools::oppositeVertex(qSurf_, faceA, edgeI)]
-        );
-
-        // Determine convex or concave angle
-        if (((faceAVert - featPt) & nB) < 0)
-        {
-            // Convex. So refPt will be inside domain and hence a master point
-
-            // Insert the master point refering the the first slave
-            label masterPtIndex = insertPoint(refPt, number_of_vertices() + 1);
-
-            // Insert the slave points by reflecting refPt in both faces.
-            // with each slave refering to the master
-
-            point2D reflectedA = refPt + 2*((featPt - refPt) & nA)*nA;
-            insertPoint(reflectedA, masterPtIndex);
-
-            point2D reflectedB = refPt + 2*((featPt - refPt) & nB)*nB;
-            insertPoint(reflectedB, masterPtIndex);
-        }
-        else
-        {
-            // Concave. master and reflected points inside the domain.
-            // Generate reflected master to be outside.
-            point2D reflMasterPt = refPt + 2*(featPt - refPt);
-
-            // Reflect refPt in both faces.
-            point2D reflectedA = 
-                reflMasterPt + 2*((featPt - reflMasterPt) & nA)*nA;
-
-            point2D reflectedB =
-                reflMasterPt + 2*((featPt - reflMasterPt) & nB)*nB;
-
-            // Total angle around the concave feature
-//             scalar totalAngle = 
-//                 180*(2.0*mathematicalConstant::pi - acos(mag(nA & nB)))
-//                /mathematicalConstant::pi;
-
-            scalar totalAngle = 
-                180*(mathematicalConstant::pi + acos(mag(nA & nB)))
-               /mathematicalConstant::pi;
-
-            // Number of quadrants the angle should be split into
-            int nQuads = int(totalAngle/controls_.maxQuadAngle) + 1;
-
-            // The number of additional master points needed to obtain the
-            // required number of quadrants.
-            int nAddPoints = min(max(nQuads - 2, 0), 2);
-
-            // index of reflMaster
-            label reflectedMaster = number_of_vertices() + 2 + nAddPoints;
-
-            // Master A is inside.
-            label reflectedAI = insertPoint(reflectedA, reflectedMaster);
-
-            // Master B is inside.
-            insertPoint(reflectedB, reflectedMaster);
-
-            if (nAddPoints == 1)
-            {
-                // One additinal point is the reflection of the slave point,
-                // i.e. the original reference point
-                insertPoint(refPt, reflectedMaster);
-            }
-            else if (nAddPoints == 2)
-            {
-                point2D reflectedAa = refPt - ((featPt - reflMasterPt) & nB)*nB;
-                insertPoint(reflectedAa, reflectedMaster);
-
-                point2D reflectedBb = refPt - ((featPt - reflMasterPt) & nA)*nA;
-                insertPoint(reflectedBb, reflectedMaster);
-            }
-
-            // Slave is outside.
-            insertPoint(reflMasterPt, reflectedAI);
-        }
-    }
-
-    if (controls_.writeFeatureTriangulation)
-    {
-        writePoints("feat_allPoints.obj", false);
-        writeFaces("feat_allFaces.obj", false);
-        writeFaces("feat_faces.obj", true);
-        writeTriangles("feat_triangles.obj", true);
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/insertSurfaceNearPointPairs.C b/applications/utilities/mesh/generation/CV2DMesher/insertSurfaceNearPointPairs.C
deleted file mode 100644
index 0ff045380bb..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/insertSurfaceNearPointPairs.C
+++ /dev/null
@@ -1,103 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV2D.H"
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-void Foam::CV2D::insertSurfaceNearPointPairs()
-{
-    Info<< "insertSurfaceNearPointPairs: ";
-
-    label nNearPoints = 0;
-
-    for
-    (
-        Triangulation::Finite_edges_iterator eit = finite_edges_begin();
-        eit != finite_edges_end();
-        eit++
-    )
-    {
-        Vertex_handle v0h = eit->first->vertex(cw(eit->second));
-        Vertex_handle v1h = eit->first->vertex(ccw(eit->second));
-
-        if (v0h->ppMaster() && v1h->ppMaster())
-        {
-            point2DFromPoint v0(toPoint2D(v0h->point()));
-            point2DFromPoint v1(toPoint2D(v1h->point()));
-
-            // Check that the two triangle vertices are further apart than the
-            // minimum cell size
-            if (magSqr(v1 - v0) > controls_.minCellSize2)
-            {
-                point2D e0(toPoint2D(circumcenter(eit->first)));
-
-                point2D e1
-                (
-                    toPoint2D(circumcenter(eit->first->neighbor(eit->second)))
-                );
-
-                // Calculate the length^2 of the edge normal to the surface
-                scalar edgeLen2 = magSqr(e0 - e1);
-
-                if (edgeLen2 < tols_.minNearPointDist2)
-                {
-                    pointIndexHit pHit = qSurf_.tree().findNearest
-                    (
-                        toPoint3D(e0),
-                        tols_.minEdgeLen2
-                    );
-
-                    if (pHit.hit())
-                    {
-                        insertPointPair
-                        (
-                            tols_.ppDist,
-                            toPoint2D(pHit.hitPoint()),
-                            toPoint2D(qSurf_.faceNormals()[pHit.index()])
-                        );
-
-                        nNearPoints++;
-
-                        // Correct the edge iterator for the change in the 
-                        // number od edges following the point-pair insertion
-                        eit = Finite_edges_iterator
-                        (
-                            finite_edges_end().base(),
-                            eit.predicate(),
-                            eit.base()
-                        );
-                    }
-                }
-            }
-        }
-    }
-
-    Info<< nNearPoints << " point-pairs inserted" << endl;
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/insertSurfaceNearestPointPairs.C b/applications/utilities/mesh/generation/CV2DMesher/insertSurfaceNearestPointPairs.C
deleted file mode 100644
index 85a50e7bca4..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/insertSurfaceNearestPointPairs.C
+++ /dev/null
@@ -1,223 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV2D.H"
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-bool Foam::CV2D::dualCellSurfaceIntersection
-(
-    const Triangulation::Finite_vertices_iterator& vit
-) const
-{
-    Triangulation::Edge_circulator ecStart = incident_edges(vit);
-    Triangulation::Edge_circulator ec = ecStart;
-
-    do
-    {
-        if (!is_infinite(ec))
-        {
-            point e0 = toPoint3D(circumcenter(ec->first));
-
-            // If edge end is outside bounding box then edge cuts boundary
-            if (!qSurf_.bb().contains(e0))
-            {
-                return true;
-            }
-
-            point e1 = toPoint3D(circumcenter(ec->first->neighbor(ec->second)));
-
-            // If other edge end is ouside bounding box then edge cuts boundary
-            if (!qSurf_.bb().contains(e1))
-            {
-                return true;
-            }
-
-            if (magSqr(e1 - e0) > tols_.minEdgeLen2)
-            {
-                pointIndexHit pHit = qSurf_.tree().findLineAny(e0, e1);
-
-                if (pHit.hit())
-                {
-                    return true;
-                }
-            }
-        }
-
-    } while (++ec != ecStart);
-
-    return false;
-}
-
-
-void Foam::CV2D::insertPointPairs
-(
-    const DynamicList<point2D>& nearSurfacePoints,
-    const DynamicList<point2D>& surfacePoints,
-    const DynamicList<label>& surfaceTris,
-    const fileName fName
-)
-{
-    if (controls_.mirrorPoints)
-    {
-        forAll(surfacePoints, ppi)
-        {
-            insertMirrorPoint
-            (
-                nearSurfacePoints[ppi],
-                surfacePoints[ppi]
-            );
-        }
-    }
-    else
-    {
-        forAll(surfacePoints, ppi)
-        {
-            insertPointPair
-            (
-                tols_.ppDist,
-                surfacePoints[ppi],
-                toPoint2D(qSurf_.faceNormals()[surfaceTris[ppi]])
-            );
-        }
-    }
-
-    Info<< surfacePoints.size() << " point-pairs inserted" << endl;
-
-    if (controls_.writeInsertedPointPairs)
-    {
-        OFstream str(fName);
-        label vertI = 0;
-
-        forAll(surfacePoints, ppi)
-        {
-            meshTools::writeOBJ(str, toPoint3D(surfacePoints[ppi]));
-            vertI++;
-        }
-
-        Info<< "insertPointPairs: Written " << surfacePoints.size()
-            << " inserted point-pair locations to file "
-            << str.name() << endl;
-    }
-}
-
-
-void Foam::CV2D::insertSurfaceNearestPointPairs()
-{
-    Info<< "insertSurfaceNearestPointPairs: ";
-
-    label nSurfacePointsEst = min
-    (
-        number_of_vertices(),
-        size_t(10*sqrt(scalar(number_of_vertices())))
-    );
-
-    DynamicList<point2D> nearSurfacePoints(nSurfacePointsEst);
-    DynamicList<point2D> surfacePoints(nSurfacePointsEst);
-    DynamicList<label> surfaceTris(nSurfacePointsEst);
-
-    // Local references to surface mesh addressing
-    const pointField& localPoints = qSurf_.localPoints();
-    const labelListList& edgeFaces = qSurf_.edgeFaces();
-    const vectorField& faceNormals = qSurf_.faceNormals();
-    const labelListList& faceEdges = qSurf_.faceEdges();
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        vit++
-    )
-    {
-        if (vit->internalPoint())
-        {
-            point2DFromPoint vert(toPoint2D(vit->point()));
-
-            pointIndexHit pHit = qSurf_.tree().findNearest
-            (
-                toPoint3D(vert),
-                4*controls_.minCellSize2
-            );
-
-            if (pHit.hit())
-            {
-                vit->setNearBoundary();
-
-                // Reference to the nearest triangle
-                const labelledTri& f = qSurf_[pHit.index()];
-
-                // Find where point is on triangle.
-                // Note tolerance needed is relative one
-                // (used in comparing normalized [0..1] triangle coordinates).
-                label nearType, nearLabel;
-                triPointRef
-                (
-                    localPoints[f[0]],
-                    localPoints[f[1]],
-                    localPoints[f[2]]
-                ).classify(pHit.hitPoint(), 1e-6, nearType, nearLabel);
-
-                // If point is on a edge check if it is an internal feature
-
-                bool internalFeatureEdge = false;
-
-                if (nearType == triPointRef::EDGE)
-                {
-                    label edgeI = faceEdges[pHit.index()][nearLabel];
-                    const labelList& eFaces = edgeFaces[edgeI];
-
-                    if
-                    (
-                        eFaces.size() == 2
-                     && (faceNormals[eFaces[0]] & faceNormals[eFaces[1]])
-                       < -0.2
-                    )
-                    {
-                        internalFeatureEdge = true;
-                    }
-                }
-
-                if (!internalFeatureEdge && dualCellSurfaceIntersection(vit))
-                {
-                    nearSurfacePoints.append(vert);
-                    surfacePoints.append(toPoint2D(pHit.hitPoint()));
-                    surfaceTris.append(pHit.index());
-                }
-            }
-        }
-    }
-
-    insertPointPairs
-    (
-        nearSurfacePoints,
-        surfacePoints,
-        surfaceTris,
-        "surfaceNearestIntersections.obj"
-    );
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/querySurface.C b/applications/utilities/mesh/generation/CV2DMesher/querySurface.C
deleted file mode 100644
index 656e2ff5250..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/querySurface.C
+++ /dev/null
@@ -1,229 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "querySurface.H"
-#include "mathematicalConstants.H"
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::querySurface::querySurface(const fileName& surfaceFileName)
-:
-    triSurface(surfaceFileName),
-    rndGen_(12345),
-    bb_(localPoints()),
-    tree_
-    (
-        treeDataTriSurface(*this),
-        bb_.extend(rndGen_, 1e-3), // slightly randomize bb
-        8,                         // maxLevel
-        4, //10,                   // leafsize
-        10.0 //3.0                 // duplicity
-    )
-{}
-
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-Foam::querySurface::~querySurface()
-{}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-Foam::labelList Foam::querySurface::extractFeatures2D
-(
-    const scalar featAngle
-) const
-{
-    scalar featCos = cos(mathematicalConstant::pi*featAngle/180.0);
-
-    const labelListList& edgeFaces = this->edgeFaces();
-    const pointField& localPoints = this->localPoints();
-    const edgeList& edges = this->edges();
-    const vectorField& faceNormals = this->faceNormals();
-
-    DynamicList<label> featEdges(edges.size());
-
-    forAll(edgeFaces, edgeI)
-    {
-        const edge& e = edges[edgeI];
-
-        if (magSqr(e.vec(localPoints) & vector(1,1,0)) < SMALL)
-        {
-            const labelList& eFaces = edgeFaces[edgeI];
-
-            if
-            (
-                eFaces.size() == 2
-             && (faceNormals[eFaces[0]] & faceNormals[eFaces[1]]) < featCos
-            )
-            {
-                featEdges.append(edgeI);
-            }
-        }
-    }
-
-    return featEdges.shrink();
-}
-
-Foam::indexedOctree<Foam::treeDataTriSurface>::volumeType
-Foam::querySurface::insideOutside
-(
-    const scalar searchSpan2,
-    const point& pt
-) const
-{
-    if (!bb_.contains(pt))
-    {
-        return indexedOctree<treeDataTriSurface>::OUTSIDE;
-    }
-
-    pointIndexHit pHit = tree_.findNearest(pt, searchSpan2);
-
-    if (!pHit.hit())
-    {
-        return tree_.getVolumeType(pt);
-    }
-    else
-    {
-        return indexedOctree<treeDataTriSurface>::MIXED;
-    }
-}
-
-
-// Check if point is inside surface
-bool Foam::querySurface::inside(const point& pt) const
-{
-    if (!bb_.contains(pt))
-    {
-        return false;
-    }
-
-    return
-    (
-        tree_.getVolumeType(pt) == indexedOctree<treeDataTriSurface>::INSIDE
-    );
-}
-
-
-// Check if point is outside surface
-bool Foam::querySurface::outside(const point& pt) const
-{
-    if (!bb_.contains(pt))
-    {
-        return true;
-    }
-
-    return
-    (
-        tree_.getVolumeType(pt) == indexedOctree<treeDataTriSurface>::OUTSIDE
-    );
-}
-
-
-// Check if point is inside surface by at least dist2
-bool Foam::querySurface::wellInside(const point& pt, const scalar dist2) const
-{
-    if (!bb_.contains(pt))
-    {
-        return false;
-    }
-
-    pointIndexHit pHit = tree_.findNearest(pt, dist2);
-
-    if (pHit.hit())
-    {
-        return false;
-    }
-    else
-    {
-        return
-            tree_.getVolumeType(pt)
-         == indexedOctree<treeDataTriSurface>::INSIDE;
-    }
-}
-
-
-// Check if point is outside surface by at least dist2
-bool Foam::querySurface::wellOutside(const point& pt, const scalar dist2) const
-{
-    if (!bb_.contains(pt))
-    {
-        return true;
-    }
-
-    pointIndexHit pHit = tree_.findNearest(pt, dist2);
-
-    if (pHit.hit())
-    {
-        return false;
-    }
-    else
-    {
-        return
-            tree_.getVolumeType(pt)
-         == indexedOctree<treeDataTriSurface>::OUTSIDE;
-    }
-}
-
-
-void Foam::querySurface::writeTreeOBJ() const
-{
-    OFstream str("tree.obj");
-    label vertI = 0;
-
-    const List<indexedOctree<treeDataTriSurface>::node>& nodes = tree_.nodes();
-
-    forAll(nodes, nodeI)
-    {
-        const indexedOctree<treeDataTriSurface>::node& nod = nodes[nodeI];
-
-        const treeBoundBox& bb = nod.bb_;
-
-        const pointField points(bb.points());
-
-        label startVertI = vertI;
-
-        forAll(points, i)
-        {
-            meshTools::writeOBJ(str, points[i]);
-            vertI++;
-        }
-
-        const edgeList edges(treeBoundBox::edges);
-
-        forAll(edges, i)
-        {
-            const edge& e = edges[i];
-
-            str << "l " << e[0]+startVertI+1 << ' ' << e[1]+startVertI+1
-                << nl;
-        }
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/querySurface.H b/applications/utilities/mesh/generation/CV2DMesher/querySurface.H
deleted file mode 100644
index d1883f11592..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/querySurface.H
+++ /dev/null
@@ -1,149 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Class
-    querySurface
-
-Description
-    Searchable triSurface using an octree to speed-up queries.
-
-SourceFiles
-    querySurface.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef querySurface_H
-#define querySurface_H
-
-#include "triSurface.H"
-#include "treeDataTriSurface.H"
-#include "indexedOctree.H"
-#include "Random.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-/*---------------------------------------------------------------------------*\
-                           Class querySurface Declaration
-\*---------------------------------------------------------------------------*/
-
-class querySurface
-:
-    public triSurface
-{
-    // Private data
-
-        Random rndGen_;
-
-        // Bounding box of surface. Used for relative tolerances.
-        treeBoundBox bb_;
-
-        // Search engine on surface
-        indexedOctree<treeDataTriSurface> tree_;
-
-
-    // Private Member Functions
-
-        //- Disallow default bitwise copy construct
-        querySurface(const querySurface&);
-
-        //- Disallow default bitwise assignment
-        void operator=(const querySurface&);
-
-
-public:
-
-    // Constructors
-
-        //- Construct given file name of the surface
-        querySurface(const fileName& surfaceFileName);
-
-
-    // Destructor
-
-        ~querySurface();
-
-
-    // Member Functions
-
-        // Access
-
-            const treeBoundBox& bb() const
-            {
-                return bb_;
-            }
-
-            const indexedOctree<treeDataTriSurface>& tree() const
-            {
-                return tree_;
-            }
-
-
-        // Query
-
-            //- Extract feature edges/points(2D)
-            //  using the given feature angle in deg
-            labelList extractFeatures2D(const scalar featAngle) const;
-
-            //- Returns inside, outside or mixed (= close to surface)
-            indexedOctree<Foam::treeDataTriSurface>::volumeType insideOutside
-            (
-                const scalar searchSpan2,
-                const point& pt
-            ) const;
-
-            //- Check if point is inside surface
-            bool inside(const point& pt) const;
-
-            //- Check if point is outside surface
-            bool outside(const point& pt) const;
-
-            //- Check if point is inside surface by at least dist2
-            bool wellInside(const point& pt, const scalar dist2) const;
-
-            //- Check if point is outside surface by at least dist2
-            bool wellOutside(const point& pt, const scalar dist2) const;
-
-
-        // Write
-
-            void writeTreeOBJ() const;
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-//#include "querySurfaceI.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV2DMesher/tolerances.C b/applications/utilities/mesh/generation/CV2DMesher/tolerances.C
deleted file mode 100644
index 7d6700e1d53..00000000000
--- a/applications/utilities/mesh/generation/CV2DMesher/tolerances.C
+++ /dev/null
@@ -1,62 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV2D.H"
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::CV2D::tolerances::tolerances
-(
-    const dictionary& controlDict,
-    const scalar minCellSize,
-    const boundBox& bb
-)
-:
-    span
-    (
-        max(mag(bb.max().x()), mag(bb.min().x()))
-      + max(mag(bb.max().y()), mag(bb.min().y()))
-    ),
-    span2(Foam::sqr(span)),
-
-    minEdgeLen(readScalar(controlDict.lookup("minEdgeLenCoeff"))*minCellSize),
-    minEdgeLen2(Foam::sqr(minEdgeLen)),
-
-    maxNotchLen(readScalar(controlDict.lookup("maxNotchLenCoeff"))*minCellSize),
-    maxNotchLen2(Foam::sqr(maxNotchLen)),
-
-    minNearPointDist
-    (
-        readScalar(controlDict.lookup("minNearPointDistCoeff"))*minCellSize
-    ),
-    minNearPointDist2(Foam::sqr(minNearPointDist)),
-
-    ppDist(readScalar(controlDict.lookup("ppDistCoeff"))*minCellSize),
-    ppDist2(Foam::sqr(ppDist))
-{}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/CGALTriangulation3Ddefs.H b/applications/utilities/mesh/generation/CV3DMesher/CGALTriangulation3Ddefs.H
deleted file mode 100644
index aa4c5bfd95b..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/CGALTriangulation3Ddefs.H
+++ /dev/null
@@ -1,84 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Typedefs
-    CGALTriangulation3Ddefs
-
-Description
-    CGAL data structures used for 3D Delaunay meshing.
-
-    Define CGAL_INEXACT to use Exact_predicates_inexact_constructions kernel
-    otherwise the more robust but much less efficient
-    Exact_predicates_exact_constructions will be used.
-
-    Define CGAL_HIERARCHY to use hierarchical Delaunay triangulation which is
-    faster but uses more memory than the standard Delaunay triangulation.
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef CGALTriangulation3Ddefs_H
-#define CGALTriangulation3Ddefs_H
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#include "CGAL/Delaunay_triangulation_3.h"
-
-#include "indexedVertex.H"
-#include "indexedCell.H"
-
-#ifdef CGAL_INEXACT
-    // Fast kernel using a double as the storage type but the triangulation
-    // may fail
-    #include "CGAL/Exact_predicates_inexact_constructions_kernel.h"
-    typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
-#else
-    // Very robust but expensive kernel
-    #include "CGAL/Exact_predicates_exact_constructions_kernel.h"
-    typedef CGAL::Exact_predicates_exact_constructions_kernel K;
-#endif
-
-typedef CGAL::indexedVertex<K>                           Vb;
-typedef CGAL::indexedCell<K>                             Cb;
-
-#ifdef CGAL_HIERARCHY
-    // Data structures for hierarchical Delaunay triangulation which is more
-    // efficient but also uses more storage
-    #include "CGAL/Triangulation_hierarchy_3.h"
-    typedef CGAL::Triangulation_hierarchy_vertex_base_3<Vb>  Vbh;
-    typedef CGAL::Triangulation_data_structure_3<Vbh, Cb>    Tds;
-    typedef CGAL::Delaunay_triangulation_3<K, Tds>           Triangulation;
-    typedef CGAL::Triangulation_hierarchy_3<Triangulation>   HTriangulation;
-#else
-    // Data structures for standard Delaunay triangulation
-    typedef CGAL::Triangulation_data_structure_3<Vb, Cb>     Tds;
-    typedef CGAL::Delaunay_triangulation_3<K, Tds>           Triangulation;
-    typedef Triangulation                                    HTriangulation;
-#endif
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/CV3D.C b/applications/utilities/mesh/generation/CV3DMesher/CV3D.C
deleted file mode 100644
index 79b3f0424cb..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/CV3D.C
+++ /dev/null
@@ -1,722 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*---------------------------------------------------------------------------*/
-
-#include "CV3D.H"
-#include "Random.H"
-#include "uint.H"
-#include "ulong.H"
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-void Foam::CV3D::insertBoundingBox()
-{
-    Info<< "insertBoundingBox: creating bounding mesh" << nl << endl;
-    scalar bigSpan = 10*tols_.span;
-    insertPoint(point(-bigSpan, -bigSpan, -bigSpan), Vb::FAR_POINT);
-    insertPoint(point(-bigSpan, -bigSpan,  bigSpan), Vb::FAR_POINT);
-    insertPoint(point(-bigSpan,  bigSpan, -bigSpan), Vb::FAR_POINT);
-    insertPoint(point(-bigSpan,  bigSpan,  bigSpan), Vb::FAR_POINT);
-    insertPoint(point( bigSpan, -bigSpan, -bigSpan), Vb::FAR_POINT);
-    insertPoint(point( bigSpan, -bigSpan,  bigSpan), Vb::FAR_POINT);
-    insertPoint(point( bigSpan,  bigSpan, -bigSpan), Vb::FAR_POINT);
-    insertPoint(point( bigSpan,  bigSpan , bigSpan), Vb::FAR_POINT);
-}
-
-
-void Foam::CV3D::reinsertPoints(const pointField& points)
-{
-    Info<< nl << "Reinserting points after motion. ";
-
-    startOfInternalPoints_ = number_of_vertices();
-    label nVert = startOfInternalPoints_;
-
-    // Add the points and index them
-    forAll(points, i)
-    {
-        const point& p = points[i];
-
-        insert(toPoint(p))->index() = nVert++;
-    }
-
-    Info<< nVert << " vertices reinserted" << endl;
-}
-
-
-void Foam::CV3D::setVertexAlignmentDirections()
-{
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        vit++
-    )
-    {
-        if (vit->internalOrBoundaryPoint())
-        {
-            List<vector> alignmentDirections(vit->alignmentDirections());
-
-            point vert(topoint(vit->point()));
-
-            pointIndexHit pHit = qSurf_.tree().findNearest
-            (
-                vert,
-                controls_.nearWallAlignedDist2
-            );
-
-            if (pHit.hit())
-            {
-                // Primary alignment
-                vector np = qSurf_.faceNormals()[pHit.index()];
-
-                // Generate equally spaced 'spokes' in a circle normal to the
-                // direction from the vertex to the closest point on the surface
-                // and look for a secondary intersection.
-
-                vector d = pHit.hitPoint() - vert;
-
-                tensor R = rotationTensor(vector(0,0,1), np);
-
-                label s = 36;
-
-                scalar closestSpokeHitDistance = GREAT;
-
-                point closestSpokeHitPoint = point(GREAT,GREAT,GREAT);
-
-                label closestSpokeHitDistanceIndex = -1;
-
-                for(label i = 0; i < s; i++)
-                {
-                    vector spoke
-                    (
-                        Foam::cos(i*mathematicalConstant::twoPi/s),
-                        Foam::sin(i*mathematicalConstant::twoPi/s),
-                        0
-                    );
-
-                    spoke *= controls_.nearWallAlignedDist;
-
-                    spoke = R & spoke;
-
-                    pointIndexHit spokeHit;
-
-                    // internal spoke
-
-                    spokeHit = qSurf_.tree().findLine
-                    (
-                        vert,
-                        vert + spoke
-                    );
-
-                    if (spokeHit.hit())
-                    {
-                        scalar spokeHitDistance = mag
-                        (
-                            spokeHit.hitPoint() - vert
-                        );
-
-                        if (spokeHitDistance < closestSpokeHitDistance)
-                        {
-                            closestSpokeHitPoint =  spokeHit.hitPoint();
-
-                            closestSpokeHitDistanceIndex = spokeHit.index();
-                        }
-                    }
-
-                    //external spoke
-
-                    point mirrorVert = vert + 2*d;
-
-                    spokeHit = qSurf_.tree().findLine
-                    (
-                        mirrorVert,
-                        mirrorVert + spoke
-                    );
-
-                    if (spokeHit.hit())
-                    {
-                        scalar spokeHitDistance = mag
-                        (
-                            spokeHit.hitPoint() - mirrorVert
-                        );
-
-                        if (spokeHitDistance < closestSpokeHitDistance)
-                        {
-                            closestSpokeHitPoint =  spokeHit.hitPoint();
-
-                            closestSpokeHitDistanceIndex = spokeHit.index();
-                        }
-                    }
-                }
-
-                if (closestSpokeHitDistanceIndex > -1)
-                {
-                    // Auxiliary alignment generated by spoke intersection
-                    // normal.
-
-                    vector na =
-                    qSurf_.faceNormals()[closestSpokeHitDistanceIndex];
-
-                    // Secondary alignment
-                    vector ns = np ^ na;
-
-                    if (mag(ns) <  SMALL)
-                    {
-                        FatalErrorIn("Foam::CV3D::setVertexAlignmentDirections")
-                            << "Parallel normals detected in spoke search."
-                            << nl << exit(FatalError);
-                    }
-
-                    ns /= mag(ns);
-
-                    // Tertiary alignment
-                    vector nt = ns ^ np;
-
-                    alignmentDirections.setSize(3);
-
-                    alignmentDirections[0] = np;
-
-                    alignmentDirections[1] = ns;
-
-                    alignmentDirections[2] = nt;
-
-                    // Info<< "internal " << vit->internalPoint()
-                    //     << nl << alignmentDirections
-                    //     << nl << "v " << vert + alignmentDirections[0]
-                    //     << nl << "v " << vert + alignmentDirections[1]
-                    //     << nl << "v " << vert + alignmentDirections[2]
-                    //     << nl << "v " << vert
-                    //     << nl << "v " << pHit.hitPoint()
-                    //     << nl << "v " << closestSpokeHitPoint
-                    //     << nl << "f 4 1"
-                    //     << nl << "f 4 2"
-                    //     << nl << "f 4 3"
-                    //     << nl << endl;
-                }
-                else
-                {
-                    // Using only the primary alignment
-
-                    alignmentDirections.setSize(1);
-
-                    alignmentDirections[0] = np;
-                }
-            }
-            else
-            {
-                alignmentDirections.setSize(0);
-            }
-        }
-    }
-}
-
-
-Foam::scalar Foam::CV3D::alignmentDistanceWeight(scalar dist) const
-{
-    scalar w;
-
-    scalar x = dist/controls_.nearWallAlignedDist;
-
-    if (x < 0.5)
-    {
-        w = 1;
-    }
-
-    else if (x < 1)
-    {
-        w = 2*(1 - x);
-    }
-    else
-    {
-        w = 0;
-    }
-
-    return w;
-}
-
-
-Foam::scalar Foam::CV3D::faceAreaWeight(scalar faceArea) const
-{
-    scalar fl2 = 0.2;
-
-    scalar fu2 = 1.0;
-
-    scalar m2 = controls_.minCellSize2;
-
-    if (faceArea < fl2*m2)
-    {
-        return 0;
-    }
-    else if (faceArea < fu2*m2)
-    {
-        return faceArea/((fu2 - fl2)*m2) - 1/((fu2/fl2) - 1);
-    }
-    else
-    {
-        return 1;
-    }
-}
-
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::CV3D::CV3D
-(
-    const Time& runTime,
-    const querySurface& qSurf
-)
-:
-    HTriangulation(),
-    qSurf_(qSurf),
-    runTime_(runTime),
-    controls_
-    (
-        IOdictionary
-        (
-            IOobject
-            (
-                "CV3DMesherDict",
-                runTime_.system(),
-                runTime_,
-                IOobject::MUST_READ,
-                IOobject::NO_WRITE
-            )
-        )
-    ),
-    tols_
-    (
-        IOdictionary
-        (
-            IOobject
-            (
-                "CV3DMesherDict",
-                runTime_.system(),
-                runTime_,
-                IOobject::MUST_READ,
-                IOobject::NO_WRITE
-            )
-        ),
-        controls_.minCellSize,
-        qSurf.bb()
-    ),
-    startOfInternalPoints_(0),
-    startOfSurfacePointPairs_(0),
-    featureConstrainingVertices_(0)
-{
-    // insertBoundingBox();
-    insertFeaturePoints();
-}
-
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-Foam::CV3D::~CV3D()
-{}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-void Foam::CV3D::insertPoints
-(
-    const pointField& points,
-    const scalar nearness
-)
-{
-    Info<< "insertInitialPoints(const pointField& points): ";
-
-    startOfInternalPoints_ = number_of_vertices();
-    label nVert = startOfInternalPoints_;
-
-    // Add the points and index them
-    forAll(points, i)
-    {
-        const point& p = points[i];
-
-        if (qSurf_.wellInside(p, nearness))
-        {
-            insert(toPoint(p))->index() = nVert++;
-        }
-        else
-        {
-            Warning
-                << "Rejecting point " << p << " outside surface" << endl;
-        }
-    }
-
-    Info<< nVert << " vertices inserted" << endl;
-
-    if (controls_.writeInitialTriangulation)
-    {
-        // Checking validity of triangulation
-        assert(is_valid());
-
-        writeTriangles("initial_triangles.obj", true);
-    }
-}
-
-
-void Foam::CV3D::insertPoints(const fileName& pointFileName)
-{
-    pointIOField points
-    (
-        IOobject
-        (
-            pointFileName.name(),
-            pointFileName.path(),
-            runTime_,
-            IOobject::MUST_READ,
-            IOobject::NO_WRITE
-        )
-    );
-
-    insertPoints(points, 0.5*controls_.minCellSize2);
-}
-
-
-void Foam::CV3D::insertGrid()
-{
-    Info<< nl << "Inserting initial grid." << endl;
-
-    startOfInternalPoints_ = number_of_vertices();
-    label nVert = startOfInternalPoints_;
-
-    Info<< nl << nVert << " existing vertices." << endl;
-
-    scalar x0 = qSurf_.bb().min().x();
-    scalar xR = qSurf_.bb().max().x() - x0;
-    int ni = int(xR/controls_.minCellSize) + 1;
-
-    scalar y0 = qSurf_.bb().min().y();
-    scalar yR = qSurf_.bb().max().y() - y0;
-    int nj = int(yR/controls_.minCellSize) + 1;
-
-    scalar z0 = qSurf_.bb().min().z();
-    scalar zR = qSurf_.bb().max().z() - z0;
-    int nk = int(zR/controls_.minCellSize) + 1;
-
-    vector delta(xR/ni, yR/nj, zR/nk);
-
-    delta *= pow((1.0),-(1.0/3.0));
-
-    Random rndGen(1321);
-    scalar pert = controls_.randomPerturbation*cmptMin(delta);
-
-    std::vector<Point> initialPoints;
-
-    for (int i=0; i<ni; i++)
-    {
-        for (int j=0; j<nj; j++)
-        {
-            for (int k=0; k<nk; k++)
-            {
-                point p
-                (
-                    x0 + i*delta.x(),
-                    y0 + j*delta.y(),
-                    z0 + k*delta.z()
-                );
-
-                if (controls_.randomiseInitialGrid)
-                {
-                    p.x() += pert*(rndGen.scalar01() - 0.5);
-                    p.y() += pert*(rndGen.scalar01() - 0.5);
-                    p.z() += pert*(rndGen.scalar01() - 0.5);
-                }
-
-                if (qSurf_.wellInside(p, 0.5*controls_.minCellSize2))
-                {
-                    initialPoints.push_back(Point(p.x(), p.y(), p.z()));
-                    // insert(Point(p.x(), p.y(), p.z()))->index() = nVert++;
-                }
-            }
-        }
-    }
-
-    Info<< nl << initialPoints.size() << " vertices to insert." << endl;
-
-    // using the range insert (it is faster than inserting points one by one)
-    insert(initialPoints.begin(), initialPoints.end());
-
-    Info<< nl << number_of_vertices() - startOfInternalPoints_
-        << " vertices inserted." << endl;
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (vit->uninitialised())
-        {
-            vit->index() = nVert++;
-        }
-    }
-
-    if (controls_.writeInitialTriangulation)
-    {
-        assert(is_valid());
-
-        writePoints("initial_points.obj", true);
-        writeTriangles("initial_triangles.obj", true);
-    }
-}
-
-
-void Foam::CV3D::relaxPoints(const scalar relaxation)
-{
-    Info<< "Calculating new points: " << endl;
-
-    pointField dualVertices(number_of_cells());
-
-    pointField displacementAccumulator(startOfSurfacePointPairs_, vector::zero);
-
-    label dualVerti = 0;
-
-    // Find the dual point of each tetrahedron and assign it an index.
-
-    for
-    (
-        Triangulation::Finite_cells_iterator cit = finite_cells_begin();
-        cit != finite_cells_end();
-        ++cit
-    )
-    {
-        cit->cellIndex() = -1;
-
-        if
-        (
-            cit->vertex(0)->internalOrBoundaryPoint()
-         || cit->vertex(1)->internalOrBoundaryPoint()
-         || cit->vertex(2)->internalOrBoundaryPoint()
-         || cit->vertex(3)->internalOrBoundaryPoint()
-        )
-        {
-            cit->cellIndex() = dualVerti;
-
-            // To output Delaunay tet which causes CGAL assertion failure.
-            // Info<< nl << topoint(cit->vertex(0)->point())
-            //     << nl << topoint(cit->vertex(1)->point())
-            //     << nl << topoint(cit->vertex(2)->point())
-            //     << nl << topoint(cit->vertex(3)->point())
-            //     << endl;
-
-            dualVertices[dualVerti] = topoint(dual(cit));
-
-            dualVerti++;
-        }
-    }
-
-    setVertexAlignmentDirections();
-
-    dualVertices.setSize(dualVerti);
-
-    // loop around the Delaunay edges to construct the dual faces.
-    // Find the face-centre and use it to calculate the displacement vector
-    // contribution to the Delaunay vertices (Dv) attached to the edge.  Add the
-    // contribution to the running displacement vector of each Dv.
-
-    for
-    (
-        Triangulation::Finite_edges_iterator eit = finite_edges_begin();
-        eit != finite_edges_end();
-        ++eit
-    )
-    {
-        if
-        (
-            eit->first->vertex(eit->second)->internalOrBoundaryPoint()
-         && eit->first->vertex(eit->third)->internalOrBoundaryPoint()
-        )
-        {
-            Cell_circulator ccStart = incident_cells(*eit);
-            Cell_circulator cc = ccStart;
-
-            DynamicList<label> verticesOnFace;
-
-            do
-            {
-                if (!is_infinite(cc))
-                {
-                    if (cc->cellIndex() < 0)
-                    {
-                        FatalErrorIn("Foam::CV3D::relaxPoints")
-                            << "Dual face uses circumcenter defined by a "
-                            << " Delaunay tetrahedron with no internal "
-                            << "or boundary points."
-                            << exit(FatalError);
-                    }
-
-                    verticesOnFace.append(cc->cellIndex());
-                }
-            } while (++cc != ccStart);
-
-            verticesOnFace.shrink();
-
-            face dualFace(verticesOnFace);
-
-            Cell_handle c = eit->first;
-            Vertex_handle vA = c->vertex(eit->second);
-            Vertex_handle vB = c->vertex(eit->third);
-
-            point dVA = topoint(vA->point());
-            point dVB = topoint(vB->point());
-
-            point dualFaceCentre(dualFace.centre(dualVertices));
-
-            vector rAB = dVA - dVB;
-
-            scalar rABMag = mag(rAB);
-
-            scalar faceArea = dualFace.mag(dualVertices);
-
-            scalar directStiffness = 2.0;
-
-            scalar transverseStiffness = 0.0001;
-
-            scalar r0 = 0.9*controls_.minCellSize;
-
-            vector dA = -directStiffness*(1 - r0/rABMag)
-            *faceAreaWeight(faceArea)*rAB;
-
-            vector dT = transverseStiffness*faceAreaWeight(faceArea)
-            *(dualFaceCentre - 0.5*(dVA - dVB));
-
-            if (vA->internalPoint())
-            {
-                displacementAccumulator[vA->index()] += (dA + dT);
-            }
-            if (vB->internalPoint())
-            {
-                displacementAccumulator[vB->index()] += (-dA + dT);
-            }
-        }
-    }
-
-    vector totalDisp = sum(displacementAccumulator);
-    scalar totalDist = sum(mag(displacementAccumulator));
-
-    Info<< "Total displacement = " << totalDisp
-        << " total distance = " << totalDist << endl;
-
-    displacementAccumulator *= relaxation;
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (vit->internalPoint())
-        {
-            displacementAccumulator[vit->index()] += topoint(vit->point());
-        }
-    }
-
-    pointField internalDelaunayVertices = SubField<point>
-    (
-        displacementAccumulator,
-        displacementAccumulator.size() - startOfInternalPoints_,
-        startOfInternalPoints_
-    );
-
-    // Write the mesh before clearing it
-    if (runTime_.outputTime())
-    {
-        writeMesh(true);
-    }
-
-    // Remove the entire triangulation
-    this->clear();
-
-    reinsertFeaturePoints();
-
-    reinsertPoints(internalDelaunayVertices);
-}
-
-
-void Foam::CV3D::insertSurfacePointPairs()
-{
-    startOfSurfacePointPairs_ = number_of_vertices();
-
-    if (controls_.insertSurfaceNearestPointPairs)
-    {
-        insertSurfaceNearestPointPairs();
-    }
-
-    if (controls_.writeNearestTriangulation)
-    {
-        // writeFaces("near_allFaces.obj", false);
-        // writeFaces("near_faces.obj", true);
-        writeTriangles("near_triangles.obj", true);
-    }
-
-    if (controls_.insertSurfaceNearPointPairs)
-    {
-        insertSurfaceNearPointPairs();
-    }
-
-    startOfBoundaryConformPointPairs_ = number_of_vertices();
-}
-
-void Foam::CV3D::boundaryConform()
-{
-}
-
-
-void Foam::CV3D::removeSurfacePointPairs()
-{
-    Info<< "Removing surface point pairs." << nl << endl;
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (vit->index() >= startOfSurfacePointPairs_)
-        {
-            remove(vit);
-        }
-    }
-}
-
-
-void Foam::CV3D::write()
-{
-    if (controls_.writeFinalTriangulation)
-    {
-        writePoints("allPoints.obj", false);
-        writePoints("points.obj", true);
-        writeTriangles("allTriangles.obj", false);
-        writeTriangles("triangles.obj", true);
-    }
-
-    writeMesh();
-}
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/CV3D.H b/applications/utilities/mesh/generation/CV3DMesher/CV3D.H
deleted file mode 100644
index 8825c0a868a..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/CV3D.H
+++ /dev/null
@@ -1,460 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Class
-    CV3D
-
-Description
-
-SourceFiles
-    CV3DI.H
-    CV3D.C
-    CV3DIO.C
-    controls.C
-    tolerances.C
-    insertFeaturePoints.C
-    insertSurfaceNearestPointPairs.C
-    insertSurfaceNearPointPairs.C
-    insertBoundaryConformPointPairs.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef CV3D_H
-#define CV3D_H
-
-//#define CGAL_INEXACT
-#define CGAL_HIERARCHY
-
-#include "CGALTriangulation3Ddefs.H"
-
-#include "querySurface.H"
-#include "IOdictionary.H"
-#include "pointIOField.H"
-#include "argList.H"
-#include "DynamicList.H"
-#include "Switch.H"
-#include "Time.H"
-#include "polyMesh.H"
-#include "SortableList.H"
-#include "plane.H"
-#include "triSurfaceTools.H"
-#include "mathematicalConstants.H"
-#include "transform.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-
-/*---------------------------------------------------------------------------*\
-                           Class CV3D Declaration
-\*---------------------------------------------------------------------------*/
-
-class CV3D
-:
-    public HTriangulation
-{
-public:
-
-    class controls
-    {
-    public:
-
-        //- Relaxation factor at the start of the iteration
-        scalar relaxationFactorStart;
-
-        //- Relaxation factor at the end of the iteration
-        scalar relaxationFactorEnd;
-
-        //- Minimum cell size below which protusions through the surface are
-        //  not split
-        scalar minCellSize;
-
-        //- Square of minCellSize
-        scalar minCellSize2;
-
-        //- The feature angle used to select corners to be
-        //  explicitly represented in the mesh.
-        //  0 = no features, 180 = all features
-        scalar includedAngle;
-
-        //- Maximum quadrant angle allowed at a concave corner before
-        //  additional "mitering" lines are added
-        scalar maxQuadAngle;
-
-        //- Should the mesh be square-dominated or of unbiased hexagons
-        Switch squares;
-
-        //- Near-wall region where cells are aligned with the wall
-        scalar nearWallAlignedDist;
-
-        //- Square of nearWallAlignedDist
-        scalar nearWallAlignedDist2;
-
-        //- Chose if the cell orientation should relax during the iterations
-        //  or remain fixed to the x-y directions
-        Switch relaxOrientation;
-
-        //- Insert near-boundary point mirror or point-pairs
-        Switch insertSurfaceNearestPointPairs;
-
-        //- Mirror near-boundary points rather than insert point-pairs
-        Switch mirrorPoints;
-
-        //- Insert point-pairs for dual-cell vertices very near the surface
-        Switch insertSurfaceNearPointPairs;
-
-        Switch writeInitialTriangulation;
-        Switch writeFeatureTriangulation;
-        Switch writeNearestTriangulation;
-        Switch writeInsertedPointPairs;
-        Switch writeFinalTriangulation;
-
-        Switch randomiseInitialGrid;
-        scalar randomPerturbation;
-
-        controls(const IOdictionary& controlDict);
-    };
-
-    class tolerances
-    {
-    public:
-
-        //- Maximum cartesian span of the geometry
-        scalar span;
-
-        //- Square of span
-        scalar span2;
-
-        //- Minumum edge-length of the cell size below which protusions
-        //  through the surface are not split
-        scalar minEdgeLen;
-
-        //- Square of minEdgeLen
-        scalar minEdgeLen2;
-
-        //- Distance between boundary conforming point-pairs
-        scalar ppDist;
-
-        //- Square of ppDist
-        scalar ppDist2;
-
-        //- Maximum distance between adjacent control points on a feature edge
-        //- before they are considered a group
-        scalar edgeGroupSpacing;
-
-        //- Guard distance from a feature point within which an edge control
-        //- point may not be placed
-        scalar featurePointGuard;
-
-        //- Guard distance from a feature edge within which a surface control
-        //- point may not be placed
-        scalar featureEdgeGuard;
-
-        //- minimum and maximum distances along a feature edge allowed between
-        //- pairs of points.  Eventually these should be able to adapt to local
-        //- grading requirements.
-        scalar minEdgeSpacing;
-        scalar maxEdgeSpacing;
-
-        tolerances
-        (
-            const IOdictionary& controlDict,
-            scalar minCellSize,
-            const boundBox&
-        );
-    };
-
-private:
-
-// Private data
-
-        //- The surface to mesh
-        const querySurface& qSurf_;
-
-        //- The time registry of the application
-        const Time& runTime_;
-
-        //- Meshing controls
-        controls controls_;
-
-        //- Meshing tolerances
-        tolerances tols_;
-
-        //- Keep track of the start of the internal points
-        label startOfInternalPoints_;
-
-        //- Keep track of the start of the surface point-pairs
-        label startOfSurfacePointPairs_;
-
-        //- Keep track of the boundary conform point-pairs
-        //  stored after the insertion of the surface point-pairs in case
-        //  the boundary conform function is called more than once without
-        //  removing and insertin the surface point-pairs
-        label startOfBoundaryConformPointPairs_;
-
-        //- Store the feature constraining points to be reinserted after a
-        //- triangulation clear
-        List<Vb> featureConstrainingVertices_;
-
-
-    // Private Member Functions
-
-        //- Disallow default bitwise copy construct
-        CV3D(const CV3D&);
-
-        //- Disallow default bitwise assignment
-        void operator=(const CV3D&);
-
-        //- Insert point and return it's index
-        inline label insertPoint
-        (
-            const point& pt,
-            const label type
-        );
-
-        inline bool insertMirrorPoint
-        (
-            const point& nearSurfPt,
-            const point& surfPt
-        );
-
-        //- Insert a point-pair at a distance ppDist either side of
-        //  surface point point surfPt in the direction n
-        inline void insertPointPair
-        (
-            const scalar mirrorDist,
-            const point& surfPt,
-            const vector& n
-        );
-
-        inline void insertVb(const Vb& v);
-
-        inline void movePoint(const Vertex_handle& vh, const point& p);
-
-        //- Create the initial mesh from the bounding-box
-        void insertBoundingBox();
-
-        //- Insert point groups at the feature points.
-        void insertFeaturePoints();
-
-        //- Reinsert stored feature point defining points.
-        void reinsertFeaturePoints();
-
-        //- Reinsert points that have been saved to clear the mesh.
-        void reinsertPoints (const pointField& points);
-
-        //- Insert point-pairs at the given set of points using the surface
-        //  normals corresponding to the given set of surface triangles
-        //  and write the inserted point locations to the given file.
-        void insertPointPairs
-        (
-            const DynamicList<point>& nearSurfacePoints,
-            const DynamicList<point>& surfacePoints,
-            const DynamicList<label>& surfaceTris,
-            const fileName fName
-        );
-
-        //- Insert edge control groups at the given edge points using the
-        //  normals of the faces attached to the edge.
-        void insertEdgePointGroups
-        (
-            const DynamicList<point>& edgePoints,
-            const DynamicList<label>& edgeLabels,
-            const fileName fName
-        );
-
-        //- Check to see if dual cell specified by given vertex iterator
-        //  intersects the boundary and hence reqires a point-pair.
-        bool dualCellSurfaceIntersection
-        (
-            const Triangulation::Finite_vertices_iterator& vit
-        ) const;
-
-        //- Smooths the points positioned along a feature edge by collecting
-        //- bunches together and deleting excess points.
-        void smoothEdgePositions
-        (
-            DynamicList<point>& edgePoints,
-            DynamicList<label>& edgeLabels
-        ) const;
-
-        void smoothEdge
-        (
-            List<point>& edgePoints,
-            List<scalar>& edgeDistances,
-            const label edgeI
-        ) const;
-
-        //- Insert point-pairs at the nearest points on the surface to the
-        //  control vertex of dual-cells which intersect the boundary in order
-        //  to provide a boundary-layer mesh.
-        //  NB: This is not guaranteed to close the boundary
-        void insertSurfaceNearestPointPairs();
-
-        //- Insert point-pairs at small dual-cell edges on the surface in order
-        //  to improve the boundary-layer mesh generated by
-        //  insertSurfaceNearestPointPairs.
-        void insertSurfaceNearPointPairs();
-
-        void markNearBoundaryPoints();
-
-        //- Dual calculation
-        void calcDualMesh
-        (
-            pointField& points,
-            faceList& faces,
-            labelList& owner,
-            labelList& neighbour,
-            wordList& patchNames,
-            labelList& patchSizes,
-            labelList& patchStarts
-        );
-
-        void setVertexAlignmentDirections();
-
-        scalar alignmentDistanceWeight(scalar dist) const;
-
-        scalar faceAreaWeight(scalar faceArea) const;
-
-
-public:
-
-    // Constructors
-
-        //- Construct for given surface
-        CV3D
-        (
-            const Time& runTime,
-            const querySurface& qSurf
-        );
-
-    // Destructor
-
-        ~CV3D();
-
-
-    // Member Functions
-
-        // Access
-
-            const controls& meshingControls() const
-            {
-                return controls_;
-            }
-
-            // Conversion functions between point and Point
-
-#           ifdef CGAL_INEXACT
-                typedef const point& pointFromPoint;
-                typedef const Point& PointFrompoint;
-#           else
-                typedef point pointFromPoint;
-                typedef Point PointFrompoint;
-#           endif
-
-            inline pointFromPoint topoint(const Point&) const;
-            inline PointFrompoint toPoint(const point&) const;
-
-        // Point insertion
-
-            //- Create the initial mesh from the given internal points.
-            //  Points must be inside the boundary by at least nearness
-            //  otherwise they are ignored.
-            void insertPoints
-            (
-                const pointField& points,
-                const scalar nearness
-            );
-
-            //- Create the initial mesh from the internal points in the given
-            //  file.  Points outside the geometry are ignored.
-            void insertPoints(const fileName& pointFileName);
-
-            //- Create the initial mesh as a BCC lattice of points.
-            //  Points outside the geometry are ignored.
-            void insertGrid();
-
-
-        // Point motion
-
-            //- Calculate the displacements to relax the points
-            void relaxPoints(const scalar relaxation);
-
-            //- Insert all surface point-pairs from
-            //  insertSurfaceNearestPointPairs and
-            //  findIntersectionForOutsideCentroid
-            void insertSurfacePointPairs();
-
-            //- Insert point-pairs where there are protrusions into
-            //  or out of the surface
-            void boundaryConform();
-
-        // Point removal
-
-            //- Remove the point-pairs introduced by insertSurfacePointPairs
-            //  and boundaryConform
-            void removeSurfacePointPairs();
-
-        // Check
-
-        // Edit
-
-        // Write
-
-            //- Write Delaunay points to .obj file
-            void writePoints(const fileName& fName, bool internalOnly) const;
-
-            //- Write Delaunay triangles as .obj file
-            void writeTriangles(const fileName& fName, bool internalOnly) const;
-
-            //- Write dual points and faces as .obj file
-            void writeDual
-            (
-                const pointField& points,
-                const faceList& faces,
-                const fileName& fName
-            ) const;
-
-            //- Write polyMesh
-            void writeMesh(bool writeToTimestep = false);
-
-            void write();
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#include "CV3DI.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/CV3DI.H b/applications/utilities/mesh/generation/CV3DMesher/CV3DI.H
deleted file mode 100644
index 08eed966789..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/CV3DI.H
+++ /dev/null
@@ -1,175 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*---------------------------------------------------------------------------*/
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-inline Foam::label Foam::CV3D::insertPoint
-(
-    const point& p,
-    const label type
-)
-{
-    uint nVert = number_of_vertices();
-
-    Vertex_handle vh = insert(toPoint(p));
-
-    if (nVert == number_of_vertices())
-    {
-        WarningIn("Foam::CV3D::insertPoint")
-            << "Failed to insert point " << p << endl;
-    }
-    else
-    {
-        vh->index() = nVert;
-        vh->type() = type;
-    }
-
-    return vh->index();
-}
-
-
-inline bool Foam::CV3D::insertMirrorPoint
-(
-    const point& nearSurfPt,
-    const point& surfPt
-)
-{
-    point mirrorPoint(2*surfPt - nearSurfPt);
-
-    if (qSurf_.outside(mirrorPoint))
-    {
-        insertPoint(mirrorPoint, Vb::MIRROR_POINT);
-        return true;
-    }
-    else
-    {
-        return false;
-    }
-}
-
-
-inline void Foam::CV3D::insertPointPair
-(
-    const scalar ppDist,
-    const point& surfPt,
-    const vector& n
-)
-{
-    vector ppDistn = ppDist*n;
-
-    label master = insertPoint
-    (
-        surfPt - ppDistn,
-        number_of_vertices() + 1
-    );
-
-    insertPoint(surfPt + ppDistn, master);
-}
-
-
-inline void Foam::CV3D::insertVb(const Vb& v)
-{
-    const Point& Pt(v.point());
-
-    uint nVert = number_of_vertices();
-
-    Vertex_handle vh = insert(Pt);
-
-    if (nVert == number_of_vertices())
-    {
-        FatalErrorIn("Foam::CV3D::insert(const Vb& v")
-        << "Failed to reinsert Vb at " << topoint(Pt)
-            << endl;
-    }
-
-    vh->index() = v.index();
-    vh->type() = v.type();
-}
-
-
-void Foam::CV3D::movePoint(const Vertex_handle& vh, const point& p)
-{
-    label vi = vh->index();
-
-    // remove(vh);
-    // insert(toPoint(p))->index() = vi;
-
-    move_point(vh, toPoint(p));
-    vh->index() = vi;
-}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-#ifdef CGAL_INEXACT
-
-inline Foam::CV3D::pointFromPoint Foam::CV3D::topoint
-(
-    const Point& P
-) const
-{
-    return reinterpret_cast<pointFromPoint>(P);
-}
-
-inline Foam::CV3D::PointFrompoint Foam::CV3D::toPoint
-(
-    const point& p
-) const
-{
-    return reinterpret_cast<PointFrompoint>(p);
-}
-
-#else
-
-inline Foam::CV3D::pointFromPoint Foam::CV3D::topoint
-(
-    const Point& P
-) const
-{
-    return point
-    (
-        CGAL::to_double(P.x()),
-        CGAL::to_double(P.y()),
-        CGAL::to_double(P.z())
-    );
-}
-
-inline Foam::CV3D::PointFrompoint Foam::CV3D::toPoint
-(
-    const point& p
-) const
-{
-    return Point(p.x(), p.y(), p.z());
-}
-
-#endif
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/CV3DIO.C b/applications/utilities/mesh/generation/CV3DMesher/CV3DIO.C
deleted file mode 100644
index 450d9d143b6..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/CV3DIO.C
+++ /dev/null
@@ -1,244 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*---------------------------------------------------------------------------*/
-
-#include "CV3D.H"
-#include "IOstreams.H"
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-void Foam::CV3D::writePoints(const fileName& fName, bool internalOnly) const
-{
-    Info<< nl << "Writing points to " << fName << endl;
-    OFstream str(fName);
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (!internalOnly || vit->internalOrBoundaryPoint())
-        {
-            meshTools::writeOBJ(str, topoint(vit->point()));
-        }
-    }
-}
-
-
-void Foam::CV3D::writeDual
-(
-    const pointField& points,
-    const faceList& faces,
-    const fileName& fName
-) const
-{
-    Info<< nl << "Writing dual points and faces to " << fName << endl;
-
-    OFstream str(fName);
-
-    forAll(points, p)
-    {
-        meshTools::writeOBJ(str, points[p]);
-    }
-
-    forAll (faces, f)
-    {
-        str<< 'f';
-
-        const face& fP = faces[f];
-
-        forAll(fP, p)
-        {
-            str<< ' ' << fP[p] + 1;
-        }
-
-        str<< nl;
-    }
-}
-
-
-void Foam::CV3D::writeTriangles(const fileName& fName, bool internalOnly) const
-{
-    Info<< nl << "Writing triangles to " << fName << endl;
-    OFstream str(fName);
-
-    labelList vertexMap(number_of_vertices());
-    label verti = 0;
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (!internalOnly || !vit->farPoint())
-        {
-            vertexMap[vit->index()] = verti++;
-            meshTools::writeOBJ(str, topoint(vit->point()));
-        }
-    }
-
-    for
-    (
-        Triangulation::Finite_facets_iterator fit = finite_facets_begin();
-        fit != finite_facets_end();
-        ++fit
-    )
-    {
-        const Cell_handle& c(fit->first);
-
-        const int& oppositeVertex(fit->second);
-
-        List<label> facetIndices(3,-1);
-
-        bool writeFacet = true;
-
-        for(label i = 0, k = 0;i < 4; i++)
-        {
-            if(i != oppositeVertex)
-            {
-                if(!internalOnly || !c->vertex(i)->farPoint())
-                {
-                    facetIndices[k] = i;
-                    k++;
-                }
-                else
-                {
-                    writeFacet = false;
-                }
-            }
-        }
-
-        if(writeFacet)
-        {
-            str << "f "
-                << vertexMap[c->vertex(facetIndices[0])->index()] + 1
-                << ' ' << vertexMap[c->vertex(facetIndices[1])->index()] + 1
-                << ' ' << vertexMap[c->vertex(facetIndices[2])->index()] + 1
-                << nl;
-        }
-    }
-}
-
-void Foam::CV3D::writeMesh(bool writeToTimestep)
-{
-    pointField points(0);
-    faceList faces(0);
-    labelList owner(0);
-    labelList neighbour(0);
-    wordList patchNames(0);
-    labelList patchSizes(0);
-    labelList patchStarts(0);
-
-    calcDualMesh
-    (
-        points,
-        faces,
-        owner,
-        neighbour,
-        patchNames,
-        patchSizes,
-        patchStarts
-    );
-
-    writeDual(points, faces, "dualMesh.obj");
-
-    IOobject io
-    (
-        Foam::polyMesh::defaultRegion,
-        runTime_.constant(),
-        runTime_,
-        IOobject::NO_READ,
-        IOobject::AUTO_WRITE
-    );
-
-    if (writeToTimestep)
-    {
-        Info<< nl << "Writing polyMesh to time directory "
-            << runTime_.timeName() << endl;
-
-        io = IOobject
-        (
-            Foam::polyMesh::defaultRegion,
-            runTime_.path()/runTime_.timeName(),
-            runTime_,
-            IOobject::NO_READ,
-            IOobject::AUTO_WRITE
-        );
-    }
-    else
-    {
-        Info<< nl << "Writing polyMesh to constant." << endl;
-    }
-
-    polyMesh pMesh
-    (
-        io,
-        xferMove(points),
-        xferMove(faces),
-        xferMove(owner),
-        xferMove(neighbour)
-    );
-    // polyMesh pMesh
-    // (
-    //     io,
-    //     points,
-    //     faces,
-    //     owner,
-    //     neighbour
-    // );
-
-    List<polyPatch*> patches(patchStarts.size());
-
-    forAll (patches, p)
-    {
-        patches[p] = new polyPatch
-        (
-            patchNames[p],
-            patchSizes[p],
-            patchStarts[p],
-            p,
-            pMesh.boundaryMesh()
-        );
-    }
-
-    pMesh.addPatches(patches);
-
-    if (!pMesh.write())
-    {
-        FatalErrorIn("CV3D::writeMesh()")
-            << "Failed writing polyMesh."
-            << exit(FatalError);
-    }
-
-
-}
-
-// * * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * //
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/CV3DMesher.C b/applications/utilities/mesh/generation/CV3DMesher/CV3DMesher.C
deleted file mode 100644
index 60a60bb5457..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/CV3DMesher.C
+++ /dev/null
@@ -1,138 +0,0 @@
-/*---------------------------------------------------------------------------*\
- =========                   |
- \\      /   F ield          | OpenFOAM: The Open Source CFD Toolbox
-  \\    /    O peration      |
-   \\  /     A nd            | Copyright (C) 1991-2007 OpenCFD Ltd.
-    \\/      M anipulation   |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Application
-    CV3DMesher
-
-Description
-    Conformal-Voronoi 3D automatic mesher
-
-\*---------------------------------------------------------------------------*/
-
-#include "fvCFD.H"
-#include "CV3D.H"
-#include "IFstream.H"
-
-using namespace Foam;
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-// Main program:
-
-int main(int argc, char *argv[])
-{
-    argList::noParallel();
-    argList::validArgs.clear();
-    argList::validArgs.append("surface");
-    argList::validOptions.insert("pointsFile", "<filename>");
-
-#   include "setRootCase.H"
-#   include "createTime.H"
-
-    IOdictionary CV3DMesherDict
-    (
-        IOobject
-        (
-            "CV3DMesherDict",
-            runTime.system(),
-            runTime,
-            IOobject::MUST_READ,
-            IOobject::NO_WRITE
-        )
-    );
-
-    // Read the surface to conform to
-    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    querySurface surf
-    (
-        args.args()[1],
-        readScalar(CV3DMesherDict.lookup("includedAngle"))
-    );
-
-    Info<< nl
-        << "Read surface with " << surf.size() << " triangles from file "
-        << args.args()[1] << nl << endl;
-
-    // Read and triangulation
-    // ~~~~~~~~~~~~~~~~~~~~~~
-
-    CV3D mesh(runTime, surf);
-
-    if (args.options().found("pointsFile"))
-    {
-        fileName pointFileName(args.options()["pointsFile"]);
-        mesh.insertPoints(pointFileName);
-        mesh.insertSurfacePointPairs();
-        mesh.boundaryConform();
-    }
-    else
-    {
-        mesh.insertGrid();
-        mesh.insertSurfacePointPairs();
-        mesh.boundaryConform();
-    }
-
-    scalar relaxation =
-    mesh.meshingControls().relaxationFactorStart;
-
-    label nIterations = label
-    (
-        (runTime.endTime().value() - runTime.startTime().value())
-        /runTime.deltaT().value()
-    );
-
-    scalar relaxationDelta =
-    (
-        mesh.meshingControls().relaxationFactorStart
-      - mesh.meshingControls().relaxationFactorEnd
-    )
-    /max(nIterations, 1);
-
-    while (runTime.run())
-    {
-        runTime++;
-
-        Info<< nl
-            << "Relaxation iteration " << runTime.timeIndex() << nl
-            << "~~~~~~~~~~~~~~~~~~~~~~~~" << endl;
-
-        Info<< "relaxation = " << relaxation << endl;
-
-        mesh.relaxPoints(relaxation);
-
-        //mesh.removeSurfacePointPairs();
-        mesh.insertSurfacePointPairs();
-        mesh.boundaryConform();
-
-        relaxation -= relaxationDelta;
-    }
-
-    mesh.write();
-
-    Info << nl << "End\n" << endl;
-
-    return 0;
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/Make/files b/applications/utilities/mesh/generation/CV3DMesher/Make/files
deleted file mode 100644
index fc4326559cf..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/Make/files
+++ /dev/null
@@ -1,15 +0,0 @@
-#include CGAL_FILES
-
-querySurface.C
-CV3D.C
-controls.C
-tolerances.C
-CV3DIO.C
-CV3DMesher.C
-calcDualMesh.C
-insertFeaturePoints.C
-insertSurfaceNearestPointPairs.C
-insertSurfaceNearPointPairs.C
-insertBoundaryConformPointPairs.C
-
-EXE = $(FOAM_APPBIN)/CV3DMesher
diff --git a/applications/utilities/mesh/generation/CV3DMesher/Make/options b/applications/utilities/mesh/generation/CV3DMesher/Make/options
deleted file mode 100644
index 72767978616..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/Make/options
+++ /dev/null
@@ -1,18 +0,0 @@
-//EXE_DEBUG = -DFULLDEBUG -g -O0
-EXE_NDEBUG = -DNDEBUG
-
-include $(GENERAL_RULES)/CGAL
-FFLAGS = -DCGAL_FILES='"${CGAL_PATH}/CGAL/files"'
-
-EXE_INC = \
-    ${EXE_NDEBUG} \
-    ${CGAL_INC} \
-    -I$(LIB_SRC)/finiteVolume/lnInclude \
-    -I$(LIB_SRC)/meshTools/lnInclude \
-    -I$(LIB_SRC)/dynamicMesh/lnInclude \
-    -I$(LIB_SRC)/triSurface/lnInclude
-
-EXE_LIBS = \
-    -lmeshTools \
-    -ltriSurface \
-    -ldynamicMesh
diff --git a/applications/utilities/mesh/generation/CV3DMesher/backup/20080723_edgeAimingFeatureReconstuction.tar b/applications/utilities/mesh/generation/CV3DMesher/backup/20080723_edgeAimingFeatureReconstuction.tar
deleted file mode 100644
index 595fd95c5d663ec0c8fca22a71273aaa74b94c36..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3441
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
TkM&rOKi~K_tVM`{08jt`AcL<_

diff --git a/applications/utilities/mesh/generation/CV3DMesher/backup/20080808_3EdgeSpecificImplementation.tar b/applications/utilities/mesh/generation/CV3DMesher/backup/20080808_3EdgeSpecificImplementation.tar
deleted file mode 100644
index 190f12d6ad12da2b6d9e082bb409b5631964b811..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4814
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

diff --git a/applications/utilities/mesh/generation/CV3DMesher/backup/20080820_featurePointsDone.tar b/applications/utilities/mesh/generation/CV3DMesher/backup/20080820_featurePointsDone.tar
deleted file mode 100644
index 8d1d78eb5b3c76ecf03b091fc975b53a5e31eff0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16761
zcmV)KK)SyliwFQfRJBL|1MEHfbK5r3{k8flP~A+9vSnFPUf<bCX5?4nPGbABopw5|
z$3v5l&6pxpl9H{oxxf8(7a$3cpd>#p?TMbTBw(>v>@F6&c+s(aXKQ5pA9;M)+WhWO
zo;EzMUcA81&g++L`rQ$~;px73{_53tolg7Z%Wn52{Q9ol>ArgX`a9Ns9CGw$6eo7X
z*moC^eQ6J-!SN`53WA>YSzTIrxM%6N8e?zMhZUbcA@{f6#P?Okc9_R~H_v7JLmuqx
z_dc$%<4aDz*ikr&9L_d(w%BnP`sd*d;E+fF1>0vs9@&W(23ZXv8#7st1+H2@+YE=3
z$h){qn6=qpoqzqSv(jz1UsGLJ$A`pi5emRT7}!T<2i|bx%R2t7Js`XAseSMq9>kn#
zJ-+l}*7tnQ;B#n42@CrfS6VfKNq-_pKjNIlVL!RHBfici;fOhQz#{H?aT0mwqXaM|
z&;oZgjMyM_z5WCe2+t^RdBhT6bi$)Sj5XnpANM}7A9(;w_1VGb-1i(NDP%U#gembQ
zciH&_!3on2QgI}yU^^jTCT^`W?g321#?W(+d)>4WiLuFmD$7og@Q6@_LoC<;iYE+M
zo|iQ=K5wJTynygthC^u1C18YBUwgjK&N+jQ+aLK&29WHR-Q)NBpN<JvZ|_(3OYiWo
zw|D&OIzT6vAwcjk7r4B^(Dwi}G%B)#WP-GR+&<iV5AeN>-4DCRzXJJ!0lUY0+eb%i
zXa5jX?x1&gyu117L+_9sd^$YXKiY0FcEtG%_7bK(i3zyq^2GN1ST_4t5Nr(OL2tRV
z#~cLgaBmF6*~|fro-I4VV*6omK@H9LxX!#j3&Nzyt|JeWB?$>pl|-9_XE$(KP4=<_
zV0Lij1MiOj!H(Al#5;Z%MoqR6#tDG4k3H7zf@xprJa2c{r=wo2_S-`moRy{3TJ0ZR
z;P@k#v-;-G&$n9d>$TeIDqE`jJBYk7=ob6P2j`$+JEOqC#>K1xeiiB%hn@?Jum@{v
zSjpO&ql}w1i}*4Oy&%~^oAyk6j|IQ_w!=SwvOc44GSRosxi3<~YY<r}HQ->U&Y@$7
zoa-=hMaIxhoXb6XV8BFKN8XppEEwvNxYnrsAqCkF*_$^k@bQ0r6PiSZ4z%RwFbadv
zgHC3{z&L2t5rPM<zb-Tq82s-k4|9Pvk_l4*@u}t9i(4^IumM&uLgAc+{WFLAerz=w
zvSw-%;s2ROiO1fuw#@0v?kJ=|_B8VB;6fVjwY42D03{a)&)^#j9MIn!uoZ8?>MD8X
z{K5+?s4+!^Fh3N4fEy~v^0Ff>YlHs(k>z;(>}yV%#Jchh3|zu*tafAN9Wa1Lf$i@{
z8`R~Z$pJFOYUHK<{8KB{xl^g`ok~5Qt5p8&k8)d)al0_?+*l1@c_zbk4N@q=NtSyG
zph-xn7A9JNs?pHPWWdYIdB)f58~3FNoQtlNP7%jfql#vgHs<IQqDNpwFjzrN*vY1L
z3W+e{P+iQD35;woj*G(ZAC!F{d=eZpwzzMP0(*kPWdbHYPK(=d>|KCq1Ft}olomdP
zW7n6SbD52mm{lMY$4@s!hjo#;%FUCkV!(r>*g-b|$z3{VN?hJY$7&zVvP<1`taZ~2
zuGCY<l|7YNV^oMrJ+D%4DuqHK4f^?fZEbh&c>8d#_u=edAHJ@ap*^i55U<KgP06=b
z>M}Juy~8;Osnq;}W(ys`(TsGms1Xhfrb#rSQMIh(s+I%?I4pr0zGWS$B>C``j|CE{
zQ35$>qjjKh|IFomd*ml)lv`IpX+)fkO^l3{FgS+3*_s6Qz;oz3w*4J@CkpT2u%4A^
zvJxOz_exB}hz!*}va$-709BBYKVcX$xqHEtA(P}Y8!QvxY|y-qW83f2#|dHH!MWPO
zMP8|QbFFs^pi<Z7w;hBzc7eVZ#ra4_NihdCcIO@`tI#BuUNj$;D${}{;LPzN^3Bj+
zaY$K#UEue6F4$e^A}v9Mg>kW57K%v(Qef$0(8<(*?guF40=ye)KXsY~$C>qm2Qm(X
z#4N{A%x87Ew5;Rk1M?f!E*GyxfzOVe*#34Dh0$(M31n5~;8U-1`s<a&8t6=KWfl^~
z&zO-61`vy3ObeFE3q%ZUXG3>2J|Y96^dzz&@&><L#Bf2#Ql-K;`dq42>ZMG_hu-{+
zmsmN63YwEXFaUi2J$})Zp=A$;*!K!T0wmvm|5Zcu6<rLUGYcGK2m7y7zeYiy3i#v8
z$P2ElA{22n;MZHy^jLbaA~@;)C5%x(0IGi8OZC?NOg%P*9QUx77|p@dVjJaRqWc%9
zlGf9~YR0{604_jL{}I_Uoe_M>-9Xf!4(d{(CSs8I@y2vwHtt2t#{9&<FlYcybN6V(
zS?L&Pq$Xn?d-hCJi9cr1rrHUsuJv-W$-y4pOA<a9QnU<CwG(liQ?P}Geg>XkhPe}B
z>Et?u9w@tS=5oi?C8l>*z0aX*SYQVXQFF5cyuHktU~`%{=DIRe@M4M*$fu~4ifWb4
zYwc5c1A*&hl#-%|<5VCQ{0$?Tyacv~QN*3ZpFola))i$CU})qU@kk_=VnGac?`tVV
z^R?$~OwWYb#B7DT<OBkPadH<M3ZFQU%HG?N>x3>08W@5F;dQHoNc0XuK-O4s%G4+K
zSWj};)6||%XN=;anhI0XXDa4w<;#XOMfp(Y{O}s2PN6A?UWThv6>$UnY7oTj711C&
z0U&G-X=*X^fz-x;S+BbH$ejf6jDmO+kqO!SvG;-5{<S@kP7F@V#}wj$rwGXWNwW$|
zz_}YsQPHe+<XwbOIEwGpH%mzr1)XHU2u6eo4g<4DW%L5XegkM06BWTh7zXeRNDbKq
z+4{GyS`@r16`s1KoDd*1<~UCSuL$ytFop=v2&aVmEDmuQil(SRM4(eJuHn$8OaMXm
zBnnZ~12SNSi7XuO;>5n-0wbES5tt27&@?`bgvPEh0Ri5zm{=fxt%;pI$ihoN$Ze?T
z+z*{AT>l`@I4hY^r|=m=8v+3G!EmA1n78+cNbA%JVdD{i+vh%4!y-h%T{43fRjWEn
zI)0F)0^RaNY8tVAE!LKkiOV`l4Xqf3)le$}PV~SKT6%>|7VlP0!KOG*;$2i?(GB$S
zn02a70%c!?EZ*i==4!)UDhEr^y$5PbhFi8L@2m5+Dc9k*I>w5&r7JlEEM|RV*L<KR
ziE&vpN0_yFo6?u2Bg3LKAye?K_+8S{%$YV!1CZn~lKN>h7%E+6C&Z<B>YY+MU^oDm
zQ5bxieFpH{G-U`<Z=v1Dr;L~-EMZ6!f$;H$sd^77%gd(8TA{+>DU(#5ge#rXDh8X$
z2pcLt6`mEq3jt{=UmdE+!p)zGgo>uca?(aGa02kBirNTRp9dGorIJi--TVpN>LOXh
zAhyCfRm~R2(wg%Ev6uwX+m6qaiDey^)(W=FI;SSIxh)-?t7?^Xz74eDxqWELTABit
z+Nr9o@m>Wo`dQU4i^ZVEy^Sh17CRz|a~VrOXDvAbCiJ=aKcP~~W)b9F_JBvY%tOc)
zL&bgCvKT6EGgM^0pY6IbB2^b0tJZST38B=BZ5K>s9(gv|uxKRJu=Lb4`=`a8)eyAS
z0{~Ee0i_s8ir}>FBj5{e_;R5|O3^}7m*47jYy6z%yO-*i$C<AzG#8)CKtM3W*j1`#
z2(GlEC;ihx9At>DblH`Q7{jL28Ui0_KhHxwxS!|0z3cMZc_5HaqR@{YYws^U)A#?j
zU%c+TDDMC5cG`>mzfbWj_Wv&S|1S3bF82Ta5AFXIf1Bwhr7)`8`J3<m)ph~MAv6DG
z(T*q3NZRrQe%Ui7v$i0qQClOv4ZHv&W^(BwZo5a0?c0&1K(>H;SEHd-S3v8HMx$9Q
z-?aom@$ZqPB&U#lZYRCq!k<|W0*)e1uu4Vt&Hs;VcP<PnY>vSLor{vAQH1W}9tSOo
z6Iv%eu)Ro3|L5B-OlYSgkgKv8UvNQ`a^nha<^c6d67NS}6>-$Bb^|Z*Y+u_6Wu&wc
zIwPAPc7)jG#Akxm@ks{HiO&SB<J%?fa5rblwAL133vKm+xj9#c&2WLKa>Icar`-K9
z@?0Y#6JP<$0T4Wj&IK_u`bW70_LABk-%3<NCi4+}e|)C<|D9K_Ulh;(!H*XU|NkkT
zh5x_s{}=xM!vFtk`u}G4KTkQN(N|B~-2uJfb|G~H-bWz?+4V%H357dJv$|ezu@T-_
z>KQ%UFIa+D6I%{(E5^A@Wdq!?n4jnq=k*XvOb!Y=_b!fxHf}TOw3iYHT+UiC{9aca
zVzHZ3oVHq#@J&|!)@bVIN*cF8!tRcQJp?7}?v#}4zXK&EB=?}?9y}={Va+L&q+aWz
z#n$*=9;cleQ#Tcm-$y)}$WZJV`yId4(wO_b9yv%io?y-_`e<aRD3m`_y?B|I6w{kI
zcuNVtn*wp`{M<?d23q0W@23kmA_hIP+IqGmJ`aHqLK*<t4_UGfsyt<UCj;R5rL@IU
zAx)Q2SxW!L4@-$+rvA-q8E05W(LPN%s!m*sTxs+I2v-9h>&KpRlPbf!eEPtMx3R|3
zBV}fh;`(8BS}Hx1kjhCekm7Lx+!1C(kngMMxnjGkJU*SD`h>)RveIYCCNr<N$fvXd
z8h{IM;!Le~TG&$}IzsE3PH@DY%dKHEV_4;3N5MEN38f`zG}J?c)XZBSS^Nd+1m)J!
z@IgTx^3U9%k&fEIXowq976YFR>1MI$LUn!I%d3~Gu~POz6oeo<3G2y;h~iOqI*XKb
z_sSWXq6|Qgo0r_VLbAuU@424vArrMw25ra0QZGIuSbc*4)hR0TL8<DVsQxTTlUm{V
z=Xw)Rk8sQE>MGMpiroiUDX}1}l@JWV&OEj6$=-nh3ZA}vmi80zGwWW`zmiIa*_IBd
zFgAy2U4)^V9wSk9d8zg1{Zc6i!&JNVa>;0syIJEj^~=%gCqE1pp>P0%?nxj=9K2=-
zS0Gr(DUph)wzXK;e2QZ#?`fuLs_jCEr?OAdsNS>zP+AWh?vUy5KO31+u)`vleIvlw
z3gAdbv4jO4oo7s}o5NM3BpbNDOs8RDreRW`VPd9XLNrWN8a_)JCiBzq#Z1GO0u5ix
zG<+c%zNj=@NgBS)LBp8S;O%lhv5|3s*M!!t2A`Wy;cAfWdm{k0gu}qKWp!HZ)ou$s
zkQMs+yp^9P7U2?$0vEzatMk0u(VH<83X&66p50t>2E*hdFo7!7ws>Ouyti$LIo|{x
z{4a0m%)mY)*ylIFXZW9j>7W|;6@p*A39jJ33SKUPj~GOT9cF<RFEek6NJXV=qE0Qd
z&oX6#DPJ(<N~V0#4RZlw7f0F-fTKO40tQ%pI5EvO&wE;B*rASuyN^HsOO_B@OUSC-
zA>9H>Dh_r+>B+rHf4N&}!vT&8Poy)|u+M#zSU4-vRp|&Zi^ex)GiLZNGbn!`VRr8&
z%<jE}*?oLrb{|2QT`A126lV8U!ZiQ7leef&x7@{NR6Mo^^%<qxl(~NLXn4u@%L+V+
zlUd>Cl!D;Q>8Xs8E1epH5T>svo88VT=)wUWgS1U+q=pDVWgUiHXSOdkc}mvxZE#r?
zA(@I)u-YV3g0B#0WqYP9b<gBlCCj8p(|xR)A?+`oN3<pdI@i&V;+WtfJ_yIWTG9SW
z7ZeE#_wH?V@2GN{1Q!sG;pmHrZKOs}8HIn6RR*0euf7+_*NhUV`hjYXin^`=n=Ds_
z399Hq70|cnJ%ISQ(07b9D@Eoso_N!MrJBg6+Zlio-raxP9RM@d|6g|6-QxOx_tneA
z`u|fri}nA-`u}46f3g1m_gw$q-4}Dw@qD|2@4Zr``YgrC@;-im8iE<iZaCQw{E6;Y
zrFZhye*sk4k_TO_K%pjKF)i`$r_=86VfEE{_P>Nz`-937yshYN_i*A42plM4DU1D$
zpDbWVGrK{S&<-UMv;SKm)-Aew)+E#!5>)R(*6zx<t3Vf5Apgy;K%S|^`8~-0m5Y!U
zmwf(3FZl!|0vq$s{y!I&dCoNI|2r3anv$iaz#n`RrAJGUWklMqIj{W`^#q3f8r36l
zKEd)pK2|nObMH}^u6z)t;iEmYOjDTJn)~>U1NgV)tNlP;RbS5cPPrvLWz2~>iHSD^
zjEiFyKKFL!ZpBjU%Zb9!zRFOUSz>2jW2b~FF|%L6OrgHYCAH6(WA(E^M(ryCls0sQ
z!(kXhb>j9}0iRt@n-x&+$RWDqy&%@}=1NBeq|TB}iDH{^mQuf;L|)HCn%ZPnq_7?s
z@fXT6ep%dJ-|~<<I>ED+=b=<t!SZW$y@pxSsu5Bf6b_tRp~iV;b9gm-u@IkI-0Y~a
zmL`mEvl^*%JS)dk#c_O~hmdjWSKKAbXmH58V$NEPN$t~y(nG=GmyqS-!%SqIheXz$
z2U*34VjfUv{$2F2V-LrXXcXX=!mca%o}4@~_b2q)yyA|*e4CmatLd&Y%*k#Aq8Kns
z&W8@VJjIZnT|boNr7r|h-iBZ(m)}cMnMpU`<hQYDFE+x2+-|B{Y}3{#Kb7|w;Zt~l
z5g{nNx+qIi-dU8ViI)}O@07OP{qP*Of-)~GkS0W$N@Q(Kz6|0J>~%VAg^!eLi)3x1
z0V(C>32AL>YkT`=hugg^Q&#WO@&4H_hr7qy8l@>EY-r%47dG$9Q>`*G^;jdlHDXD=
zN&-Z#z1l*%cS^eksQN;t^eUx*U$d-&iWp0IE64D(S<XstM>1ulw=fm*3O}i{rEaiT
zGs^=jZFyOM+OB(`aw5MfiM$vABo{Y}&DS@E&SNVKJ4JVF@JwAA0d#{=gq*T1bmpXG
zI>(8Vy5zY`nYP49%WvV-@#6Vb9@K2qNgh4k8t{z!pI&udy)NJXv^f9$B+rAd|5h*m
z((<gb{##rCzQqb~z5rZY0TxTZ*$QxR3HUZ^!08fjaSeE}2)tMXUMvFNYZ16N1im`?
zcGi3ps@1l5>_px$&l8*aY=0$vDe3bqW{;8(uOoG6k_d}E;<|Ew40b_ZST-y*E62)f
zqnNJ9M`w75Q^Xjatj~2QbN)YYy#U`w8(2S#LVQc>TCIlX5C)J$$0F?L!f7(+62`YB
z_&z>4O#@o^g+asGS`Z%Cpea80(;2HQi#8SaqKmlY_}q@B<jb41>**OhBji3wG?v>*
z(;a<yPO9Ey^*3nnkYDexbnPGLqo<sWd2$$r$)+81V!4_pUb{mv9rB$<g;jRQZ8tro
zqMRU3v!}j?HV0SF8y6zDRM=J;P{xxu;RCC&Y9mAV4R=O#Q#DPN*AYX#A)^(26*t&T
z<nR^KRYD&y)p(PT0$Fclfn3^J?6H#n;*}rNY2fROMyqdWP!CcQGK*S+|Evbi;iO@B
zIvtYnL!8nCGEx%Az|g!1rlgmS(-!)Cvb`UL12NLoRZM!N#{Knat8qEKyg9zIwYALH
zklE0WbR(f^d`M)7u?Q$>_0a%oYFmmK({%{_2w(xxiHhP>nI=YxTBhTU*{Mkbq+u^}
z0j{(+dd7)J1-UqR_|WxcW1Kh;21@<5vreCH-YPmSlFDbq%F353pl{y@AI(eA2pz<q
z%v`9dLlo!qvUXMOA%7G;4U{R0^<ok&Ue;YXSw~xp%Rn?=k<L*l9awqs_jcg^78DyC
z@njSQxG?ptTvfJs9^p~$mN1>ec#uhf8S($~m#<$I;{R8#JFgb;|5H4R{ojlI-;2<H
z5&Hi%_kZ8%{^tj|v29>SS9rov+vxYrog@UP<z*3d7Tjp%B%yN6NA=bnamB${-1}qR
zeN%>~{bKKd(jopUza>eY6NgZmV}#`et~@tOuXS#+7uC1AXt?Mm8K|Ol>CN#b;<4B;
zlc?fTnTAjKK=|L(3pQLK_TURa)BV2}FTn#W_<t{+zk0s#|DNJm_<sxkZ{hzf{J+1I
z|Cgr>eLLWK5-5$Fm7~4Idgj2!OBQiq$@VwpCb2mV4?f@}z=hj9jXMy<I}>n;Nxr~C
zZX+ws;fZZZc!&lUVxG~rIKPREex{yJ`Q}SM1ST9LN&%6Q-7}gmV~9PCK+A!?-!aS7
z0kDnRRC%`TFeT|GiEJljLdBanz#GioaH8y-%c?h|Wi@I`FzK~ss3f%UicsS2=2mCP
zP}$UCo1u8AVr-d|Xl-riEfq?vcK)y3QeT6MmwGDAC|~R;){KV9E`|shAl>V!@F>6g
zlVC8ONM(5fWz|bSRlTZ9t}|O+u_;TZI#t?@o=I0!v@Nx(%yj+YQNt^S0pFP4<SH>8
z)Bzh<P#=5<O5BO}P6%g@){SGUyOhyqc>gBe)al!CjDsUuKhaC<2+bZPXq~K;D_1Ts
zLfvHj?aG(%lHd??DmuZK{&w+Qi1^-D&$(iwp%|R6LwR7-c0b#Az9==)DOHG6!%z|q
zPv6L?^m}prN#le_D$*dR#cF#{O2D49PxTN<-aZ)ga>R7)kK}pdgvwW=-pEmR{?p!*
zHn(jg`#$SeV7)1YvME}JWpB}zszix$w6P_v<oNBDE2V-+P{IodG6ZQ`Irg`|>7J|S
z0zh4f9UxUP1<cXY)6>(_-P0Xtx>MA2$8MS*QL$GZ$<jIbsa0U@0qwSRr-FCd<c&4?
zysda<YCi$tDa{f=!648G0*%nf=^RrV4GrL`SYa#CG8?PsQk;8s1zP1j1*cz-fLu?~
zI?u-tI_1LS+-V4PkHahLUoFyN0L&RAi}nLsv|aQ)-hEkIh-aQ=1v}K`pYke&3!OFA
z3#limEF1A5T)&jeA>$oOkxMMi*(~mXRLqtp#Y-;j@1muYwlvSupXUi5PA-zBPm`Vu
zou2et5uSszeLLyX#<Z!O$+`1<9uJ4t7?pOE#2J@@k$IT#z-ul_(zehD$)rgHCW>(n
z&_hDs0<ddCf2{z+<-<9lY`2K%VqLg;Bv|!ZbkOdf%^0*khRrYaHF&@!+7M?bPVa~0
zQk@uN_j8O(6=Q4TK;>kzF{-ICrp00Ql=zyAG{YI1GrR~0xLFqc0HZXBH*>h7kSs>=
zXI^H1JUf|=`-~jmI`-My-8XN%{B#7^WAY%cC9ZBeyytH&rU8aBp5q^SXOZi_ut{ut
z>xAnGG%_)F?zu4qPvGimaHyRhZ_vLpjU8tiot=n2G77yrpOPw6!v(D%6742-e1zg3
zV(~EH@zb2$X90-35sMBfPqrWTR-ON?eL2pdYpd6t?ecw;S93@F$|KcRC3IgbapN@i
zC_FcCs(UMjA-4oz!@$q;bd&-KCE0j>c@@6ZhmFKS_D5L<R3jkF7uC>0zU3Wbl`FqZ
z?pcnN){i-TzP04;EgxKl|D#9XYsfYBM0URNl+F94=RN!R9vQ4Jz_Z&MToZMQ`T485
zQCp$7g$r-h!1Yj!$4F!u?sB(nEC!Qs#o=!jUx>K&RIqG%$Ob|IP-%*I^`Us-+=P^m
z5a@g3X_ibCbI9kThC8(uWf^szZbvYC^qtr6q%QyC;aAf5D$nH7noRbY^zoRsV)iL+
zJF7O(j)k!}bp9Ouwdsvi3R0;Jo4j@B4!Rl5Pmao%mbID~K)!`>a^zb=T;SpBPA)*M
zYXJDeLCurT1d#-*Poj<1TJ%`7*aBs2ob?idmKF9j^94XBNYt%2ZFGlE3T8MPN%=Na
zE=KtDNE4=fXLbD<N#B?;LHSRj#YkVbAxS?#;vS@U1ypw}ITGp@xHt?hL-4*DSRA@Y
zcyUzaIo1>vAFKmwF1+L_g^aS6(cAPhlQ+a7YKxtssq`V+3vDP(u7V6KI?p-_umLZL
zGRb+fjGn~ce6^nhcfk>&02qSALm*5KmOeUu7ahJmdDDH{J$l#OZ+VgznR6lMBQ)3@
zAGj4%N(U)B{eQYjdskHU{J${<F%k*@IgP0AaT*C|XmRne<9ri8HCETX=`%QsAk_|e
zk`Xl$)IItDucj&ORa9A3*P2pTeV|oRpu%%AB`Q3Ns|w%|XZcDz79Rger{GKr$Jy$P
z7oOW5ZNtafTOVm1N@jBi8_UU2NFm|ADWHu44LCeE(}ITw{>KqT=j$el_1hDLDZSWT
z>`J-O+kpqOKEm}-SaGkN+xNQuW0*UV{R>MU29hO#TObcS=d|BsB0dQEY+tEJq)w+?
zO>7tQ2Yf0AXZ;SqDGjYB!MQ~r8#mD2*zMeaI!rixq@g_)40;4ciGo1c#w)WfM*Vb}
zpbrLEYM^ctX3w$af+G<aO2F(3uCu-d;o~#`N2EkI+Y0W;(AmD~oy})!EkN05$2TOM
z76MU~dd!|41L3v2#OxatruWMsn353rCgLKnPvDbf#)Cng%)t4JA0&MZ$HHpP4^<=-
zrZ|hr@7OLUu9njdIg#zUT0Ji|)KS+u>3UgdGqhBEg`KkA6QPE<bEgn@7J<042*kJm
zNDFVkJboZuMmTg%Eel$M2A#r>4dP~#-H;~um8bLzXg1WBV&on){17+8T~!)<m#R&8
zPc8h1Gb_1TxEXA>$tT*Q1$PcJy5YmH9_5*zmz^ej{g_tbab_?wVF<>rlj#@(q|L6T
zU@Qn=a@SFE1SsD#K0ff$20DHfl}5eRJ?xsNJu(riUYg(FepI_!ui~w}Vp1O+R%q4;
zOou_$%Wg9;yH&>8x!G7dHyCTD>R3DBv33?3t6rpglrB6{Llu4VzM*j5jh+-CXwRpC
z-W6!^0N`T9uOi!T8bnbA?ydoM=LT?hZVz|2X-u#WZd%bh$>l>A63=Wri-*#6a{V7`
zPeTrn(c_9cW3T}~GGp#_dFhDc^57Ia+<0UyFRqxhMn<_qJW<(s@?Z0~j~}WEZX(Hh
z-0!CtYh)OW;Qp6R_u)T%DpP_QN}&u6kFh;JzMIV$9x?Oi<93!_hUHv|J)yu5>Dn90
zBIhUb$5h7f%uyJ%@KC7yA~8Inz~{ob_X>g?tCk)kiMg0xj#jI4IMV#(Jf8Lg^A?U_
z54nZ&G;1*6Rtyxe6?Yk|RU8vPApfoU8Go=T{~Q5f<p?fo&^GwU$222w%=mTu^09Z-
zgW#_EBx-E1|6!vm9`>Vfv=|yfvukgy2jQ*tpt{-E9JXfiuZ^ANAix~qDcWrg7TIm&
z<KJ~&H;u7-eMG{4Rr5csXsZBEhDxRiG3*5`6{40fR7lj_-cC`)vv(mgg#@&=Qhd!;
z3WJDiBLzHvc_W2M6Zc`Gpgr8gL}62H6$=Hea}xuFjg><Cgfc)^H&7Vu-^e~;b$UAk
zg$2$H>=Q0H_h6uKJGr5S!ffak2CV8f3V~v3qA1#QzfcQ>7}B52Kp~~PFUUUOIHCI3
zXi(YjDSOY>iDG!mj1!)+i`gbb1C>k@3mPXP<J{vaMC6A>jT0`&&0s%O#(qe>3>UCW
zETH@Mkkvw}f6p{mQI+l*$0st*LY=9p_;)Is$Jr`se*#c}iDt9HfI2rCP-o!*mFV^f
zKnvQOoCB`*5H&R!6`6>yB|o#EldvdD+w+;Bs@WT~zGC0-;oU7Z$n5!?dUq`|Om)RQ
zfud<(q6*+$1Mtob0PoxZ;N7M{c4Za^GRUTv+^RRw2{u6Mx)HtbAK^(Wl=(cv8W+Ee
zfNgdl2Ab&m5fI-w6HP?;EQrI~<eA<G3~r4HEe_Xw?9w{VC9j|&XS;R2+W2JkbH9%f
zrdmYbyW{Y`CGp?ZpFMx}+>Zate%A5d9^$Fvzt!>I>iBPU{I{<v{@dLLYr`bTG*}yC
zUBGy>eCJfBa8NYxqYzgURt)>Q3{h#9%rxcstlw@A!CHwqe|JO{<D5%;Y|t39L?oSt
zXuM5c<s$C=bk6tnWXe<L<}~pq{;Q8`b~o)dO@Y15>$ifLuleW7DX-Ik`e~jRQ-+L;
zhcl)ruyvW=ehZXY-4SU~r$#Ppk{eY0GS!qK#f5ppo+u;vL95?ggKPLA=rPPYh0l%^
z#8tVVss$b;++BEl9dPeq8yKvxjF;-M&yh?3LQoVn{w8c`7Z;5c$X3g^L6$cdD8T^D
zRR^;k9!v<4?ik0&*Y9<t>o*=LkL_`J_VW~)iB@3-;cnzi#*s$tT#{`R#=5p*S9@Yr
zze%%XH@k*eX#!$z7nRyODn2r6jN%_rL1Yw%<6j`6q!#B5&O~GD;fQyZql_H@Xv!K9
zN-<m^uTq#hTd2Z}B^pIl+N1&ee@TYCG*9NE6rzssew@5Z+%#;$5=|y)Ffl#i<*jbg
z`08r19JG93jsNKCv2v%3QN+1l9ZbS>!x5>OE*TG1l2;jpTgGeZC-aNdN=Glm33UH5
zdNnRpBdx7YfPlp~lfE5o!K21G6h$@p+jMg*vbeD=ka0XK$rjgy!bWX}5?gq3AQ_X0
zGl-BKcmCO6T{b<Kwv<-bJ%pOkm{UIm-X7VDyd6P;`dO0c{A)H|jXn^^60Zc=Jc1Ak
zMiAD{Ow%SRvQe}kYahLp&%rF<M<Hc{9qjf|aq%`EpOYI-<kd6QYd4<-^x&eB%iG*V
z-*DO#v*oFrFI-W0q>(k`t%mj3CXCi4wg(K7X_AS{A2K2!&>J`xGkifFO2TU0@V?k|
zFv72{X+-knk%YsJXS5=>po%^TzX<pX74!+^P&;i_#aE56d|M~p@Ch$sIhAY_n1;i7
z8%oPzv-?{}L!lfUPC>jRB^H4^zGi%ED$}G>iICSY=`#Xh#HFzG0ijIMgT{&ZD!LR-
zs0nq_fLmFjL)Tw`)j1mD0ei^E4PecZq@SSZJWYT$Kf=8(7gScUG0(Y*qc<K+V!S25
zJ;4~x`_YHBR%`u7)io<Lo-zTP9dPp%7Y@N38G_zjPm(77!jz+~nTNHAq{-0heDfRo
z2=n+b0DmsOrOzz3Uai=MB~8G?&I=-Lv!X1qn3~agviiK~8)$%t*rA5bWGs#?=&8d<
zH|2gfnKHXcCmpvjR29f#!j>c)goLc_R6$2V0V??05Y)HZ-Tl|ystz|+m}$u!O_Khg
zaN%*dgD31`ta!XXZnPec_jULp0&kRr?%MDdU0#kFWV`sFe3pNVjLqeP@>mUo{AACo
zXmzdS?`KhWP5*5BgZ{x&#oZFm#=eFb4hob{usKxr&vHZ@8LJuizQ+Lsp4?a7T7Jb<
zLAEg}3c_6Ax`1iIwNJV5Qqx-COzVurd9BZ>@W|}eV&kMZ=k{2>+ka{4QXLulu8n{H
zQ=b2Gll?aBe_JnJyr}Je5AoFYzuNv++y83&Uv2-pNwOyIzFDrvs;tCPg>#{Ue9E~J
zG730BvNH)70<O~RC&mrNqbTo9A%rxn2!@L&k~L1I<BRxW2+JQCCZhzJ;RdaEQ8bNl
z!LlX9?KZirewvIpw&Dv|CAdJO0TK%~qaG7T^C+4147DyDLKSW9mnA)Y`OnYuWO^+~
z^Uf20il@x~>)D1a|81_-{$CIC)bd{~|JCweE&qKL@}IGp-9=tc{@<R=$u*t^g+whX
zaw(C5V*b@Iy&jZX#DRFRveZU2>l}3ry9A$yY1U`6eco8#*nGAn-d$XrHw+t|cn_AJ
zb4xJ>@Al(a{7!fDm`RfPidK5D<{%{}XzE07s9E1!X<`PlA+S;=Q!+Z}k4Nb*39F#$
z{-fz^0P<mVNAc%3Y^~|rfX|@G^)+85R(zPm1JDku;_GXzHTGeX{ohl(KWB@#m(H$*
z3GP=ZR+jv?pU8<Wp6BpP|JRu6sy$adig=DAX7_gfRO;{}ZvR@TQ>`SPR2OR7U)^M?
zmcyd%ph7ZK1&5giwba}UB)Ym2ur^!u@US6m#=N3_RhIcyp1XKGk7b-qtG)|vX4ut0
zRyT+9I+is&<R>soMw0`baF;-5CEKHQJ?&U6>CC+07G*v-g~%pkq_yqb3OOPb?L=jv
z72YmpB3e~kUgn>uTq)RqH0)T_98=Xq&b9{6u2X<bK6E3itQ@TzX~h(;6VbJk-}T1E
zHOr{x8q+Em(QaZti(bhUZQA!sEcgaWt0f^NMliFsCog9@Xjo-r3XGszr@3U51<Ji@
z=wA`Cg3)crsZF!e7Gua+K1ikwtA9Bt*?XW@YwRu)Zso}g+%FoT27HUxZKfFwP7b<`
zYo(jZ8H)WF7?oX$jFBVfce!h#%`fR6_dp7H#oxIC$xgfdaXg%l60nSW_uDiBx8q~(
zeeB!r@+6-2uFfWLwn3dvC0DYY?$PWDVvlk~o=AJD#)@#gHOJtEo*g#M4)?n+DQ$Q?
zbWlK}o;j@FCIx<lcsl;gcBFAY<IP<rv-b*pFc1j`{NLktT76t^5C7fWx2~S<NoNV=
zNWmvZ3b^zVg>MoY*38^|VuYUs!8!ln5r92N0@hgp1&2p4vzFD@#esB;FGYe3jd^ES
z(EbPahXg_2rC2a20kj9~kj{j9Hc~jpZ-mkEDH#qAz4XyE7dp0cmo&4$I^}(n6<WGL
zjqVDUqq#NtXG@n^gmz2UuSL6yPTR4cqVIOz94h~cr_I_;EFWuY0(b<01ij5o^csHe
zkDw=XU=h26-|?MK8OqER0L{kz1g?{?e{zL={HtLJBKWe2C7mM#@3Ufe*c%4PV-0@5
z_S}O4)JAvG&iM0kbaBDUw-~88MfG`5#AI$<T(l-qt3rx%e1R2V_Ff<jk>@!>h^qpN
zUliaqKP+@Vz&x7rlWBt@pxsV{2x|i>EP6pWX#_MK_$+m@na`$Z^BZy_XTr`IPc)vM
zti#K1*?;(L-Tda9C(ugjO53%)@OF=KNWMFFFXt)q|9bBDe{F27ZPoU_hj?oHUv2-Z
z?SHlX@2jx?RrCM4xlxb1e(5cf{x)<^{S@su@$`CGrV80-uc!h_Mn>27r|8!UBBU-!
zi(o#9?bG`x{)~xFm~09^S6bjl-;CrdxVna~q$Kymt#R$vxGt{oi(BItRYO=00oIKM
zM_c~$v;lvEF%m!OJNOND4(XpEDjEb)Ek;H^%_ogVy5!zC84Mn+tUM+d6Mc~@{iH|z
zR`ttoJeT#!OBM9T3(&q)qLN>~G<kII_3j(vhUDgcKN;k$@9waV68Z1>*19eKJ$t@Y
z`+q&iQ_Fv~{8!6=wfy&B@*n6vVTZw{0=v)B(teWnrs+h*?S_I810s&N&<4&e5#Eai
zlx^-u`^hk#XYn=a(9-NuU~ZqM&xGpdhezFi@9w>WL9&`r_jBBvoljt~^x(GiIV*^-
zdQvh(Pn@5UX(rs1FzV5#H0M)^^E4e_%t2gZlrx(5uA*U*=MfVe(q5W~urf|RzFr8i
z_C26~ci27MWwiGn3H(*cW_jAX0<Ri9_8CQ`NRpItOb_B5mJ<NV>gOE#QNsSY=I;J5
zByi5@L;5X$i>*7B-nsBTV2o%GqJ;DBmj2$?i13%FBJNlJ@2PpDV7)$-=r}jfalYBQ
zdPK_#O*LpRlh3CAq4)%XBpy)Mu;r*FUE(xBYyq&YaH?Zdg%>rV{+KOi<iLEI#?$zc
zQ6XFxzYy0k4A5j-BQ}Kt#z^pQYf#nb|C~btBZW3*eDxyW?e;=VMBl$$`nxihFyI)T
zuIU0wJ~OVALm&jQ=E{J+HOOTEXKd44S~43kCi>O)JC3BIpZ6Cp{gr_fimNiN$0{47
zqWFNs;l9NZfg3Ku8;}pk#uVSe>4=B<nD7cgbiPS3R^_?u{+h23cM3wqKO#EMFXB8o
z-+cA{Vh6By^|G`D*cQ$e4zTJ~li?0=`>vn+S_rM^SKl|G3Y`|CvvO$2@Lw5Upv~{B
z#*Fpgo68c8d=uO#)Z8y_j8BDBE*=**eCgc-cNZ;xN$2$YdbrB$e)}js|8G27+g!8G
z|Lbed>hu4DJoWj%KL6L}|N8v@VCVlm2-(HY^la-fPx?!Ixx+mtUF5L!o%-F{)31-k
zA2Jr5_>(#`aKA3RWG-&R2;Xb^C7k=hUno#QMycByXKWTnMyY!|HZx4nGcy0vI5VsB
zrSVdqB&@@(*BJ1q+ATY6_A=j-8yDt>Ge(WQEA!pEbYwL<84s`DCb?DaY&@OC>{KjU
zy?Z$kBAezDaC`(y&(g0Ti{ANm8GLY|;EXcizc-BeHh1@=)KmQkGvkD_4pSayqv!A2
z!XFT8$+bru_l#1wO+Q_Y-lkbPnvXC>M3m!2!DKl8B=dMr$Fq6PBh6k-$Mef8uI3P4
zr|~o)jYYt(qMR{j9lX-DrM@)#Kl^zOoQ&~FQl_B#hE@L^$;!#YETZlaVy-4bNKx4v
zPZ{6ED6AJIw8>|F6%npUCKJYD*!f!TSfH(J8Ra3^d^}X~1tDqcKi1GsQN6MOS2yV_
zsNcq)5$kO5eb~bU=&beeC)hk@xPM^QFEIcH{9tUMJMQ;WT-C$q(Fmf4q}k=8h_QW<
zdYyew`VKDR&;Me*`k>-*nK3Nes*DIPT#k8=Z;%Q|ln_;!Gm8?gZKHs<=;<ssf}QY2
zi@K!&$o(UtkxgJDhbVokNbxdCEd01eU?_o?4$wO~QCNh!W-}BIJ*RQIq%XIbzofuy
zg_3Td?LgmY=D=td6gP=;Ii%OqwExm3E?($_bvmD3*bPaR)F|}CkT+poQf@|^IpAdx
zKNBmf$7J**XCp#?2PubLCgV{uBY6(wRU}p>$e5IKhgAVsk<Clz&^I{Ut`3vzl8IfS
z<1+SYtm^=)Eo864p`wVpiX!34HgDY*`3M=zvrh?=zSTPIaZw6X;J$?^TIRkNL6EFO
zz(yqsiZ%K0m{%+-c=otsHhp`{rj(D5`bMa7!h=+`QLK>>t3aFQZcK9W*xm!%$&%R%
zmDZL;h+~^ca+8_4n~N6kh58Yy=|P@;#nTN~HNQ`iNd$M*f0D$D-rw>M6=s+7YE_ju
z+aC`OX$0*>dyrW3QI^pQjU9^It-K?fg1w!<8U&>}?8JkaIE!=MFOq@>z{F6{ah_PK
z+0*Sn#1nwyau0H6_xb4(x4bc|IdSYYnwln~@kg{fL24HcP_`J(f`=iAJ3`cU>;s28
zpu7T!y5sqft(tU(CRjZ9DzlBM19Gfj{qS>n#pO2s_8^e-Wj0DkG7!95GoJAH@Y_YL
zQV9UjCT~*CzRmds7F9gWKy(u5@+H*uaUFek%JY#o1$uYNNbC+pSn5#XlY(Al09`wC
zuTdz+0$u<Jf?}Fq0_9JcjaG1EsWQTAXXAmnSSa<0|MPC8G~HLZ<}-WvIG3R;DZarg
z9uBy26Qy_t?<*jq8Dv4s>`fC`1$^<N%)|3HU^G9qs@ZZ}70OS1$Z$I1JKISbg>-qz
z_WMZ=XrGbe3}>({U(1Hhq_Azlm_*Z;DJaqM1bM9xwz(zSC-w3p9S?%RP9aR_oQ!!2
zDWQ!rnp2yd%!O;7RUj-s*JLSXDwCR+`Al@fpl|gK--;+5B9sO4D3w<XM5Ojt3g%TZ
zt62G!f`o|IKk-PLfLaiaFG8Z6B)xQya;+~%8n@L(GI@qE38@T?otwK7OwJYNX_zKI
zr(ofv>_ATea;l>IdPTFbP`*8d3SPM~fy)FFg0{!z?#QXjK#7o_B-+LUeK^deEnbe$
zL>l94<7q!JG0b{kLj6bJk+CYeI*hLw=X5m+N1ZmeEI`aqCfr{#(Ku$kaRo+iI2H~~
zPI@-77Q#7uDj_W&fl5Okh<TVC3vZ#JrXv`v2_qRSJ8pr>dxqp`5n`c!w`81wL1N)i
zJpGBLCJC^}eOyBEut&}HsuB1ACEik@-K1$6lxX7N2>`23j$?f!F=ob}7>a^lMb^K$
zRpJwy4G~laLdpX32={<R;G|Pl1O&v~U_!<T8}6Z#n;901l3!52BK8GqJ0SvK=&Tk#
z8Ic4_Iuw|O;lJ4Uiae3CQbodRwA*8ILSDhcyO!svW$CWCC$$#xrZ%k;OcqFvW%R3+
zOoF3S8sP>i#+W>BYpIosgiC)Xl>>fi^pPGPrl^XP%VZdA)017ssC2?BoybZPUWo#t
zJY{^X5RtG#pZK}BGwvWlD+@W&>_cVJq{C3ViKn{RDXV@$s!z=7l$3aH>U3yNa0M}v
zuNLcE-LeTK5>d}a=#-bpxE;opM592!PM9Tm?zCh0%3h;li5;)tv}^Wh%UfnkZjdWC
zSeuV8>XJf?_rht%eX4{<3xo3Lf#`LxfU>1Rstl(=b%YCG#t9rLupoj$E-;uFM6b@?
z9@yAHF4A&(kRWahJ7{p7%w6<I2m+=@$pHv=fGOV5frojfAnQ}<@nAd^aY^<P;GSte
z1i7R5DH;X^ohJsH;r{_epn#nU0~aebb{ESO@N21jT(B-ot%@aX2p)mjn|SB~dI}%-
z1e(euhJ^mS$EEwg$Q_7bx3Iu*;YCoAVl>LQGsc^4p9$ym1!S~L+#%s>?HVaoBoi4S
zo(V1#7brX)1{M?^keX%&uj6cZ?Xu(m1nN`@ORNltce3!E!GT9Mfd!Z$6bh?=0%E8i
zin1=HZ9dR2d=d?VU4J>6&NKL7uOwZgp?U;0_}v@ze@6mi$g!;Z_j-wdyRqDdk3#Ls
zT0ggW1Zm!DA7%G{H=l3W{=e(bpV$7s5AoFgzqS8w?f+Z*|9+YAU%-Fy&PA#_PaY<8
zKRjFrx7NC;#JKK_29c4PG#VF%*m`A_u{oUjGPsLaoZ_C}Ry@CA+<-Bdk5|#QIPEp0
z7HYCWV_}LW{cYNz8vi$*W@&bLm^B^+hW5w|7!Gj(4;YDaBLsE7<G}(aIwcqs4+h)(
zcm<i%F@G!!A7FlId<0zKH~8TRhf7=F0c@$k+#L)xo_l7?HkSL0<Z|Yy(<7gOjmN^E
zy-FIQlOhti%UHprt}`VB_q1FydVc}&n@>-VPtQ+|50BoFn3A5DssX(F;-M1c1@h%-
z)4L~9H}?PtqK$sgW_5{6{zkNsK>&XI^;r6<@r5(ux8S!U+wnpx8r1}drnF+ww+^Bw
z5f4?VCW&BOH1$L^CHm)dcIQb!e0R!C-ovNDQem5+ttJj(OWnK`C|wZ1G(iQ$g#CHm
zi=`!7wZ79h;iL7yVd=t6IKu3(A{=JxJB+y@9Q?-Zy`yE~p)7v8b~ZlexA_|<JXlx3
z_v@1Hzeq;>FgO;w1c2R)CIB7$^9zQ<{oPbW-06l~D>v@%F#=QEQy(Sg{})@&?EAkP
zTQBPSzYp@%=l}ZrU!VW$^Zy@k|Cek%Zoscym4+rlSN5?#z6p4f$%rxE@2FdOKPAZo
zn=#z-)io?ZE)N#mij0(8)-~U1bI~hLP@T=z)lN~Qsr$VA3gE!y*9W@$%J01r<lOJ|
zSIA!ltmYNJ1NIu+!}yKZi|sOsdp+BUcEkl*3b1*RcJD%n(WN(eunlAakPA>*lOtRr
zx^NV&uDA79u=Mt>*l%D6>^FmE+)L3R5+mmEJn{2MAJe|mc6PSc+M-joM9>?xiH_Ec
zyF=Pf^mD<AaBK8(%y`6=w)1n3Bvu(Nb(mg!NhU7)LbN}6n+~2Ij(~~2?(UOG-;UPE
zLC5(F1y<K}iL>4J-E*rLE5Q@q$xD6G-3$H&YGxDBZkt*#_c6Y|47Y=;HrPrOk?$nG
z8xUIbO1JcG|7?R%5PTMnji<>4!|6HuU}4P*g=$k*dj)Mmt{B{U_bxVGI!(|BWI*q%
z&<@*Mp@P1EX0zx9KWVo0EL}9n;gl0XL(GZLMg8uyVjYPso#a~6ezWep*>K)$@*}Vd
z9<&E7K%I}9_W*3@6QNWG`p}n6LjQ!eGTM#tVLeb`Bk;Z=nwr=pYaLo*wJM?w6@H9$
zh$wCiWDd?$xjIT{ku6=(=1T%syG@&8psg6%Tcbm+jJr|eDaj!lYWlvZ_C_#U)NPCa
zwKzS@oQ8^Rzw%ZxZ?ht;N1TyMYCo8>4oV}nAI)7omLz#EeH80|)}L){+4`T&_2(~Y
z{m(-@wf?8p|J3@QTL1IM>3{gvb7KvV88!G%uLBZNprZv+?<?qmzE))q$H5<@?s@N5
z_n746QTPa;O_k64TdRC{zkXc{ZR1dCZ{Rk^D!1~sNr@;r>h7MNcaDEJ+TT6>5BK<p
z+WHz3Mx!!AW0}{7S^4hi(e4{j6(3UHQ{!Owlol2>2C;z8EWEQFt=Ux3R+}HWAFhXr
zcguVo`=2-CPjFeAyKlf|q0&*0+4^e;pNy7)YfzO0)LPiDPp{=e^merROdp_qsAMI`
z(VzO|$akRF(j|Pz1?5<=>g&B<^;JdN_1>@TG8A0FirkmNc*NyQLnrpi(1_hoA@;tC
zLJS67pc4}z{TW+$k4mxNQ=l#5Z8-X}_db1@NfG2b5}^Irr>GLW8BQq^Pv4UV>%3{`
zodzCQ2F>U`!71(j&idBMmh=XSmUK}i3+a!$HTo+F=4JIJ93cxjGwX@{i)}Hvydti7
zxM)>7N)AN8gbF=?PpRT!2AD=~a))U~X)9@A<ce`-2B|PZ8<AjORiJpaZSmuBP|&=h
z!Z!v%$w*{~iumyC9S%5W$xPqg<dH^;fsuO5BLf}}8wG`96$l6=h)|t=VxTUq)y7Zv
zJ*V3)KSm1YO~{Hdgj0|d4^C9{7zzW(43#0+!9@2~w{Jy%0~x0VIs)kd@IADI3MNW;
zV3_bW0w91xujpSa^iaZe$1j(IDt{TV5xg~tpRTS-X-i_%Gt{f}@~X;Mv5oSfg1oo9
zEEnM)J#ax=<7s*c;YlsI7Km-6$e@7Q)Gb{zBup7|H(AzizY&TFFFt3@W58Sz+EBg6
zBW9{j)HaVgo*rk__!M1C3`%o-vlk}Eb3otcYK7USF$o`qr*P;qoq?VzwhkdE^i!}0
z(=@?b=i{NC2`r#3Gh7fcq=98H(3BJqF5LdHe_U%xtIRel+Tw)E2F-qx4{I%V+ofZ_
z0-Z{g(aR%XXza4!J6i7cC@3qiQG}xg8$P9x<z+oZ4Q`}bG4Fpc{IL%OmB6aC=Bu<(
zPzg<9D`5gGnS@M-xhR<gQSQ$+2Sf@30%emTxw04gR`K=1;v07H4O09MG6U9jz}r4%
zGKc%=qs0EVwz2iXw*Red)b_szd20J#ZU3w7f3^MZ53v8yt;aS0oh6V(6B7J@FeZx0
zgt$yl>&*a22v<8vlK$#^g6*XV;LJ`VWo&ZynU0BeL~MN4YvRbQhh`=>g26#P(076F
zLNYu?ESR58F+0XXWkh=Lgh&*Z50Mzjpi;xgr{}KB*vF?Nnr3~rJWUH;B*S;JbH!&8
z;JOw4AhVlK6WDzqbem3Xrqy?B{yQR(M09asHO?1Nlw_AchGREcszFDuT&ml_4$eu$
z)B6eAPqEzaglE0;F#b;KHwr_mBZ%YCBox8VGddk+O%$ea93=?e7_>%XcMyw~QqVFZ
zp~XVbBFWMBzx(<qC9`D&W3jFUWm=unLH`R-<wmaSeg>D2nF@iA(WswJ-0-7dQ`Uj&
z#bg_4z}V*3PcDs0NNx%5;=s<>1y3lbsh!Qs4QWb(DMP7~K;%<Z%qj}dKoTA+3TiOI
z-znl*TFaYCIRZjT3Vu0_Z5cj%EXmkZ9GLUYZ=ZW+zuo>g9?nMzSk*;uB1Y#Th|7`L
zok7l|P&8P1zkOB_13V^vDgz8_&jDYIPMKi?0&`g1Ez*O;a<B^-{NomVn4>Tv`hr-!
z;dc57ox*+nHqBYU`nMQwRbY<&SSW^uG6zpgQ5u^wNsc@J{Ca{>K7Hy>;8};I{A)jN
z<DZhJ_uK~$@~{<({{WBB|81>3f3bz}AJ<>}PqcN<aN+Y8*Z<-CgD`rJV=IaOvG#1u
ziT|-)>wh2SQM&?$jXF4d(>+^Svh*b)^L9@syJa>hXLZh<56nz<>cJYmn`UpY{~Ni(
z+qghH{r<WMmAikx&)Xtfdzm5k`p<VKJ)eKbc)F79i~jzF4}Lw*x?a8b-KMYqYaZ_u
z{-3_N@Be27{%HB<zwe&oUw^Q(;{Sto^ZXz2tEXRl^-*f_{R~D9!(%&-n)hD6yZD`E
zvgC4mgJ}n+iQGu$=ezf2pWWeUCe}CqeY<GB|IvK)-S7APmi7K5`~2ee9d_sW`@coV
zuKWG_S@_k5?_W*j$lR`ee~nz-<%;4PmiE?nqbs}g^iEdWIM~UiwKF;Sd!DFe3|q2i
zN5uT)5zK6XF#*~PrIvO|VNZN`GfP)kh2?j6MekF(`|s(_puboAiA6fU{@BOH>+3T-
HU}OLQx3$^t

diff --git a/applications/utilities/mesh/generation/CV3DMesher/backup/hardCodedSimpleCubeForPolyTopoChange.H b/applications/utilities/mesh/generation/CV3DMesher/backup/hardCodedSimpleCubeForPolyTopoChange.H
deleted file mode 100644
index 8fd0e855ff7..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/backup/hardCodedSimpleCubeForPolyTopoChange.H
+++ /dev/null
@@ -1,96 +0,0 @@
-    IOobject io
-    (
-        Foam::polyMesh::defaultRegion,
-        runTime.constant(),
-        runTime,
-        IOobject::NO_READ,
-        IOobject::AUTO_WRITE
-    );
-
-    polyMesh pMesh(io);
-
-    IOobject io2
-    (
-        Foam::polyMesh::defaultRegion,
-        runTime.timeName(),
-        runTime,
-        IOobject::NO_READ,
-        IOobject::AUTO_WRITE
-    );
-
-    polyMesh pMesh2(io2, pointField(0), faceList(0), cellList(0));
-
-    polyTopoChange meshCreator(pMesh.boundaryMesh().size());
-
-    meshCreator.addPoint(point(-1,-1,-1), -1, -1, true);
-    meshCreator.addPoint(point(1,-1,-1), -1, -1, true);
-    meshCreator.addPoint(point(1,1,-1), -1, -1, true);
-    meshCreator.addPoint(point(-1,1,-1), -1, -1, true);
-    meshCreator.addPoint(point(-1,-1,1), -1, -1, true);
-    meshCreator.addPoint(point(1,-1,1), -1, -1, true);
-    meshCreator.addPoint(point(1,1,1), -1, -1, true);
-    meshCreator.addPoint(point(-1,1,1), -1, -1, true);
-    
-    meshCreator.addCell(-1, -1, -1, -1, -1);
-
-    labelList faceConstruct(4);
-
-    faceConstruct[0] = 1;
-    faceConstruct[1] = 2;
-    faceConstruct[2] = 6;
-    faceConstruct[3] = 5;
-
-    meshCreator.addFace(face(faceConstruct), 0, -1, -1, -1, -1, false, 0, -1, false);
-
-    faceConstruct[0] = 0;
-    faceConstruct[1] = 4;
-    faceConstruct[2] = 7;
-    faceConstruct[3] = 3;
-
-    meshCreator.addFace(face(faceConstruct), 0, -1, -1, -1, -1, false, 0, -1, false);
-
-    faceConstruct[0] = 2;
-    faceConstruct[1] = 3;
-    faceConstruct[2] = 7;
-    faceConstruct[3] = 6;
-
-    meshCreator.addFace(face(faceConstruct), 0, -1, -1, -1, -1, false, 0, -1, false);
-
-    faceConstruct[0] = 0;
-    faceConstruct[1] = 1;
-    faceConstruct[2] = 5;
-    faceConstruct[3] = 4;
-
-    meshCreator.addFace(face(faceConstruct), 0, -1, -1, -1, -1, false, 0, -1, false);
-
-    faceConstruct[0] = 0;
-    faceConstruct[1] = 3;
-    faceConstruct[2] = 2;
-    faceConstruct[3] = 1;
-
-    meshCreator.addFace(face(faceConstruct), 0, -1, -1, -1, -1, false, 0, -1, false);
-
-    faceConstruct[0] = 4;
-    faceConstruct[1] = 5;
-    faceConstruct[2] = 6;
-    faceConstruct[3] = 7;
-
-    meshCreator.addFace(face(faceConstruct), 0, -1, -1, -1, -1, false, 0, -1, false);
-
-    Info<< meshCreator.points() << endl;
-    Info<< meshCreator.faces() << endl;
-    Info<< meshCreator.faceOwner() << endl;
-    Info<< meshCreator.faceNeighbour() << endl;
-
-//     calcDualMesh(meshCreator);
-
-    autoPtr<mapPolyMesh> map = meshCreator.changeMesh(pMesh, false);
-
-    pMesh.updateMesh(map);
-
-    if (!pMesh.write())
-    {
-        FatalErrorIn("CV3D::writeMesh(const Time& runTime)")
-            << "Failed writing polyMesh."
-            << exit(FatalError);
-    }
\ No newline at end of file
diff --git a/applications/utilities/mesh/generation/CV3DMesher/backup/indexedVertex_with_displacementSum.H b/applications/utilities/mesh/generation/CV3DMesher/backup/indexedVertex_with_displacementSum.H
deleted file mode 100644
index b495bc770eb..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/backup/indexedVertex_with_displacementSum.H
+++ /dev/null
@@ -1,289 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Class
-    indexedVertex
-
-Description
-    An indexed form of CGAL::Triangulation_vertex_base_3<K> used to keep
-    track of the vertices in the triangulation.
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef indexedVertex_H
-#define indexedVertex_H
-
-#include <CGAL/Triangulation_3.h>
-#include "vector.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace CGAL
-{
-
-/*---------------------------------------------------------------------------*\
-                       Class indexedVertex Declaration
-\*---------------------------------------------------------------------------*/
-
-template<class Gt, class Vb=CGAL::Triangulation_vertex_base_3<Gt> >
-class indexedVertex
-:
-    public Vb
-{
-    // Private data
-
-        //- The index for this triangle vertex
-        int index_;
-
-        //- Index of pair-point :
-        //  NEAR_BOUNDARY_POINT : internal near boundary point.
-        //  INTERNAL_POINT      : internal point.
-        //  FAR_POINT           : far-point.
-        //  >= 0                : part of point-pair. Index of other point.
-        //                        Lowest numbered is inside one (master).
-        int type_;
-
-        Foam::vector displacementSum_;
-
-
-public:
-
-    enum pointTypes
-    {
-        NEAR_BOUNDARY_POINT = -4,
-        INTERNAL_POINT      = -3,
-        MIRROR_POINT        = -2,
-        FAR_POINT           = -1
-    };
-
-    typedef typename Vb::Vertex_handle      Vertex_handle;
-    typedef typename Vb::Cell_handle        Cell_handle;
-    typedef typename Vb::Point              Point;
-
-    template<typename TDS2>
-    struct Rebind_TDS
-    {
-        typedef typename Vb::template Rebind_TDS<TDS2>::Other   Vb2;
-        typedef indexedVertex<Gt,Vb2>                           Other;
-    };
-
-    indexedVertex()
-    :
-        Vb(),
-        index_(INTERNAL_POINT),
-        type_(INTERNAL_POINT),
-        displacementSum_(Foam::vector::zero)
-    {}
-
-    indexedVertex(const Point& p)
-    :
-        Vb(p),
-        index_(INTERNAL_POINT),
-        type_(INTERNAL_POINT),
-        displacementSum_(Foam::vector::zero)
-    {}
-
-    indexedVertex(const Point& p, Cell_handle f)
-    :
-        Vb(f, p),
-        index_(INTERNAL_POINT),
-        type_(INTERNAL_POINT),
-        displacementSum_(Foam::vector::zero)
-    {}
-
-    indexedVertex(Cell_handle f)
-    :
-        Vb(f),
-        index_(INTERNAL_POINT),
-        type_(INTERNAL_POINT),
-        displacementSum_(Foam::vector::zero)
-    {}
-
-
-    int& index()
-    {
-        return index_;
-    }
-
-    int index() const
-    {
-        return index_;
-    }
-
-
-    int& type()
-    {
-        return type_;
-    }
-
-    int type() const
-    {
-        return type_;
-    }
-
-
-    Foam::vector& displacementSum()
-    {
-        return displacementSum_;
-    }
-
-    const Foam::vector& displacementSum() const
-    {
-        return displacementSum_;
-    }
-
-    //- Is point a far-point
-    inline bool farPoint() const
-    {
-        return type_ == FAR_POINT;
-    }
-
-    //- Is point internal, i.e. not on boundary
-    inline bool internalPoint() const
-    {
-        return type_ <= INTERNAL_POINT;
-    }
-
-    //- Is point internal and near the boundary
-    inline bool nearBoundary() const
-    {
-        return type_ == NEAR_BOUNDARY_POINT;
-    }
-
-    //- Set the point to be near the boundary
-    inline void setNearBoundary()
-    {
-        type_ = NEAR_BOUNDARY_POINT;
-    }
-
-    //- Is point a mirror point
-    inline bool mirrorPoint() const
-    {
-        return type_ == MIRROR_POINT;
-    }
-
-    //- Either master or slave of pointPair.
-    inline bool pairPoint() const
-    {
-        return type_ >= 0;
-    }
-
-    //- Master of a pointPair is the lowest numbered one.
-    inline bool ppMaster() const
-    {
-        if (type_ > index_)
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    //- Slave of a pointPair is the highest numbered one.
-    inline bool ppSlave() const
-    {
-        if (type_ >= 0 && type_ < index_)
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    //- Either original internal point or master of pointPair.
-    inline bool internalOrBoundaryPoint() const
-    {
-        return internalPoint() || ppMaster();
-    }
-
-    //- Is point near the boundary or part of the boundary definition
-    inline bool nearOrOnBoundary() const
-    {
-        return pairPoint() || mirrorPoint() || nearBoundary();
-    }
-
-    //- Do the two given vertices consitute a boundary point-pair
-    inline friend bool pointPair
-    (
-        const indexedVertex& v0,
-        const indexedVertex& v1
-    )
-    {
-        return v0.index_ == v1.type_ || v1.index_ == v0.type_;
-    }
-
-    //- Do the three given vertices consitute a boundary triangle
-    inline friend bool boundaryTriangle
-    (
-        const indexedVertex& v0,
-        const indexedVertex& v1,
-        const indexedVertex& v2
-    )
-    {
-        return (v0.pairPoint() && pointPair(v1, v2))
-            || (v1.pairPoint() && pointPair(v2, v0))
-            || (v2.pairPoint() && pointPair(v0, v1));
-    }
-
-    //- Do the three given vertices consitute an outside triangle
-    inline friend bool outsideTriangle
-    (
-        const indexedVertex& v0,
-        const indexedVertex& v1,
-        const indexedVertex& v2
-    )
-    {
-        return (v0.farPoint() || v0.ppSlave())
-            || (v1.farPoint() || v1.ppSlave())
-            || (v2.farPoint() || v2.ppSlave());
-    }
-
-
-    // inline void operator=(const Triangulation::Finite_vertices_iterator vit)
-    // {
-    //     Vb::operator=indexedVertex(vit->point());
-
-    //     this->index_ = vit->index();
-
-    //     this->type_ = vit->type();
-
-    //     this->displacementSum_ = vit->displacementSum();
-    // }
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace CGAL
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/calcDualMesh.C b/applications/utilities/mesh/generation/CV3DMesher/calcDualMesh.C
deleted file mode 100644
index 3e3ceae2479..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/calcDualMesh.C
+++ /dev/null
@@ -1,642 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV3D.H"
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-void Foam::CV3D::calcDualMesh
-(
-    pointField& points,
-    faceList& faces,
-    labelList& owner,
-    labelList& neighbour,
-    wordList& patchNames,
-    labelList& patchSizes,
-    labelList& patchStarts
-)
-{
-    // ~~~~~~~~~~~ removing short edges by indexing dual vertices ~~~~~~~~~~~~~~
-
-    for
-    (
-        Triangulation::Finite_cells_iterator cit = finite_cells_begin();
-        cit != finite_cells_end();
-        ++cit
-    )
-    {
-        cit->cellIndex() = -1;
-    }
-
-    points.setSize(number_of_cells());
-
-    label dualVerti = 0;
-
-    // Scanning by number of short (dual) edges (nSE) attached to the
-    // circumcentre of each Delaunay tet.  A Delaunay tet may only have four
-    // dual edges emanating from its circumcentre, assigning positions and
-    // indices to those with 4 short edges attached first, then >= 3, then >= 2
-    // etc.
-    for (label nSE = 4; nSE >= 0; nSE--)
-    {
-        Info<< nl << "Scanning for dual vertices with >= "
-            << nSE
-            << " short edges attached." << endl;
-
-        for
-        (
-            Triangulation::Finite_cells_iterator cit = finite_cells_begin();
-            cit != finite_cells_end();
-            ++cit
-        )
-        {
-            // If the Delaunay tet has an index already then it has either
-            // evaluated itself and taken action or has had its index dictated
-            // by a neighbouring tet with more short edges attached.
-
-            if (cit->cellIndex() == -1)
-            {
-                point dualVertex = topoint(dual(cit));
-
-                label shortEdges = 0;
-
-                List<bool> edgeIsShort(4, false);
-
-                List<bool> neighbourAlreadyIndexed(4, false);
-
-                // Loop over the four facets of the Delaunay tet
-                for (label f = 0; f < 4; f++)
-                {
-                    // Check that at least one of the vertices of the facet is
-                    // an internal or boundary point
-                    if
-                    (
-                        cit->vertex(vertex_triple_index(f, 0))->
-                        internalOrBoundaryPoint()
-                     || cit->vertex(vertex_triple_index(f, 1))->
-                        internalOrBoundaryPoint()
-                     || cit->vertex(vertex_triple_index(f, 2))->
-                        internalOrBoundaryPoint()
-                    )
-                    {
-                        point neighDualVertex;
-
-                        label cNI = cit->neighbor(f)->cellIndex();
-
-                        if (cNI == -1)
-                        {
-                            neighDualVertex = topoint(dual(cit->neighbor(f)));
-                        }
-                        else
-                        {
-                            neighDualVertex = points[cNI];
-                        }
-
-                        if
-                        (
-                            magSqr(dualVertex - neighDualVertex)
-                            < tols_.minEdgeLen2
-                        )
-                        {
-                            edgeIsShort[f] = true;
-
-                            if (cNI > -1)
-                            {
-                                neighbourAlreadyIndexed[f] = true;
-                            }
-
-                            shortEdges++;
-                        }
-                    }
-                }
-
-                if (nSE == 0 && shortEdges == 0)
-                {
-                    // Final iteration and no short edges are found, index
-                    // remaining dual vertices.
-
-                    if
-                    (
-                        cit->vertex(0)->internalOrBoundaryPoint()
-                     || cit->vertex(1)->internalOrBoundaryPoint()
-                     || cit->vertex(2)->internalOrBoundaryPoint()
-                     || cit->vertex(3)->internalOrBoundaryPoint()
-                    )
-                    {
-                        cit->cellIndex() = dualVerti;
-                        points[dualVerti] = dualVertex;
-                        dualVerti++;
-                    }
-                }
-                else if
-                (
-                    shortEdges >= nSE
-                )
-                {
-                    // Info<< neighbourAlreadyIndexed << ' '
-                    //     << edgeIsShort << endl;
-
-                    label numUnindexedNeighbours = 1;
-
-                    for (label f = 0; f < 4; f++)
-                    {
-                        if (edgeIsShort[f] && !neighbourAlreadyIndexed[f])
-                        {
-                            dualVertex += topoint(dual(cit->neighbor(f)));
-
-                            numUnindexedNeighbours++;
-                        }
-                    }
-
-                    dualVertex /= numUnindexedNeighbours;
-
-                    label nearestExistingIndex = -1;
-
-                    point nearestIndexedNeighbourPos = vector::zero;
-
-                    scalar minDistSqrToNearestIndexedNeighbour = VGREAT;
-
-                    for (label f = 0; f < 4; f++)
-                    {
-                        if (edgeIsShort[f] && neighbourAlreadyIndexed[f])
-                        {
-                            label cNI = cit->neighbor(f)->cellIndex();
-
-                            point indexedNeighbourPos = points[cNI];
-
-                            if
-                            (
-                                magSqr(indexedNeighbourPos - dualVertex)
-                                < minDistSqrToNearestIndexedNeighbour
-                            )
-                            {
-                                nearestExistingIndex = cNI;
-
-                                nearestIndexedNeighbourPos =
-                                indexedNeighbourPos;
-
-                                minDistSqrToNearestIndexedNeighbour =
-                                magSqr(indexedNeighbourPos - dualVertex);
-                            }
-                        }
-                    }
-
-                    if
-                    (
-                        nearestExistingIndex > -1
-                     && minDistSqrToNearestIndexedNeighbour < tols_.minEdgeLen2
-                    )
-                    {
-                        points[nearestExistingIndex] =
-                        0.5*(dualVertex + nearestIndexedNeighbourPos);
-
-                        for (label f = 0; f < 4; f++)
-                        {
-                            if (edgeIsShort[f] && !neighbourAlreadyIndexed[f])
-                            {
-                                cit->neighbor(f)->cellIndex() =
-                                nearestExistingIndex;
-                            }
-                        }
-
-                        cit->cellIndex() = nearestExistingIndex;
-                    }
-                    else
-                    {
-                        for (label f = 0; f < 4; f++)
-                        {
-                            if (edgeIsShort[f] && !neighbourAlreadyIndexed[f])
-                            {
-                                cit->neighbor(f)->cellIndex() = dualVerti;
-                            }
-                        }
-
-                        cit->cellIndex() = dualVerti;
-
-                        points[dualVerti] = dualVertex;
-
-                        dualVerti++;
-                    }
-                }
-            }
-        }
-    }
-
-    points.setSize(dualVerti);
-
-    // ~~~~~~~~~~~~~~~~~~~~~~~~~ dual cell indexing ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    // assigns an index to the Delaunay vertices which will be the dual cell
-    // index used for owner neighbour assignment.
-
-    // The indices of the points are reset which destroys the point-pair
-    // matching, so the type of each vertex are reset to avoid any ambiguity.
-
-    label dualCelli = 0;
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        ++vit
-    )
-    {
-        if (vit->internalOrBoundaryPoint())
-        {
-            vit->type() = Vb::INTERNAL_POINT;
-            vit->index() = dualCelli;
-            dualCelli++;
-        }
-        else
-        {
-            vit->type() = Vb::FAR_POINT;
-            vit->index() = -1;
-        }
-    }
-
-    // ~~~~~~~~~~~~ dual face and owner neighbour construction ~~~~~~~~~~~~~~~~~
-
-    label nPatches = qSurf_.patches().size() + 1;
-
-    label defaultPatchIndex = qSurf_.patches().size();
-
-    patchNames.setSize(nPatches);
-
-    const geometricSurfacePatchList& surfacePatches = qSurf_.patches();
-
-    forAll(surfacePatches, sP)
-    {
-        patchNames[sP] = surfacePatches[sP].name();
-    }
-
-    patchNames[defaultPatchIndex] = "CV3D_default_patch";
-
-    patchSizes.setSize(nPatches);
-
-    patchStarts.setSize(nPatches);
-
-    List<DynamicList<face> > patchFaces(nPatches, DynamicList<face>(0));
-
-    List<DynamicList<label> > patchOwners(nPatches, DynamicList<label>(0));
-
-    faces.setSize(number_of_edges());
-
-    owner.setSize(number_of_edges());
-
-    neighbour.setSize(number_of_edges());
-
-    label dualFacei = 0;
-
-    for
-    (
-        Triangulation::Finite_edges_iterator eit = finite_edges_begin();
-        eit != finite_edges_end();
-        ++eit
-    )
-    {
-        Cell_handle c = eit->first;
-        Vertex_handle vA = c->vertex(eit->second);
-        Vertex_handle vB = c->vertex(eit->third);
-
-        if
-        (
-            vA->internalOrBoundaryPoint()
-         || vB->internalOrBoundaryPoint()
-        )
-        {
-            Cell_circulator ccStart = incident_cells(*eit);
-            Cell_circulator cc1 = ccStart;
-            Cell_circulator cc2 = cc1;
-
-            // Advance the second circulator so that it always stays on the next
-            // cell around the edge;
-            cc2++;
-
-            DynamicList<label> verticesOnFace;
-
-            do
-            {
-                label cc1I = cc1->cellIndex();
-
-                label cc2I = cc2->cellIndex();
-
-
-                if (cc1I < 0 || cc2I < 0)
-                {
-                    FatalErrorIn("Foam::CV3D::calcDualMesh")
-                    << "Dual face uses circumcenter defined by a "
-                        << "Delaunay tetrahedron with no internal "
-                        << "or boundary points."
-                        << exit(FatalError);
-                }
-
-                if (cc1I != cc2I)
-                {
-                    verticesOnFace.append(cc1I);
-                }
-
-                cc1++;
-
-                cc2++;
-            } while (cc1 != ccStart);
-
-            verticesOnFace.shrink();
-
-            if (verticesOnFace.size() >= 3)
-            {
-                face newDualFace(verticesOnFace);
-
-                label dcA = vA->index();
-
-                if (!vA->internalOrBoundaryPoint())
-                {
-                    dcA = -1;
-                }
-
-                label dcB = vB->index();
-
-                if (!vB->internalOrBoundaryPoint())
-                {
-                    dcB = -1;
-                }
-
-                label dcOwn = -1;
-                label dcNei = -1;
-
-                if (dcA == -1 && dcB == -1)
-                {
-                    FatalErrorIn("calcDualMesh")
-                    << "Attempting to create a face joining "
-                        << "two external dual cells "
-                        << exit(FatalError);
-                }
-                else if (dcA == -1 || dcB == -1)
-                {
-                    // boundary face, find which is the owner
-
-                    if (dcA == -1)
-                    {
-                        dcOwn = dcB;
-
-                        // reverse face order to correctly orientate normal
-                        reverse(newDualFace);
-                    }
-                    else
-                    {
-                        dcOwn = dcA;
-                    }
-
-                    // Find which patch this face is on by finding the
-                    // intersection with the surface of the Delaunay edge
-                    // generating the face and identify the region of the
-                    // intersection.
-
-                    point ptA = topoint(vA->point());
-
-                    point ptB = topoint(vB->point());
-
-                    pointIndexHit pHit = qSurf_.tree().findLineAny(ptA, ptB);
-
-                    label patchIndex = qSurf_[pHit.index()].region();
-
-                    if (patchIndex == -1)
-                    {
-                        patchIndex = defaultPatchIndex;
-
-                        WarningIn("Foam::CV3D::calcDualMesh.C")
-                            << "Dual face found that is not on a surface "
-                            << "patch. Adding to CV3D_default_patch."
-                            << endl;
-                    }
-
-                    patchFaces[patchIndex].append(newDualFace);
-                    patchOwners[patchIndex].append(dcOwn);
-                }
-                else
-                {
-                    // internal face, find the lower cell to be the owner
-
-                    if (dcB > dcA)
-                    {
-                        dcOwn = dcA;
-                        dcNei = dcB;
-                    }
-                    else
-                    {
-                        dcOwn = dcB;
-                        dcNei = dcA;
-
-                        // reverse face order to correctly orientate normal
-                        reverse(newDualFace);
-                    }
-
-                    faces[dualFacei] = newDualFace;
-
-                    owner[dualFacei] = dcOwn;
-
-                    neighbour[dualFacei] = dcNei;
-
-                    dualFacei++;
-                }
-            }
-            // else
-            // {
-            //     Info<< verticesOnFace.size()
-            //         << " size face not created." << endl;
-            // }
-        }
-    }
-
-    label nInternalFaces = dualFacei;
-
-    faces.setSize(nInternalFaces);
-
-    owner.setSize(nInternalFaces);
-
-    neighbour.setSize(nInternalFaces);
-
-    // ~~~~~~~~ sort owner, reordinging neighbour and faces to match ~~~~~~~~~~~
-    // two stage sort for upper triangular order:  sort by owner first, then for
-    // each block of owners sort by neighbour
-
-    labelList sortingIndices;
-
-    // Stage 1
-
-    {
-        SortableList<label> sortedOwner(owner);
-
-        sortingIndices = sortedOwner.indices();
-    }
-
-    {
-        labelList copyOwner(owner.size());
-
-        forAll(sortingIndices, sI)
-        {
-            copyOwner[sI] = owner[sortingIndices[sI]];
-        }
-
-        owner = copyOwner;
-    }
-
-    {
-        labelList copyNeighbour(neighbour.size());
-
-        forAll(sortingIndices, sI)
-        {
-            copyNeighbour[sI] = neighbour[sortingIndices[sI]];
-        }
-
-        neighbour = copyNeighbour;
-    }
-
-    {
-        faceList copyFaces(faces.size());
-
-        forAll(sortingIndices, sI)
-        {
-            copyFaces[sI] = faces[sortingIndices[sI]];
-        }
-
-        faces = copyFaces;
-    }
-
-    // Stage 2
-
-    sortingIndices = -1;
-
-    DynamicList<label> ownerCellJumps;
-
-    // Force first owner entry to be a jump
-    ownerCellJumps.append(0);
-
-    for (label o = 1; o < owner.size(); o++)
-    {
-        if (owner[o] > owner[o-1])
-        {
-            ownerCellJumps.append(o);
-        }
-    }
-
-    ownerCellJumps.shrink();
-
-    forAll(ownerCellJumps, oCJ)
-    {
-        label start = ownerCellJumps[oCJ];
-
-        label length;
-
-        if (oCJ == ownerCellJumps.size() - 1)
-        {
-            length = owner.size() - start;
-        }
-        else
-        {
-            length = ownerCellJumps[oCJ + 1] - start;
-        }
-
-        SubList<label> neighbourBlock(neighbour, length, start);
-
-        SortableList<label> sortedNeighbourBlock(neighbourBlock);
-
-        forAll(sortedNeighbourBlock, sNB)
-        {
-            sortingIndices[start + sNB] =
-                sortedNeighbourBlock.indices()[sNB] + start;
-        }
-    }
-
-    // Perform sort
-
-    {
-        labelList copyOwner(owner.size());
-
-        forAll(sortingIndices, sI)
-        {
-            copyOwner[sI] = owner[sortingIndices[sI]];
-        }
-
-        owner = copyOwner;
-    }
-
-    {
-        labelList copyNeighbour(neighbour.size());
-
-        forAll(sortingIndices, sI)
-        {
-            copyNeighbour[sI] = neighbour[sortingIndices[sI]];
-        }
-
-        neighbour = copyNeighbour;
-    }
-
-    {
-        faceList copyFaces(faces.size());
-
-        forAll(sortingIndices, sI)
-        {
-            copyFaces[sI] = faces[sortingIndices[sI]];
-        }
-
-        faces = copyFaces;
-    }
-
-    // ~~~~~~~~ add patch information ~~~~~~~~~~~
-
-    label nBoundaryFaces = 0;
-
-    forAll(patchFaces, p)
-    {
-        patchFaces[p].shrink();
-
-        patchOwners[p].shrink();
-
-        patchSizes[p] = patchFaces[p].size();
-
-        patchStarts[p] = nInternalFaces + nBoundaryFaces;
-
-        nBoundaryFaces += patchSizes[p];
-    }
-
-    faces.setSize(nInternalFaces + nBoundaryFaces);
-
-    owner.setSize(nInternalFaces + nBoundaryFaces);
-
-    forAll(patchFaces, p)
-    {
-        forAll(patchFaces[p], f)
-        {
-            faces[dualFacei] = patchFaces[p][f];
-
-            owner[dualFacei] = patchOwners[p][f];
-
-            dualFacei++;
-        }
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/controls.C b/applications/utilities/mesh/generation/CV3DMesher/controls.C
deleted file mode 100644
index 6675af0dfe1..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/controls.C
+++ /dev/null
@@ -1,68 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV3D.H"
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::CV3D::controls::controls(const IOdictionary& controlDict)
-:
-    relaxationFactorStart
-    (
-        readScalar(controlDict.lookup("relaxationFactorStart"))
-    ),
-    relaxationFactorEnd(readScalar(controlDict.lookup("relaxationFactorEnd"))),
-    minCellSize(readScalar(controlDict.lookup("minCellSize"))),
-    minCellSize2(Foam::sqr(minCellSize)),
-    includedAngle(readScalar(controlDict.lookup("includedAngle"))),
-    maxQuadAngle(readScalar(controlDict.lookup("maxQuadAngle"))),
-    squares(controlDict.lookup("squares")),
-    nearWallAlignedDist
-    (
-        readScalar(controlDict.lookup("nearWallAlignedDist"))*minCellSize
-    ),
-    nearWallAlignedDist2(Foam::sqr(nearWallAlignedDist)),
-    relaxOrientation(controlDict.lookup("relaxOrientation")),
-    insertSurfaceNearestPointPairs
-    (
-        controlDict.lookup("insertSurfaceNearestPointPairs")
-    ),
-    mirrorPoints(controlDict.lookup("mirrorPoints")),
-    insertSurfaceNearPointPairs
-    (
-        controlDict.lookup("insertSurfaceNearPointPairs")
-    ),
-    writeInitialTriangulation(controlDict.lookup("writeInitialTriangulation")),
-    writeFeatureTriangulation(controlDict.lookup("writeFeatureTriangulation")),
-    writeNearestTriangulation(controlDict.lookup("writeNearestTriangulation")),
-    writeInsertedPointPairs(controlDict.lookup("writeInsertedPointPairs")),
-    writeFinalTriangulation(controlDict.lookup("writeFinalTriangulation")),
-    randomiseInitialGrid(controlDict.lookup("randomiseInitialGrid")),
-    randomPerturbation(readScalar(controlDict.lookup("randomPerturbation")))
-{}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/indexedCell.H b/applications/utilities/mesh/generation/CV3DMesher/indexedCell.H
deleted file mode 100644
index d1810183c9d..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/indexedCell.H
+++ /dev/null
@@ -1,154 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Class
-    indexedCell
-
-Description
-    An indexed form of CGAL::Triangulation_cell_base_3<K> used to keep
-    track of the vertices in the triangulation.
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef indexedCell_H
-#define indexedCell_H
-
-#include <CGAL/Triangulation_3.h>
-#include "indexedVertex.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace CGAL
-{
-
-/*---------------------------------------------------------------------------*\
-                       Class indexedCell Declaration
-\*---------------------------------------------------------------------------*/
-
-template<class Gt, class Cb=CGAL::Triangulation_cell_base_3<Gt> >
-class indexedCell
-:
-    public Cb
-{
-    // Private data
-
-        //- The index for this triangle Cell
-        //  -1: triangle and changed and associated data needs updating
-        // >=0: index of cells, set by external update algorithm
-        int index_;
-
-
-public:
-
-    enum cellTypes
-    {
-        UNCHANGED           = 0,
-        CHANGED             = -1,
-        SAVE_CHANGED        = -2
-    };
-
-    typedef typename Cb::Vertex_handle                   Vertex_handle;
-    typedef typename Cb::Cell_handle                     Cell_handle;
-
-    template < typename TDS2 >
-    struct Rebind_TDS
-    {
-        typedef typename Cb::template Rebind_TDS<TDS2>::Other Cb2;
-        typedef indexedCell<Gt, Cb2>  Other;
-    };
-
-
-    indexedCell()
-    :
-        Cb(),
-        index_(CHANGED)
-    {}
-
-    indexedCell
-    (
-        Vertex_handle v0, Vertex_handle v1, Vertex_handle v2, Vertex_handle v3
-    )
-    :
-        Cb(v0, v1, v2, v3),
-        index_(CHANGED)
-    {}
-
-    indexedCell
-    (
-        Vertex_handle v0,
-        Vertex_handle v1,
-        Vertex_handle v2,
-        Vertex_handle v3,
-        Cell_handle n0,
-        Cell_handle n1,
-        Cell_handle n2,
-        Cell_handle n3
-    )
-    :
-        Cb(v0, v1, v2, v3, n0, n1, n2, n3),
-        index_(CHANGED)
-    {}
-
-    void set_vertex(int i, Vertex_handle v)
-    {
-        index_ = CHANGED;
-        Cb::set_vertex(i, v);
-    }
-
-    void set_vertices()
-    {
-        index_ = CHANGED;
-        Cb::set_vertices();
-    }
-
-    void set_vertices
-    (
-        Vertex_handle v0, Vertex_handle v1, Vertex_handle v2, Vertex_handle v3
-    )
-    {
-        index_ = CHANGED;
-        Cb::set_vertices(v0, v1, v2, v3);
-    }
-
-    int& cellIndex()
-    {
-        return index_;
-    }
-
-    int cellIndex() const
-    {
-        return index_;
-    }
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace CGAL
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/indexedVertex.H b/applications/utilities/mesh/generation/CV3DMesher/indexedVertex.H
deleted file mode 100644
index 1eecba48775..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/indexedVertex.H
+++ /dev/null
@@ -1,294 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Class
-    indexedVertex
-
-Description
-    An indexed form of CGAL::Triangulation_vertex_base_3<K> used to keep
-    track of the vertices in the triangulation.
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef indexedVertex_H
-#define indexedVertex_H
-
-#include <CGAL/Triangulation_3.h>
-#include "List.H"
-#include "vector.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace CGAL
-{
-
-/*---------------------------------------------------------------------------*\
-                       Class indexedVertex Declaration
-\*---------------------------------------------------------------------------*/
-
-template<class Gt, class Vb=CGAL::Triangulation_vertex_base_3<Gt> >
-class indexedVertex
-:
-    public Vb
-{
-    // Private data
-
-        //- The index for this triangle vertex
-        int index_;
-
-        //- type of pair-point :
-        //  NEAR_BOUNDARY_POINT : internal near boundary point.
-        //  INTERNAL_POINT      : internal point.
-        //  FAR_POINT           : far-point.
-        //  >= 0                : part of point-pair. Index of other point.
-        //                        Lowest numbered is inside one (master).
-        int type_;
-
-        Foam::List<Foam::vector> alignmentDirections_;
-
-
-public:
-
-    enum pointTypes
-    {
-        NEAR_BOUNDARY_POINT = -4,
-        INTERNAL_POINT      = -3,
-        MIRROR_POINT        = -2,
-        FAR_POINT           = -1
-    };
-
-    typedef typename Vb::Vertex_handle      Vertex_handle;
-    typedef typename Vb::Cell_handle        Cell_handle;
-    typedef typename Vb::Point              Point;
-
-    template<typename TDS2>
-    struct Rebind_TDS
-    {
-        typedef typename Vb::template Rebind_TDS<TDS2>::Other   Vb2;
-        typedef indexedVertex<Gt,Vb2>                           Other;
-    };
-
-    indexedVertex()
-    :
-        Vb(),
-        index_(INTERNAL_POINT),
-        type_(INTERNAL_POINT),
-        alignmentDirections_(0)
-    {}
-
-    indexedVertex(const Point& p)
-    :
-        Vb(p),
-        index_(INTERNAL_POINT),
-        type_(INTERNAL_POINT),
-        alignmentDirections_(0)
-    {}
-
-    indexedVertex(const Point& p, Cell_handle f)
-    :
-        Vb(f, p),
-        index_(INTERNAL_POINT),
-        type_(INTERNAL_POINT),
-        alignmentDirections_(0)
-    {}
-
-    indexedVertex(Cell_handle f)
-    :
-        Vb(f),
-        index_(INTERNAL_POINT),
-        type_(INTERNAL_POINT),
-        alignmentDirections_(0)
-    {}
-
-
-    int& index()
-    {
-        return index_;
-    }
-
-    int index() const
-    {
-        return index_;
-    }
-
-
-    int& type()
-    {
-        return type_;
-    }
-
-    int type() const
-    {
-        return type_;
-    }
-
-    Foam::List<Foam::vector>& alignmentDirections()
-    {
-        return alignmentDirections_;
-    }
-
-    const Foam::List<Foam::vector>& alignmentDirections() const
-    {
-        return alignmentDirections_;
-    }
-
-    inline bool uninitialised() const
-    {
-        return type_ == INTERNAL_POINT && index_ == INTERNAL_POINT;
-    }
-
-    //- Is point a far-point
-    inline bool farPoint() const
-    {
-        return type_ == FAR_POINT;
-    }
-
-    //- Is point internal, i.e. not on boundary
-    inline bool internalPoint() const
-    {
-        return type_ <= INTERNAL_POINT;
-    }
-
-    //- Is point internal and near the boundary
-    inline bool nearBoundary() const
-    {
-        return type_ == NEAR_BOUNDARY_POINT;
-    }
-
-    //- Set the point to be near the boundary
-    inline void setNearBoundary()
-    {
-        type_ = NEAR_BOUNDARY_POINT;
-    }
-
-    //- Is point a mirror point
-    inline bool mirrorPoint() const
-    {
-        return type_ == MIRROR_POINT;
-    }
-
-    //- Either master or slave of pointPair.
-    inline bool pairPoint() const
-    {
-        return type_ >= 0;
-    }
-
-    //- Master of a pointPair is the lowest numbered one.
-    inline bool ppMaster() const
-    {
-        if (type_ > index_)
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    //- Slave of a pointPair is the highest numbered one.
-    inline bool ppSlave() const
-    {
-        if (type_ >= 0 && type_ < index_)
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    //- Either original internal point or master of pointPair.
-    inline bool internalOrBoundaryPoint() const
-    {
-        return internalPoint() || ppMaster();
-    }
-
-    //- Is point near the boundary or part of the boundary definition
-    inline bool nearOrOnBoundary() const
-    {
-        return pairPoint() || mirrorPoint() || nearBoundary();
-    }
-
-    //- Do the two given vertices consitute a boundary point-pair
-    inline friend bool pointPair
-    (
-        const indexedVertex& v0,
-        const indexedVertex& v1
-    )
-    {
-        return v0.index_ == v1.type_ || v1.index_ == v0.type_;
-    }
-
-    //- Do the three given vertices consitute a boundary triangle
-    inline friend bool boundaryTriangle
-    (
-        const indexedVertex& v0,
-        const indexedVertex& v1,
-        const indexedVertex& v2
-    )
-    {
-        return (v0.pairPoint() && pointPair(v1, v2))
-            || (v1.pairPoint() && pointPair(v2, v0))
-            || (v2.pairPoint() && pointPair(v0, v1));
-    }
-
-    //- Do the three given vertices consitute an outside triangle
-    inline friend bool outsideTriangle
-    (
-        const indexedVertex& v0,
-        const indexedVertex& v1,
-        const indexedVertex& v2
-    )
-    {
-        return (v0.farPoint() || v0.ppSlave())
-            || (v1.farPoint() || v1.ppSlave())
-            || (v2.farPoint() || v2.ppSlave());
-    }
-
-
-    // inline void operator=(const Triangulation::Finite_vertices_iterator vit)
-    // {
-    //     Vb::operator=indexedVertex(vit->point());
-
-    //     this->index_ = vit->index();
-
-    //     this->type_ = vit->type();
-
-    //     this->displacementSum_ = vit->displacementSum();
-    // }
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace CGAL
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/insertBoundaryConformPointPairs.C b/applications/utilities/mesh/generation/CV3DMesher/insertBoundaryConformPointPairs.C
deleted file mode 100644
index d57cc0d02cc..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/insertBoundaryConformPointPairs.C
+++ /dev/null
@@ -1,56 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV3D.H"
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-void Foam::CV3D::markNearBoundaryPoints()
-{
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        vit++
-    )
-    {
-        if (vit->internalPoint())
-        {
-            point vert(topoint(vit->point()));
-
-            pointIndexHit pHit =
-                qSurf_.tree().findNearest(vert, 4*controls_.minCellSize2);
-
-            if (pHit.hit())
-            {
-                vit->setNearBoundary();
-            }
-        }
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/insertFeaturePoints.C b/applications/utilities/mesh/generation/CV3DMesher/insertFeaturePoints.C
deleted file mode 100644
index cf4bee2b1ed..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/insertFeaturePoints.C
+++ /dev/null
@@ -1,615 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV3D.H"
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-void Foam::CV3D::insertFeaturePoints()
-{
-    Info<< nl << "Inserting feature points" << endl;
-
-    const edgeList& edges = qSurf_.edges();
-    const pointField& localPts = qSurf_.localPoints();
-
-    const labelList& featPoints = qSurf_.features().featurePoints();
-    labelListList featPointFeatEdges = qSurf_.featurePointFeatureEdges();
-
-    scalar planeErrorAngle = 0.1*(180.0 - controls_.includedAngle);
-
-    scalar planeErrorAngleCos =
-    cos(mathematicalConstant::pi*planeErrorAngle/180.0);
-
-    forAll(featPoints, i)
-    {
-        label ptI = featPoints[i];
-        const point& featPt = localPts[ptI];
-
-        Info<< nl <<"Feature at " << featPt << endl;
-
-        const labelList& featEdges = featPointFeatEdges[i];
-
-        DynamicList<label> convexEdges(0);
-        DynamicList<label> concaveEdges(0);
-
-        List<vector> planeNormals(2*featEdges.size());
-
-        // Classify the edges around the feature point.
-        forAll(featEdges, fE)
-        {
-            label edgeI = featEdges[fE];
-
-            // Pick up the two faces adjacent to the feature edge
-            const labelList& eFaces = qSurf_.edgeFaces()[edgeI];
-
-            label faceA = eFaces[0];
-            vector nA = qSurf_.faceNormals()[faceA];
-
-            label faceB = eFaces[1];
-            vector nB = qSurf_.faceNormals()[faceB];
-
-            point faceAVert =
-                localPts[triSurfaceTools::oppositeVertex(qSurf_, faceA, edgeI)];
-
-            // Determine convex or concave angle
-            if (((faceAVert - featPt) & nB) < 0)
-            {
-                // Convex feature edge
-                convexEdges.append(edgeI);
-            }
-            else
-            {
-                // Concave feature edge
-                concaveEdges.append(edgeI);
-            }
-
-            planeNormals[2*fE] = nA;
-            planeNormals[2*fE + 1] = nB;
-        }
-
-        convexEdges.shrink();
-        concaveEdges.shrink();
-
-        // Identify the normals of the faces attached to feature edges to
-        // identify the unique planes to be reconstructed.  The triangulated
-        // surface will usually not mean that two feature edges that should
-        // bound a plane are attached to the same face.
-
-        List<vector> uniquePlaneNormals(featEdges.size());
-
-        List<bool> planeMatchedStatus(2*featEdges.size(), bool(false));
-
-        label uniquePlaneNormalI = 0;
-
-        // Examine the plane normals to identify unique planes.
-        forAll(planeNormals, nA)
-        {
-            const vector& normalA = planeNormals[nA];
-
-            scalar maxNormalDotProduct = -SMALL;
-
-            label matchingNormal = -1;
-
-            if (!planeMatchedStatus[nA])
-            {
-                forAll(planeNormals, nB)
-                {
-                    if (nA == nB)
-                    {
-                        continue;
-                    }
-
-                    if (!planeMatchedStatus[nB])
-                    {
-                        const vector& normalB = planeNormals[nB];
-
-                        scalar normalDotProduct = normalA & normalB;
-
-                        if (normalDotProduct > maxNormalDotProduct)
-                        {
-                            maxNormalDotProduct = normalDotProduct;
-
-                            matchingNormal = nB;
-                        }
-                    }
-                }
-            }
-
-            if (matchingNormal >= 0)
-            {
-                if (maxNormalDotProduct < planeErrorAngleCos)
-                {
-                    FatalErrorIn("insertFeaturePoints")
-                        << "Matching planes are not similar enough "
-                        << "at point located at "
-                        << featPt << nl
-                        << exit(FatalError);
-                }
-
-                const vector& normalB = planeNormals[matchingNormal];
-
-                uniquePlaneNormals[uniquePlaneNormalI] =
-                (normalA + normalB)/(mag(normalA + normalB) + VSMALL);
-
-                uniquePlaneNormalI++;
-
-                planeMatchedStatus[nA] = true;
-                planeMatchedStatus[matchingNormal] = true;
-            }
-        }
-
-        if (concaveEdges.size() == 0)
-        {
-            Info<< tab << "Convex feature, "
-                << convexEdges.size() << " edges." << endl;
-
-            vector cornerNormal = sum(uniquePlaneNormals);
-            cornerNormal /= mag(cornerNormal);
-
-            point internalPt =  featPt - tols_.ppDist*cornerNormal;
-            label internalPtIndex =
-            insertPoint(internalPt, number_of_vertices() + 1);
-
-            forAll (uniquePlaneNormals, uPN)
-            {
-                const vector& n = uniquePlaneNormals[uPN];
-
-                plane planeN = plane(featPt, n);
-
-                point externalPt =
-                internalPt + 2.0 * planeN.distance(internalPt) * n;
-
-                insertPoint(externalPt, internalPtIndex);
-            }
-
-        }
-        else if (convexEdges.size() == 0)
-        {
-            Info<< tab << "Concave feature, "
-                << concaveEdges.size() << " edges." << endl;
-
-            vector cornerNormal = sum(uniquePlaneNormals);
-            cornerNormal /= mag(cornerNormal);
-
-            point externalPt = featPt +  tols_.ppDist*cornerNormal;
-
-            label externalPtIndex = number_of_vertices() + concaveEdges.size();
-
-            label internalPtIndex = -1;
-
-            forAll (uniquePlaneNormals, uPN)
-            {
-                const vector& n = uniquePlaneNormals[uPN];
-
-                plane planeN = plane(featPt, n);
-
-                point internalPt = externalPt
-                - 2.0 * planeN.distance(externalPt) * n;
-
-                internalPtIndex = insertPoint(internalPt, externalPtIndex);
-            }
-
-            insertPoint(externalPt,internalPtIndex);
-        }
-        else
-        {
-            Info<< tab << "Mixed feature: convex, concave = "
-                << convexEdges.size() << ", " << concaveEdges.size() << endl;
-
-            if (convexEdges.size() + concaveEdges.size() > 3)
-            {
-                Info<< concaveEdges.size() + convexEdges.size()
-                    << " mixed edge feature."
-                    << " NOT IMPLEMENTED." << endl;
-            }
-            else if (convexEdges.size() > concaveEdges.size())
-            {
-                // Find which planes are joined to the concave edge
-
-                List<label> concaveEdgePlanes(2,label(-1));
-
-                label concaveEdgeI = concaveEdges[0];
-
-                // Pick up the two faces adjacent to the concave feature edge
-                const labelList& eFaces = qSurf_.edgeFaces()[concaveEdgeI];
-
-                label faceA = eFaces[0];
-
-                vector nA = qSurf_.faceNormals()[faceA];
-
-                scalar maxNormalDotProduct = -SMALL;
-
-                forAll(uniquePlaneNormals, uPN)
-                {
-                    scalar normalDotProduct = nA & uniquePlaneNormals[uPN];
-
-                    if (normalDotProduct > maxNormalDotProduct)
-                    {
-                        maxNormalDotProduct = normalDotProduct;
-
-                        concaveEdgePlanes[0] = uPN;
-                    }
-                }
-
-                label faceB = eFaces[1];
-                vector nB = qSurf_.faceNormals()[faceB];
-
-                maxNormalDotProduct = -SMALL;
-
-                forAll(uniquePlaneNormals, uPN)
-                {
-                    scalar normalDotProduct = nB & uniquePlaneNormals[uPN];
-
-                    if (normalDotProduct > maxNormalDotProduct)
-                    {
-                        maxNormalDotProduct = normalDotProduct;
-
-                        concaveEdgePlanes[1] = uPN;
-                    }
-                }
-
-                const vector& concaveEdgePlaneANormal =
-                uniquePlaneNormals[concaveEdgePlanes[0]];
-
-                const vector& concaveEdgePlaneBNormal =
-                uniquePlaneNormals[concaveEdgePlanes[1]];
-
-                label convexEdgesPlaneI;
-
-                if (findIndex(concaveEdgePlanes, 0) == -1)
-                {
-                    convexEdgesPlaneI = 0;
-                }
-                else if (findIndex(concaveEdgePlanes, 1) == -1)
-                {
-                    convexEdgesPlaneI = 1;
-                }
-                else
-                {
-                    convexEdgesPlaneI = 2;
-                }
-
-                const vector& convexEdgesPlaneNormal =
-                    uniquePlaneNormals[convexEdgesPlaneI];
-
-                const edge& concaveEdge = edges[concaveEdgeI];
-
-                // Check direction of edge, if the feature point is at the end()
-                // the reverse direction.
-
-                scalar edgeDirection = 1.0;
-
-                if (ptI == concaveEdge.end())
-                {
-                    edgeDirection *= -1.0;
-                }
-
-                // Intersect planes parallel to the concave edge planes offset
-                // by ppDist and the plane defined by featPt and the edge
-                // vector.
-                plane planeA
-                (
-                    featPt + tols_.ppDist*concaveEdgePlaneANormal,
-                    concaveEdgePlaneANormal
-                );
-
-                plane planeB
-                (
-                    featPt + tols_.ppDist*concaveEdgePlaneBNormal,
-                    concaveEdgePlaneBNormal
-                );
-
-                point concaveEdgeLocalFeatPt = featPt
-                + tols_.ppDist*edgeDirection
-                * concaveEdge.vec(localPts)/concaveEdge.mag(localPts);
-
-                // Finding the nearest point on the intersecting line to the
-                // edge point.  Floating point errors often encountered using
-                // planePlaneIntersect
-
-                plane planeF(concaveEdgeLocalFeatPt, concaveEdge.vec(localPts));
-
-                point concaveEdgeExternalPt =
-                planeF.planePlaneIntersect(planeA,planeB);
-
-                label concaveEdgeExternalPtI = number_of_vertices() + 4;
-
-                // Redefine planes to be on the feature surfaces to project
-                // through
-
-                planeA = plane(featPt, concaveEdgePlaneANormal);
-
-                planeB = plane(featPt, concaveEdgePlaneBNormal);
-
-                point internalPtA = concaveEdgeExternalPt
-                - 2*planeA.distance(concaveEdgeExternalPt)
-                *concaveEdgePlaneANormal;
-
-                label internalPtAI =
-                insertPoint(internalPtA, concaveEdgeExternalPtI);
-
-                point internalPtB = concaveEdgeExternalPt
-                - 2*planeB.distance(concaveEdgeExternalPt)
-                *concaveEdgePlaneBNormal;
-
-                label internalPtBI =
-                insertPoint(internalPtB, concaveEdgeExternalPtI);
-
-                plane planeC(featPt, convexEdgesPlaneNormal);
-
-                point externalPtD = internalPtA +
-                2*planeC.distance(internalPtA) * convexEdgesPlaneNormal;
-
-                insertPoint(externalPtD, internalPtAI);
-
-                point externalPtE = internalPtB +
-                2*planeC.distance(internalPtB) * convexEdgesPlaneNormal;
-
-                insertPoint(externalPtE, internalPtBI);
-
-                insertPoint(concaveEdgeExternalPt, internalPtAI);
-
-                scalar totalAngle = 180/mathematicalConstant::pi *
-                (
-                    mathematicalConstant::pi +
-                    acos(mag(concaveEdgePlaneANormal & concaveEdgePlaneBNormal))
-                );
-
-                if (totalAngle > controls_.maxQuadAngle)
-                {
-                    // Add additional mitering points
-
-                    vector concaveEdgeNormal =
-                    edgeDirection*concaveEdge.vec(localPts)
-                    /concaveEdge.mag(localPts);
-
-                    scalar angleSign = 1.0;
-
-                    if
-                    (
-                        qSurf_.outside
-                        (
-                            featPt - convexEdgesPlaneNormal*tols_.ppDist
-                        )
-                    )
-                    {
-                        angleSign = -1.0;
-                    }
-
-                    scalar phi = angleSign
-                    *acos(concaveEdgeNormal & -convexEdgesPlaneNormal);
-
-                    scalar guard =
-                    (
-                        1 + sin(phi)*tols_.ppDist/mag
-                        (
-                            concaveEdgeLocalFeatPt - concaveEdgeExternalPt
-                        )
-                    )/cos(phi) - 1;
-
-                    point internalPtF = concaveEdgeExternalPt + (2 + guard)
-                    *(concaveEdgeLocalFeatPt - concaveEdgeExternalPt);
-
-                    label internalPtFI =
-                    insertPoint(internalPtF, number_of_vertices() + 1);
-
-                    point externalPtG = internalPtF +
-                    2*planeC.distance(internalPtF) * convexEdgesPlaneNormal;
-                    insertPoint(externalPtG, internalPtFI);
-                }
-            }
-            else
-            {
-                // Find which planes are joined to the convex edge
-
-                List<label> convexEdgePlanes(2,label(-1));
-
-                label convexEdgeI = convexEdges[0];
-
-                // Pick up the two faces adjacent to the convex feature edge
-                const labelList& eFaces = qSurf_.edgeFaces()[convexEdgeI];
-
-                label faceA = eFaces[0];
-                vector nA = qSurf_.faceNormals()[faceA];
-
-                scalar maxNormalDotProduct = -SMALL;
-
-                forAll(uniquePlaneNormals, uPN)
-                {
-                    scalar normalDotProduct = nA & uniquePlaneNormals[uPN];
-
-                    if (normalDotProduct > maxNormalDotProduct)
-                    {
-                        maxNormalDotProduct = normalDotProduct;
-
-                        convexEdgePlanes[0] = uPN;
-                    }
-                }
-
-                label faceB = eFaces[1];
-                vector nB = qSurf_.faceNormals()[faceB];
-
-                maxNormalDotProduct = -SMALL;
-
-                forAll(uniquePlaneNormals, uPN)
-                {
-                    scalar normalDotProduct = nB & uniquePlaneNormals[uPN];
-
-                    if (normalDotProduct > maxNormalDotProduct)
-                    {
-                        maxNormalDotProduct = normalDotProduct;
-
-                        convexEdgePlanes[1] = uPN;
-                    }
-                }
-
-                const vector& convexEdgePlaneANormal =
-                    uniquePlaneNormals[convexEdgePlanes[0]];
-                const vector& convexEdgePlaneBNormal =
-                    uniquePlaneNormals[convexEdgePlanes[1]];
-
-                label concaveEdgesPlaneI;
-
-                if (findIndex(convexEdgePlanes, 0) == -1)
-                {
-                    concaveEdgesPlaneI = 0;
-                }
-                else if (findIndex(convexEdgePlanes, 1) == -1)
-                {
-                    concaveEdgesPlaneI = 1;
-                }
-                else
-                {
-                    concaveEdgesPlaneI = 2;
-                }
-
-                const vector& concaveEdgesPlaneNormal =
-                    uniquePlaneNormals[concaveEdgesPlaneI];
-
-                const edge& convexEdge = edges[convexEdgeI];
-
-                // Check direction of edge, if the feature point is at the end()
-                // the reverse direction.
-
-                scalar edgeDirection = 1.0;
-
-                if (ptI == convexEdge.end())
-                {
-                    edgeDirection *= -1.0;
-                }
-
-                // Intersect planes parallel to the convex edge planes offset by
-                // ppDist and the plane defined by featPt and the edge vector.
-                plane planeA
-                (
-                    featPt - tols_.ppDist*convexEdgePlaneANormal,
-                    convexEdgePlaneANormal
-                );
-
-                plane planeB
-                (
-                    featPt - tols_.ppDist*convexEdgePlaneBNormal,
-                    convexEdgePlaneBNormal
-                );
-
-                point convexEdgeLocalFeatPt = featPt
-                  + tols_.ppDist*edgeDirection
-                  * convexEdge.vec(localPts)/convexEdge.mag(localPts);
-
-
-                // Finding the nearest point on the intersecting line to the
-                // edge point.  Floating point errors often encountered using
-                // planePlaneIntersect
-
-                plane planeF(convexEdgeLocalFeatPt, convexEdge.vec(localPts));
-
-                point convexEdgeInternalPt =
-                planeF.planePlaneIntersect(planeA,planeB);
-
-                planeA = plane(featPt, convexEdgePlaneANormal);
-
-                planeB = plane(featPt, convexEdgePlaneBNormal);
-
-                point externalPtA = convexEdgeInternalPt
-                + 2*planeA.distance(convexEdgeInternalPt)
-                * convexEdgePlaneANormal;
-                label externalPtAI = number_of_vertices() + 3;
-
-                point externalPtB = convexEdgeInternalPt
-                + 2*planeB.distance(convexEdgeInternalPt)
-                * convexEdgePlaneBNormal;
-
-                label externalPtBI = number_of_vertices() + 4;
-
-                label convexEdgeInternalPtI = insertPoint
-                (
-                    convexEdgeInternalPt,
-                    externalPtAI
-                );
-
-                plane planeC(featPt, concaveEdgesPlaneNormal);
-
-                point internalPtD = externalPtA -
-                    2*planeC.distance(externalPtA) * concaveEdgesPlaneNormal;
-                insertPoint(internalPtD, externalPtAI);
-
-                point internalPtE = externalPtB -
-                    2*planeC.distance(externalPtB) * concaveEdgesPlaneNormal;
-                insertPoint(internalPtE, externalPtBI);
-
-                insertPoint(externalPtA, convexEdgeInternalPtI);
-
-                insertPoint(externalPtB, convexEdgeInternalPtI);
-            }
-        }
-    }
-
-    featureConstrainingVertices_.setSize(number_of_vertices());
-
-    label featPtI = 0;
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        vit++
-    )
-    {
-        featureConstrainingVertices_[featPtI] = Vb(vit->point());
-
-        featureConstrainingVertices_[featPtI].index() = vit->index();
-
-        featureConstrainingVertices_[featPtI].type() = vit->type();
-
-        featPtI++;
-    }
-
-    if (controls_.writeFeatureTriangulation)
-    {
-        writePoints("feat_allPoints.obj", false);
-        writePoints("feat_points.obj", true);
-        writeTriangles("feat_triangles.obj", true);
-    }
-}
-
-
-void Foam::CV3D::reinsertFeaturePoints()
-{
-    if (featureConstrainingVertices_.size())
-    {
-        forAll(featureConstrainingVertices_, f)
-        {
-            insertVb(featureConstrainingVertices_[f]);
-        }
-    }
-    else
-    {
-        WarningIn("Foam::CV3D::reinsertFeaturePoints")
-            << "No stored feature points to reinsert." << endl;
-    }
-}
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/insertSurfaceNearPointPairs.C b/applications/utilities/mesh/generation/CV3DMesher/insertSurfaceNearPointPairs.C
deleted file mode 100644
index 86ab634a11c..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/insertSurfaceNearPointPairs.C
+++ /dev/null
@@ -1,45 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV3D.H"
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-void Foam::CV3D::insertSurfaceNearPointPairs()
-{
-    Info<< "insertSurfaceNearPointPairs: " << nl << endl;
-
-    label nNearPoints = 0;
-
-//     This needs a rethink from scratch in 3D.  
-//     Probably iterating around the facets  rather than edges
-//     Remember about the incident_edges, cells etc
-
-    Info<< nNearPoints << " point-pairs inserted" << endl;
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/insertSurfaceNearestPointPairs.C b/applications/utilities/mesh/generation/CV3DMesher/insertSurfaceNearestPointPairs.C
deleted file mode 100644
index 060a67453fe..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/insertSurfaceNearestPointPairs.C
+++ /dev/null
@@ -1,986 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV3D.H"
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-bool Foam::CV3D::dualCellSurfaceIntersection
-(
-    const Triangulation::Finite_vertices_iterator& vit
-) const
-{
-    std::list<Facet>  facets;
-    incident_facets(vit, std::back_inserter(facets));
-
-    for
-    (
-        std::list<Facet>::iterator fit=facets.begin();
-        fit != facets.end();
-        ++fit
-    )
-    {
-        if
-        (
-            is_infinite(fit->first)
-         || is_infinite(fit->first->neighbor(fit->second))
-        )
-        {
-            return true;
-        }
-
-        point dE0 = topoint(dual(fit->first));
-
-        // If edge end is outside bounding box then edge cuts boundary
-        if (!qSurf_.bb().contains(dE0))
-        {
-            return true;
-        }
-
-        point dE1 = topoint(dual(fit->first->neighbor(fit->second)));
-
-        // If other edge end is outside bounding box then edge cuts boundary
-        if (!qSurf_.bb().contains(dE1))
-        {
-            return true;
-        }
-
-        if (magSqr(dE1 - dE0) > tols_.minEdgeLen2)
-        {
-            pointIndexHit pHit = qSurf_.tree().findLineAny(dE0, dE1);
-
-            if (pHit.hit())
-            {
-                return true;
-            }
-        }
-    }
-
-    return false;
-}
-
-
-void Foam::CV3D::smoothEdgePositions
-(
-    DynamicList<point>& edgePoints,
-    DynamicList<label>& edgeLabels
-) const
-{
-    const pointField& localPts = qSurf_.localPoints();
-    const edgeList& edges = qSurf_.edges();
-
-    // Sort by edge label then by distance from the start of the edge
-
-    SortableList<label> sortedEdgeLabels(edgeLabels);
-
-    labelList sortingIndices = sortedEdgeLabels.indices();
-
-    {
-        labelList copyEdgeLabels(edgeLabels.size());
-
-        forAll(sortingIndices, sI)
-        {
-            copyEdgeLabels[sI] = edgeLabels[sortingIndices[sI]];
-        }
-
-        edgeLabels.transfer(copyEdgeLabels);
-    }
-
-    {
-        List<point> copyEdgePoints(edgePoints.size());
-
-        forAll(sortingIndices, sI)
-        {
-            copyEdgePoints[sI] = edgePoints[sortingIndices[sI]];
-        }
-
-        edgePoints.transfer(copyEdgePoints);
-    }
-
-    List<scalar> edgeDistances(edgePoints.size());
-
-    forAll(edgeDistances, eD)
-    {
-        const point& edgeStart = localPts[edges[edgeLabels[eD]].start()];
-
-        edgeDistances[eD] = mag(edgeStart - edgePoints[eD]);
-    }
-
-    // Sort by edgeDistances in blocks of edgeLabel
-
-    DynamicList<label> edgeLabelJumps;
-
-    // Force first edgeLabel to be a jump
-    edgeLabelJumps.append(0);
-
-    for (label eL = 1; eL < edgeLabels.size(); eL++)
-    {
-        if (edgeLabels[eL] > edgeLabels[eL-1])
-        {
-            edgeLabelJumps.append(eL);
-        }
-    }
-
-    edgeLabelJumps.shrink();
-
-    forAll(edgeLabelJumps, eLJ)
-    {
-        label start = edgeLabelJumps[eLJ];
-
-        label length;
-
-        if (eLJ == edgeLabelJumps.size() - 1)
-        {
-            length = edgeLabels.size() - start;
-        }
-        else
-        {
-            length = edgeLabelJumps[eLJ + 1] - start;
-        }
-
-        SubList<scalar> edgeDistanceBlock(edgeDistances, length, start);
-
-        SortableList<scalar> sortedEdgeDistanceBlock(edgeDistanceBlock);
-
-        forAll(sortedEdgeDistanceBlock, sEDB)
-        {
-            sortingIndices[start + sEDB] =
-                sortedEdgeDistanceBlock.indices()[sEDB] + start;
-        }
-    }
-
-    {
-        List<point> copyEdgePoints(edgePoints.size());
-
-        forAll(sortingIndices, sI)
-        {
-            copyEdgePoints[sI] = edgePoints[sortingIndices[sI]];
-        }
-
-        edgePoints.transfer(copyEdgePoints);
-    }
-
-    {
-        List<scalar> copyEdgeDistances(edgeDistances.size());
-
-        forAll(sortingIndices, sI)
-        {
-            copyEdgeDistances[sI] = edgeDistances[sortingIndices[sI]];
-        }
-
-        edgeDistances.transfer(copyEdgeDistances);
-    }
-
-    // Create a List to hold each edge, process them individually, then
-    // recombine the edges into a single list.
-
-    List<List<point> > edgePointIndividualLists(edgeLabelJumps.size());
-
-    List<List<scalar> > edgeDistanceIndividualLists(edgeLabelJumps.size());
-
-    List<label> edgeLabelIndividualList(edgeLabelJumps.size());
-
-    forAll(edgeLabelJumps, eLJ)
-    {
-        label start = edgeLabelJumps[eLJ];
-
-        label edgeI = edgeLabels[start];
-
-        label length;
-
-        if (eLJ == edgeLabelJumps.size() - 1)
-        {
-            length = edgeLabels.size() - start;
-        }
-        else
-        {
-            length = edgeLabelJumps[eLJ + 1] - start;
-        }
-
-        edgePointIndividualLists[eLJ] = SubList<point>
-        (
-            edgePoints,
-            length,
-            start
-        );
-
-        edgeDistanceIndividualLists[eLJ] = SubList<scalar>
-        (
-            edgeDistances,
-            length,
-            start
-        );
-
-        edgeLabelIndividualList[eLJ] = edgeI;
-    }
-
-    edgePoints.clear();
-    edgeDistances.clear();
-    edgeLabels.clear();
-
-    forAll(edgeLabelIndividualList, e)
-    {
-        label edgeI = edgeLabelIndividualList[e];
-
-        smoothEdge
-        (
-            edgePointIndividualLists[e],
-            edgeDistanceIndividualLists[e],
-            edgeI
-        );
-
-        const List<point>& tempEdgePoints = edgePointIndividualLists[e];
-
-        forAll(tempEdgePoints, tEP)
-        {
-            edgePoints.append(tempEdgePoints[tEP]);
-
-            edgeLabels.append(edgeI);
-        }
-    }
-
-    edgePoints.shrink();
-
-    edgeLabels.shrink();
-}
-
-
-
-void Foam::CV3D::smoothEdge
-(
-    List<point>& edgePoints,
-    List<scalar>& edgeDistances,
-    const label edgeI
-) const
-{
-    const pointField& localPts = qSurf_.localPoints();
-    const edgeList& edges = qSurf_.edges();
-
-    // Process the points along each edge (in blocks of edgeLabel) performing 3
-    // functions:
-    // 1: move points away from feature points
-    // 2: aggregate tight groups of points into one point
-    // 3: adjust the spacing of remaining points on a pair by pair basis to
-    //    remove excess points and add points to long uncontrolled spans.
-
-
-    const edge& e(edges[edgeI]);
-
-    const point& eStart(localPts[e.start()]);
-
-    const point& eEnd(localPts[e.end()]);
-
-    scalar edgeLength = mag(eStart - eEnd);
-
-    if (edgeLength < 2*tols_.featurePointGuard)
-    {
-        Info<< "edge " << edgeI
-            << " is too short with respect to the featurePointGuard "
-            << "distance to allow edge control points to be placed."
-            << nl << "Edge length = " << edgeLength
-            << nl <<endl;
-
-        return;
-    }
-
-    // part 1
-    {
-        DynamicList<point> tempEdgePoints;
-
-        bool startGuardPlaced = false;
-
-        bool endGuardPlaced = false;
-
-        forAll (edgePoints, eP)
-        {
-            const point& edgePoint = edgePoints[eP];
-
-            const scalar& edgeDist = edgeDistances[eP];
-
-            if
-            (
-                edgeDist < tols_.featurePointGuard
-             && !startGuardPlaced
-            )
-            {
-                tempEdgePoints.append
-                (
-                    eStart + (edgePoint - eStart)
-                    * tols_.featurePointGuard/edgeDist
-                );
-
-                startGuardPlaced = true;
-            }
-            else if
-            (
-                edgeDist > (edgeLength - tols_.featurePointGuard)
-             && !endGuardPlaced
-            )
-            {
-                tempEdgePoints.append
-                (
-                    eEnd + (edgePoint - eEnd)
-                    * tols_.featurePointGuard/(edgeLength - edgeDist)
-                );
-
-                endGuardPlaced = true;
-            }
-            else if
-            (
-                edgeDist > tols_.featurePointGuard
-             && edgeDist < (edgeLength - tols_.featurePointGuard)
-            )
-            {
-                tempEdgePoints.append(edgePoint);
-            }
-        }
-
-        edgePoints.transfer(tempEdgePoints.shrink());
-    }
-
-    // Recalculate edge distances.
-
-    edgeDistances.setSize(edgePoints.size());
-
-    forAll(edgeDistances, eD)
-    {
-        edgeDistances[eD] = mag(eStart - edgePoints[eD]);
-    }
-
-    // part 2
-    {
-        DynamicList<point> tempEdgePoints;
-
-        label groupSize = 0;
-
-        point newEdgePoint(vector::zero);
-
-        // if (edgePoints.size() == 1)
-        // {
-        //     tempEdgePoints.append(edgePoints[0]);
-        // }
-        // else if
-        // (
-        //     (edgeDistances[1] - edgeDistances[0]) > tols_.edgeGroupSpacing
-        // )
-        // {
-        //     tempEdgePoints.append(edgePoints[0]);
-        // }
-
-        if (edgePoints.size() > 1)
-        {
-            if ((edgeDistances[1] - edgeDistances[0]) < tols_.edgeGroupSpacing)
-            {
-                // ...the first two points on the edge start a group
-
-                newEdgePoint += edgePoints[0];
-
-                groupSize++;
-            }
-            else
-            {
-                tempEdgePoints.append(edgePoints[0]);
-            }
-        }
-        else
-        {
-            // ...add the first point by default
-
-            tempEdgePoints.append(edgePoints[0]);
-        }
-
-        for (label eP = 1; eP < edgePoints.size(); eP++)
-        {
-            const scalar& edgeDist = edgeDistances[eP];
-            const scalar& previousEdgeDist = edgeDistances[eP - 1];
-
-            if ((edgeDist - previousEdgeDist) < tols_.edgeGroupSpacing)
-            {
-                newEdgePoint += edgePoints[eP];
-
-                groupSize++;
-            }
-            else if (groupSize > 0)
-            {
-                // A point group has been formed and has finished
-
-                newEdgePoint /= groupSize;
-
-                tempEdgePoints.append(newEdgePoint);
-
-                newEdgePoint = vector::zero;
-
-                groupSize = 0;
-            }
-            else
-            {
-                tempEdgePoints.append(edgePoints[eP]);
-            }
-        }
-
-        if (groupSize > 0)
-        {
-            // A point group has been formed at the end of the edge and needs to
-            // be finished.
-
-            newEdgePoint /= groupSize;
-
-            tempEdgePoints.append(newEdgePoint);
-        }
-
-        edgePoints.transfer(tempEdgePoints.shrink());
-    }
-
-    // Recalculate edge distances.
-
-    edgeDistances.setSize(edgePoints.size());
-
-    forAll(edgeDistances, eD)
-    {
-        edgeDistances[eD] = mag(eStart - edgePoints[eD]);
-    }
-
-    // part 3
-    {
-        // Special treatment for gaps between closest point to start
-
-        DynamicList<point> tempEdgePoints;
-
-        if (edgeDistances[0] - tols_.featurePointGuard > tols_.maxEdgeSpacing)
-        {
-            scalar gap = edgeDistances[0] - tols_.featurePointGuard;
-
-            label nInsertions = label(gap/tols_.maxEdgeSpacing);
-
-            // Info<< "Gap at start of edge of "  << gap
-            //     << ". Inserting " << nInsertions << " points" << endl;
-
-            scalar spacing = gap / (nInsertions + 1);
-
-            for (label nI = 1; nI <= nInsertions; nI++)
-            {
-                tempEdgePoints.append
-                (
-                    eStart + (eEnd - eStart)
-                    * (nI * spacing + tols_.featurePointGuard) /edgeLength
-                );
-            }
-        }
-
-        // Identify gaps in middle of edges.
-        // Insert first point by default.
-
-        tempEdgePoints.append(edgePoints[0]);
-
-        for (label eP = 1; eP < edgePoints.size(); eP++)
-        {
-            const scalar& edgeDist = edgeDistances[eP];
-            const scalar& previousEdgeDist = edgeDistances[eP - 1];
-
-            if ((edgeDist - previousEdgeDist) > tols_.maxEdgeSpacing)
-            {
-                scalar gap = edgeDist - previousEdgeDist;
-
-                label nInsertions = label(gap/tols_.maxEdgeSpacing);
-
-                // Info<< "Gap in edge of "  << gap
-                //     << ". Inserting " << nInsertions << " points" << endl;
-
-                scalar spacing = gap / (nInsertions + 1);
-
-                for (label nI = 1; nI<= nInsertions; nI++)
-                {
-                    tempEdgePoints.append
-                    (
-                        eStart + (eEnd - eStart)
-                        * (nI * spacing + previousEdgeDist) /edgeLength
-                    );
-                }
-
-
-            }
-
-            tempEdgePoints.append(edgePoints[eP]);
-        }
-
-        // Special treatment for gaps between closest point to end
-
-        if
-        (
-            (edgeLength - edgeDistances[edgeDistances.size() - 1]
-                - tols_.featurePointGuard)
-                > tols_.maxEdgeSpacing
-        )
-        {
-            scalar lastPointDist =  edgeDistances[edgeDistances.size() - 1];
-
-            const point& lastPoint = edgePoints[edgePoints.size() - 1];
-
-            scalar gap = edgeLength - lastPointDist - tols_.featurePointGuard;
-
-            label nInsertions = label(gap/tols_.maxEdgeSpacing);
-
-            // Info<< "Gap at end of edge of "  << gap
-            //     << ". Inserting " << nInsertions << " points" << endl;
-
-            scalar spacing = gap / (nInsertions + 1);
-
-            for (label nI = 1; nI <= nInsertions; nI++)
-            {
-                tempEdgePoints.append
-                (
-                    lastPoint + (eEnd - lastPoint)
-                        * nI * spacing / gap
-                );
-            }
-        }
-
-        edgePoints.transfer(tempEdgePoints.shrink());
-
-        // Remove pairs of points that are too close together.
-
-        label nPointsRemoved = 1;
-
-        while (nPointsRemoved > 0)
-        {
-            nPointsRemoved = 0;
-
-            // Recalculate edge distances.
-
-            edgeDistances.setSize(edgePoints.size());
-
-            forAll(edgeDistances, eD)
-            {
-                edgeDistances[eD] = mag(eStart - edgePoints[eD]);
-            }
-
-            // Insert first point
-            tempEdgePoints.append(edgePoints[0]);
-
-            bool previousPointMustBeKept = false;
-
-            for (label eP = 1; eP < edgePoints.size(); eP++)
-            {
-                const scalar& edgeDist = edgeDistances[eP];
-                const scalar& previousEdgeDist = edgeDistances[eP - 1];
-
-                if ((edgeDist - previousEdgeDist) < tols_.minEdgeSpacing)
-                {
-                    if (!previousPointMustBeKept)
-                    {
-                        tempEdgePoints.remove();
-                    }
-
-                    const point& currentPoint = edgePoints[eP];
-
-                    const point& previousPoint = edgePoints[eP - 1];
-
-                    tempEdgePoints.append(0.5*(previousPoint + currentPoint));
-
-                    nPointsRemoved++;
-
-                    previousPointMustBeKept = true;
-                }
-                else
-                {
-                    tempEdgePoints.append(edgePoints[eP]);
-
-                    previousPointMustBeKept = false;
-                }
-            }
-
-            // Info<< edgeI << tab
-            //<< nPointsRemoved << " points removed." << endl;
-
-            edgePoints.transfer(tempEdgePoints.shrink());
-        }
-    }
-}
-
-
-void Foam::CV3D::insertPointPairs
-(
-    const DynamicList<point>& nearSurfacePoints,
-    const DynamicList<point>& surfacePoints,
-    const DynamicList<label>& surfaceTris,
-    const fileName fName
-)
-{
-    if (controls_.mirrorPoints)
-    {
-        forAll(surfacePoints, ppi)
-        {
-            insertMirrorPoint
-            (
-                nearSurfacePoints[ppi],
-                surfacePoints[ppi]
-            );
-        }
-    }
-    else
-    {
-        forAll(surfacePoints, ppi)
-        {
-            insertPointPair
-            (
-                tols_.ppDist,
-                surfacePoints[ppi],
-                qSurf_.faceNormals()[surfaceTris[ppi]]
-            );
-        }
-    }
-
-    Info<< surfacePoints.size() << " point-pairs inserted" << endl;
-
-    if (controls_.writeInsertedPointPairs)
-    {
-        OFstream str(fName);
-        label vertI = 0;
-
-        forAll(surfacePoints, ppi)
-        {
-            meshTools::writeOBJ(str, surfacePoints[ppi]);
-            vertI++;
-        }
-
-        Info<< "insertPointPairs: Written " << surfacePoints.size()
-            << " inserted point-pair locations to file "
-            << str.name() << endl;
-    }
-}
-
-
-void Foam::CV3D::insertEdgePointGroups
-(
-    const DynamicList<point>& edgePoints,
-    const DynamicList<label>& edgeLabels,
-    const fileName fName
-)
-{
-    const pointField& localPts = qSurf_.localPoints();
-
-    forAll(edgePoints, eP)
-    {
-        const point& edgePt = edgePoints[eP];
-
-        const label edgeI = edgeLabels[eP];
-
-        // Pick up the two faces adjacent to the feature edge
-        const labelList& eFaces = qSurf_.edgeFaces()[edgeI];
-
-        label faceA = eFaces[0];
-        vector nA = qSurf_.faceNormals()[faceA];
-
-        label faceB = eFaces[1];
-        vector nB = qSurf_.faceNormals()[faceB];
-
-        // Intersect planes parallel to faceA and faceB offset by ppDist
-        // and the plane defined by edgePt and the edge vector.
-        plane planeA(edgePt - tols_.ppDist*nA, nA);
-        plane planeB(edgePt - tols_.ppDist*nB, nB);
-
-        // Finding the nearest point on the intersecting line to the edge point.
-        // Floating point errors often encountered using planePlaneIntersect
-        // plane planeF(edgePt, (nA^nB));
-        // point refPt = planeF.planePlaneIntersect(planeA,planeB);
-
-        plane::ray planeIntersect(planeA.planeIntersect(planeB));
-
-        pointHit refPtHit = linePointRef
-        (
-            planeIntersect.refPoint() + 2*tols_.span*planeIntersect.dir(),
-            planeIntersect.refPoint() - 2*tols_.span*planeIntersect.dir()
-        ).nearestDist(edgePt);
-
-        point refPt = refPtHit.hitPoint();
-
-        point faceAVert =
-        localPts[triSurfaceTools::oppositeVertex(qSurf_, faceA, edgeI)];
-
-        // Determine convex or concave angle
-        if (((faceAVert - edgePt) & nB) < 0)
-        {
-            // Convex. So refPt will be inside domain and hence a master point
-
-            // Insert the master point refering the the first slave
-            label masterPtIndex = insertPoint(refPt, number_of_vertices() + 1);
-
-            // Insert the slave points by reflecting refPt in both faces.
-            // with each slave refering to the master
-
-            point reflectedA = refPt + 2*((edgePt - refPt) & nA)*nA;
-            insertPoint(reflectedA, masterPtIndex);
-
-            point reflectedB = refPt + 2*((edgePt - refPt) & nB)*nB;
-            insertPoint(reflectedB, masterPtIndex);
-        }
-        else
-        {
-            // Concave. master and reflected points inside the domain.
-            // Generate reflected master to be outside.
-            point reflMasterPt = refPt + 2*(edgePt - refPt);
-
-            // Reflect refPt in both faces.
-            point reflectedA =
-            reflMasterPt + 2*((edgePt - reflMasterPt) & nA)*nA;
-
-            point reflectedB =
-            reflMasterPt + 2*((edgePt - reflMasterPt) & nB)*nB;
-
-            scalar totalAngle =
-            180*(mathematicalConstant::pi + acos(mag(nA & nB)))
-            /mathematicalConstant::pi;
-
-            // Number of quadrants the angle should be split into
-            int nQuads = int(totalAngle/controls_.maxQuadAngle) + 1;
-
-            // The number of additional master points needed to obtain the
-            // required number of quadrants.
-            int nAddPoints = min(max(nQuads - 2, 0), 2);
-
-            // index of reflMaster
-            label reflectedMaster = number_of_vertices() + 2 + nAddPoints;
-
-            // Master A is inside.
-            label reflectedAI = insertPoint(reflectedA, reflectedMaster);
-
-            // Master B is inside.
-            insertPoint(reflectedB, reflectedMaster);
-
-            if (nAddPoints == 1)
-            {
-                // One additinal point is the reflection of the slave point,
-                // i.e. the original reference point
-                insertPoint(refPt, reflectedMaster);
-            }
-            else if (nAddPoints == 2)
-            {
-                point reflectedAa = refPt
-                - ((edgePt - reflMasterPt) & nB)*nB;
-                insertPoint(reflectedAa, reflectedMaster);
-
-                point reflectedBb = refPt
-                - ((edgePt - reflMasterPt) & nA)*nA;
-                insertPoint(reflectedBb, reflectedMaster);
-            }
-
-            // Slave is outside.
-            insertPoint(reflMasterPt, reflectedAI);
-        }
-    }
-
-    Info<< edgePoints.size() << " edge-control locations inserted" << endl;
-
-    if (controls_.writeInsertedPointPairs)
-    {
-        OFstream str(fName);
-        label vertI = 0;
-
-        forAll(edgePoints, eP)
-        {
-            meshTools::writeOBJ(str, edgePoints[eP]);
-            vertI++;
-        }
-
-        Info<< "insertEdgePointGroups: Written " << edgePoints.size()
-            << " inserted edge-control locations to file "
-            << str.name() << endl;
-    }
-}
-
-
-void Foam::CV3D::insertSurfaceNearestPointPairs()
-{
-    Info<< nl << "insertSurfaceNearestPointPairs: " << endl;
-
-    label nSurfacePointsEst = number_of_vertices();
-
-    scalar distanceFactor = 8.0;
-    scalar distanceFactor2 = Foam::sqr(distanceFactor);
-
-    if (qSurf_.features().featureEdges().size())
-    {
-        DynamicList<point> nearSurfacePoints(nSurfacePointsEst);
-
-        for
-        (
-            Triangulation::Finite_vertices_iterator vit =
-            finite_vertices_begin();
-            vit != finite_vertices_end();
-            vit++
-        )
-        {
-            if (vit->internalPoint())
-            {
-                point vert(topoint(vit->point()));
-
-                pointIndexHit pHit = qSurf_.tree().findNearest
-                (
-                    vert,
-                    distanceFactor2*controls_.minCellSize2
-                );
-
-                if (pHit.hit())
-                {
-                    vit->setNearBoundary();
-
-                    if (dualCellSurfaceIntersection(vit))
-                    {
-                        nearSurfacePoints.append(vert);
-                    }
-                }
-            }
-        }
-
-        pointField nearSurfacePointsForEdges(nearSurfacePoints.shrink());
-
-        labelList allEdgeLabels;
-        labelList allEdgeEndPoints;
-        pointField allEdgePoints;
-
-        qSurf_.features().nearestSurfEdge
-        (
-            qSurf_.features().featureEdges(),
-            nearSurfacePointsForEdges,
-            vector::one * distanceFactor * controls_.minCellSize,
-            allEdgeLabels,
-            allEdgeEndPoints,
-            allEdgePoints
-        );
-
-        DynamicList<label> edgeLabels(allEdgeLabels.size());
-        DynamicList<vector> edgePoints(allEdgePoints.size());
-
-        forAll(allEdgePoints, eP)
-        {
-            if (allEdgeLabels[eP] >= 0 && allEdgeEndPoints[eP] < 0)
-            {
-                edgeLabels.append(allEdgeLabels[eP]);
-                edgePoints.append(allEdgePoints[eP]);
-            }
-        }
-
-        edgePoints.shrink();
-        edgeLabels.shrink();
-
-        if (edgePoints.size())
-        {
-            smoothEdgePositions(edgePoints, edgeLabels);
-
-            insertEdgePointGroups
-            (
-                edgePoints,
-                edgeLabels,
-                "surfaceNearestEdgePoints.obj"
-            );
-        }
-    }
-
-    DynamicList<point> allNearSurfacePoints(nSurfacePointsEst);
-    DynamicList<point> allSurfacePoints(nSurfacePointsEst);
-    DynamicList<label> allSurfaceTris(nSurfacePointsEst);
-
-    for
-    (
-        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
-        vit != finite_vertices_end();
-        vit++
-    )
-    {
-        if (vit->internalPoint())
-        {
-            point vert(topoint(vit->point()));
-
-            pointIndexHit pHit = qSurf_.tree().findNearest
-            (
-                vert,
-                distanceFactor2*controls_.minCellSize2
-            );
-
-            if (pHit.hit())
-            {
-                vit->setNearBoundary();
-
-                if (dualCellSurfaceIntersection(vit))
-                {
-                    allNearSurfacePoints.append(vert);
-                    allSurfacePoints.append(pHit.hitPoint());
-                    allSurfaceTris.append(pHit.index());
-                }
-            }
-        }
-    }
-
-    pointField surfacePointsForEdges(allSurfacePoints.shrink());
-
-    labelList allEdgeLabels;
-    labelList allEdgeEndPoints;
-    pointField allEdgePoints;
-
-    qSurf_.features().nearestSurfEdge
-    (
-        qSurf_.features().featureEdges(),
-        surfacePointsForEdges,
-        vector::one * 2.0 * tols_.featureEdgeGuard,
-        allEdgeLabels,
-        allEdgeEndPoints,
-        allEdgePoints
-    );
-
-    DynamicList<point> nearSurfacePoints(nSurfacePointsEst);
-    DynamicList<point> surfacePoints(nSurfacePointsEst);
-    DynamicList<label> surfaceTris(nSurfacePointsEst);
-
-    forAll(allEdgePoints, eP)
-    {
-        if (allEdgeLabels[eP] == -1)
-        {
-            nearSurfacePoints.append(allNearSurfacePoints[eP]);
-            surfacePoints.append(allSurfacePoints[eP]);
-            surfaceTris.append(allSurfaceTris[eP]);
-        }
-    }
-
-    Info<< nl << "Number of surface conformation points not placed because "
-        << nl << "they were too close to a feature edge = "
-        << allSurfacePoints.size() - surfacePoints.size()
-        << endl;
-
-    nearSurfacePoints.shrink();
-    surfacePoints.shrink();
-    surfaceTris.shrink();
-
-    insertPointPairs
-    (
-        nearSurfacePoints,
-        surfacePoints,
-        surfaceTris,
-        "surfaceNearestIntersections.obj"
-    );
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/querySurface.C b/applications/utilities/mesh/generation/CV3DMesher/querySurface.C
deleted file mode 100644
index 07a5468f906..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/querySurface.C
+++ /dev/null
@@ -1,248 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "querySurface.H"
-#include "mathematicalConstants.H"
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::querySurface::querySurface
-(
-    const fileName& surfaceFileName,
-    const scalar& includedAngle
-)
-:
-    triSurface(surfaceFileName),
-    rndGen_(12345),
-    bb_(localPoints()),
-    tree_
-    (
-        treeDataTriSurface(*this),
-        bb_.extend(rndGen_, 1e-3), // slightly randomize bb
-        8,                         // maxLevel
-        4, //10,                   // leafsize
-        10.0 //3.0                 // duplicity
-    ),
-    sFeat_(*this, includedAngle)
-{}
-
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-Foam::querySurface::~querySurface()
-{}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-Foam::labelListList Foam::querySurface::featurePointFeatureEdges() const
-{
-    const labelList& featPoints = features().featurePoints();
-
-    const labelList& featEdges = features().featureEdges();
-
-    const edgeList& edges = this->edges();
-
-    List<DynamicList<label> > tempFeatPointFeatEdges(featPoints.size());
-
-    forAll(featPoints, pI)
-    {
-        label fP = featPoints[pI];
-
-        forAll(featEdges, eI)
-        {
-            label fE = featEdges[eI];
-
-            const edge& e(edges[fE]);
-
-            if (e.start() == fP || e.end() == fP)
-            {
-                tempFeatPointFeatEdges[pI].append(fE);
-            }
-        }
-    }
-
-    labelListList featPointFeatEdges(tempFeatPointFeatEdges.size());
-
-    forAll(featPointFeatEdges, fPFE)
-    {
-        featPointFeatEdges[fPFE].transfer(tempFeatPointFeatEdges[fPFE].shrink());
-    }
-
-    return featPointFeatEdges;
-}
-
-Foam::indexedOctree<Foam::treeDataTriSurface>::volumeType
-Foam::querySurface::insideOutside
-(
-    const scalar searchSpan2,
-    const point& pt
-) const
-{
-    if (!bb_.contains(pt))
-    {
-        return indexedOctree<treeDataTriSurface>::OUTSIDE;
-    }
-
-    pointIndexHit pHit = tree_.findNearest(pt, searchSpan2);
-
-    if (!pHit.hit())
-    {
-        return tree_.getVolumeType(pt);
-    }
-    else
-    {
-        return indexedOctree<treeDataTriSurface>::MIXED;
-    }
-}
-
-
-// Check if point is inside surface
-bool Foam::querySurface::inside(const point& pt) const
-{
-    if (!bb_.contains(pt))
-    {
-        return false;
-    }
-
-    return
-    (
-        tree_.getVolumeType(pt) == indexedOctree<treeDataTriSurface>::INSIDE
-    );
-}
-
-
-// Check if point is outside surface
-bool Foam::querySurface::outside(const point& pt) const
-{
-    if (!bb_.contains(pt))
-    {
-        return true;
-    }
-
-    return
-    (
-        tree_.getVolumeType(pt) == indexedOctree<treeDataTriSurface>::OUTSIDE
-    );
-}
-
-
-// Check if point is inside surface by at least dist2
-bool Foam::querySurface::wellInside(const point& pt, const scalar dist2) const
-{
-    if (!bb_.contains(pt))
-    {
-        return false;
-    }
-
-    pointIndexHit pHit = tree_.findNearest(pt, dist2);
-
-    if (pHit.hit())
-    {
-        return false;
-    }
-    else
-    {
-        return
-            tree_.getVolumeType(pt)
-         == indexedOctree<treeDataTriSurface>::INSIDE;
-    }
-}
-
-
-// Check if point is outside surface by at least dist2
-bool Foam::querySurface::wellOutside(const point& pt, const scalar dist2) const
-{
-    if (!bb_.contains(pt))
-    {
-        return true;
-    }
-
-    pointIndexHit pHit = tree_.findNearest(pt, dist2);
-
-    if (pHit.hit())
-    {
-        return false;
-    }
-    else
-    {
-        return
-            tree_.getVolumeType(pt)
-         == indexedOctree<treeDataTriSurface>::OUTSIDE;
-    }
-}
-
-
-bool Foam::querySurface::featurePoint(const label ptI) const
-{
-    if (findIndex(features().featurePoints(), ptI) >= 0)
-    {
-        return true;
-    }
-    else
-    {
-        return false;
-    }
-}
-
-
-void Foam::querySurface::writeTreeOBJ() const
-{
-    OFstream str("tree.obj");
-    label vertI = 0;
-
-    const List<indexedOctree<treeDataTriSurface>::node>& nodes = tree_.nodes();
-
-    forAll(nodes, nodeI)
-    {
-        const indexedOctree<treeDataTriSurface>::node& nod = nodes[nodeI];
-
-        const treeBoundBox& bb = nod.bb_;
-
-        const pointField points(bb.points());
-
-        label startVertI = vertI;
-
-        forAll(points, i)
-        {
-            meshTools::writeOBJ(str, points[i]);
-            vertI++;
-        }
-
-        const edgeList edges(treeBoundBox::edges);
-
-        forAll(edges, i)
-        {
-            const edge& e = edges[i];
-
-            str << "l " << e[0]+startVertI+1 << ' ' << e[1]+startVertI+1
-                << nl;
-        }
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/querySurface.H b/applications/utilities/mesh/generation/CV3DMesher/querySurface.H
deleted file mode 100644
index b5845183e72..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/querySurface.H
+++ /dev/null
@@ -1,162 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-Class
-    querySurface
-
-Description
-    Searchable triSurface using an octree to speed-up queries.
-
-SourceFiles
-    querySurface.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef querySurface_H
-#define querySurface_H
-
-#include "triSurface.H"
-#include "treeDataTriSurface.H"
-#include "indexedOctree.H"
-#include "surfaceFeatures.H"
-#include "Random.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-/*---------------------------------------------------------------------------*\
-                           Class querySurface Declaration
-\*---------------------------------------------------------------------------*/
-
-class querySurface
-:
-    public triSurface
-{
-    // Private data
-
-        Random rndGen_;
-
-        // Bounding box of surface. Used for relative tolerances.
-        treeBoundBox bb_;
-
-        // Search engine on surface
-        indexedOctree<treeDataTriSurface> tree_;
-
-        surfaceFeatures sFeat_;
-
-
-    // Private Member Functions
-
-        //- Disallow default bitwise copy construct
-        querySurface(const querySurface&);
-
-        //- Disallow default bitwise assignment
-        void operator=(const querySurface&);
-
-
-public:
-
-    // Constructors
-
-        //- Construct given file name of the surface
-        querySurface
-        (
-            const fileName& surfaceFileName,
-            const scalar& includedAngle
-        );
-
-
-    // Destructor
-
-        ~querySurface();
-
-
-    // Member Functions
-
-        // Access
-
-            const treeBoundBox& bb() const
-            {
-                return bb_;
-            }
-
-            const indexedOctree<treeDataTriSurface>& tree() const
-            {
-                return tree_;
-            }
-
-            const surfaceFeatures& features() const
-            {
-                return sFeat_;
-            }
-
-
-        // Query
-
-            labelListList featurePointFeatureEdges() const;
-
-            //- Returns inside, outside or mixed (= close to surface)
-            indexedOctree<Foam::treeDataTriSurface>::volumeType insideOutside
-            (
-                const scalar searchSpan2,
-                const point& pt
-            ) const;
-
-            //- Check if point is inside surface
-            bool inside(const point& pt) const;
-
-            //- Check if point is outside surface
-            bool outside(const point& pt) const;
-
-            //- Check if point is inside surface by at least dist2
-            bool wellInside(const point& pt, const scalar dist2) const;
-
-            //- Check if point is outside surface by at least dist2
-            bool wellOutside(const point& pt, const scalar dist2) const;
-
-            //- Check if a point index is a feature point
-            bool featurePoint(const label ptI) const;
-
-
-        // Write
-
-            void writeTreeOBJ() const;
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-//#include "querySurfaceI.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/CV3DMesher/tolerances.C b/applications/utilities/mesh/generation/CV3DMesher/tolerances.C
deleted file mode 100644
index 21a11b7afe5..00000000000
--- a/applications/utilities/mesh/generation/CV3DMesher/tolerances.C
+++ /dev/null
@@ -1,77 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-    Free Software Foundation; either version 2 of the License, or (at your
-    option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*----------------------------------------------------------------------------*/
-
-#include "CV3D.H"
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::CV3D::tolerances::tolerances
-(
-    const IOdictionary& controlDict,
-    const scalar minCellSize,
-    const boundBox& bb
-)
-:
-    span
-    (
-        max(mag(bb.max().x()), mag(bb.min().x()))
-      + max(mag(bb.max().y()), mag(bb.min().y()))
-      + max(mag(bb.max().z()), mag(bb.min().z()))
-    ),
-    span2(Foam::sqr(span)),
-
-    minEdgeLen(readScalar(controlDict.lookup("minEdgeLenCoeff"))*minCellSize),
-    minEdgeLen2(Foam::sqr(minEdgeLen)),
-
-    ppDist(readScalar(controlDict.lookup("ppDistCoeff"))*minCellSize),
-    ppDist2(Foam::sqr(ppDist)),
-
-    edgeGroupSpacing
-    (
-        readScalar(controlDict.lookup("edgeGroupSpacingCoeff"))*minCellSize
-    ),
-
-    featurePointGuard
-    (
-        readScalar(controlDict.lookup("featurePointGuardCoeff"))*minCellSize
-    ),
-
-    featureEdgeGuard
-    (
-        readScalar(controlDict.lookup("featureEdgeGuardCoeff"))*minCellSize
-    ),
-
-    minEdgeSpacing
-    (
-        readScalar(controlDict.lookup("minEdgeSpacingCoeff"))*minCellSize
-    ),
-    maxEdgeSpacing
-    (
-        readScalar(controlDict.lookup("maxEdgeSpacingCoeff"))*minCellSize
-    )
-{}
-
-// ************************************************************************* //
-- 
GitLab