Better bounding on topo change
[foam-extend-3.2.git] / src / surfMesh / surfaceFormats / surfaceFormatsCore.C
blobbe3626d091eeab09dc115783bb6ce03dd336b130
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
26 #include "objectRegistry.H"
27 #include "surfaceFormatsCore.H"
29 #include "foamTime.H"
30 #include "IFstream.H"
31 #include "OFstream.H"
32 #include "SortableList.H"
33 #include "surfMesh.H"
35 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
37 Foam::word Foam::fileFormats::surfaceFormatsCore::nativeExt("ofs");
39 // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
41 Foam::string Foam::fileFormats::surfaceFormatsCore::getLineNoComment
43     IFstream& is
46     string line;
47     do
48     {
49         is.getLine(line);
50     }
51     while ((line.empty() || line[0] == '#') && is.good());
53     return line;
57 #if 0
58 Foam::fileName Foam::fileFormats::surfaceFormatsCore::localMeshFileName
60     const word& surfName
63     const word name(surfName.size() ? surfName : surfaceRegistry::defaultName);
65     return fileName
66     (
67         surfaceRegistry::prefix/name/surfMesh::meshSubDir
68       / name + "." + nativeExt
69     );
73 Foam::fileName Foam::fileFormats::surfaceFormatsCore::findMeshInstance
75     const Time& t,
76     const word& surfName
79     fileName localName = localMeshFileName(surfName);
81     // Search back through the time directories list to find the time
82     // closest to and lower than current time
84     instantList ts = t.times();
85     label instanceI;
87     for (instanceI = ts.size()-1; instanceI >= 0; --instanceI)
88     {
89         if (ts[instanceI].value() <= t.timeOutputValue())
90         {
91             break;
92         }
93     }
95     // Noting that the current directory has already been searched
96     // for mesh data, start searching from the previously stored time directory
98     if (instanceI >= 0)
99     {
100         for (label i = instanceI; i >= 0; --i)
101         {
102             if (isFile(t.path()/ts[i].name()/localName))
103             {
104                 return ts[i].name();
105             }
106         }
107     }
109     return "constant";
113 Foam::fileName Foam::fileFormats::surfaceFormatsCore::findMeshFile
115     const Time& t,
116     const word& surfName
119     fileName localName = localMeshFileName(surfName);
121     // Search back through the time directories list to find the time
122     // closest to and lower than current time
124     instantList ts = t.times();
125     label instanceI;
127     for (instanceI = ts.size()-1; instanceI >= 0; --instanceI)
128     {
129         if (ts[instanceI].value() <= t.timeOutputValue())
130         {
131             break;
132         }
133     }
135     // Noting that the current directory has already been searched
136     // for mesh data, start searching from the previously stored time directory
138     if (instanceI >= 0)
139     {
140         for (label i = instanceI; i >= 0; --i)
141         {
142             fileName testName(t.path()/ts[i].name()/localName);
144             if (isFile(testName))
145             {
146                 return testName;
147             }
148         }
149     }
151     // fallback to "constant"
152     return t.path()/"constant"/localName;
154 #endif
157 bool Foam::fileFormats::surfaceFormatsCore::checkSupport
159     const wordHashSet& available,
160     const word& ext,
161     const bool verbose,
162     const word& functionName
165     if (available.found(ext))
166     {
167         return true;
168     }
169     else if (verbose)
170     {
171         wordList toc = available.toc();
172         SortableList<word> known(toc.xfer());
174         Info<<"Unknown file extension for " << functionName
175             << " : " << ext << nl
176             <<"Valid types: (";
177         // compact output:
178         forAll(known, i)
179         {
180             Info<<" " << known[i];
181         }
182         Info<<" )" << endl;
183     }
185     return false;
189 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
191 Foam::fileFormats::surfaceFormatsCore::surfaceFormatsCore()
195 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
197 Foam::fileFormats::surfaceFormatsCore::~surfaceFormatsCore()
201 // ************************************************************************* //