Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / applications / utilities / surface / surfaceFind / surfaceFind.C
blobb36eee82d33a552e5b9cb0af6b04034cb22d4416
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Description
25     Finds nearest face and vertex.
27 \*---------------------------------------------------------------------------*/
29 #include "argList.H"
30 #include "OFstream.H"
32 #include "MeshedSurfaces.H"
34 using namespace Foam;
37 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
38 // Main program:
40 int main(int argc, char *argv[])
42     argList::noParallel();
43     argList::validArgs.append("surfaceFile");
44     argList::addOption("x", "X", "The point x-coordinate (if non-zero)");
45     argList::addOption("y", "Y", "The point y-coordinate (if non-zero)");
46     argList::addOption("z", "Z", "The point y-coordinate (if non-zero)");
48     argList args(argc, argv);
50     const point samplePt
51     (
52         args.optionLookupOrDefault<scalar>("x", 0),
53         args.optionLookupOrDefault<scalar>("y", 0),
54         args.optionLookupOrDefault<scalar>("z", 0)
55     );
56     Info<< "Looking for nearest face/vertex to " << samplePt << endl;
59     Info<< "Reading surf ..." << endl;
60     meshedSurface surf1(args[1]);
62     //
63     // Nearest vertex
64     //
66     const pointField& localPoints = surf1.localPoints();
68     label minIndex = -1;
69     scalar minDist = GREAT;
71     forAll(localPoints, pointI)
72     {
73         const scalar dist = mag(localPoints[pointI] - samplePt);
74         if (dist < minDist)
75         {
76             minDist = dist;
77             minIndex = pointI;
78         }
79     }
81     Info<< "Nearest vertex:" << nl
82         << "    index      :" << minIndex << " (in localPoints)" << nl
83         << "    index      :" << surf1.meshPoints()[minIndex]
84         << " (in points)" << nl
85         << "    coordinates:" << localPoints[minIndex] << nl
86         << endl;
88     //
89     // Nearest face
90     //
92     const pointField& points = surf1.points();
94     minIndex = -1;
95     minDist = GREAT;
97     forAll(surf1, faceI)
98     {
99         const point centre = surf1[faceI].centre(points);
101         const scalar dist = mag(centre - samplePt);
102         if (dist < minDist)
103         {
104             minDist = dist;
105             minIndex = faceI;
106         }
107     }
109     const face& f = surf1[minIndex];
111     Info<< "Face with nearest centre:" << nl
112         << "    index        :" << minIndex << nl
113         << "    centre       :" << f.centre(points) << nl
114         << "    face         :" << f << nl
115         << "    vertex coords:\n";
116     forAll(f, fp)
117     {
118         Info<< "        " << points[f[fp]] << "\n";
119     }
121     Info<< endl;
123     Info<< "End\n" << endl;
125     return 0;
129 // ************************************************************************* //