initial commit for version 1.6.x patch release
[OpenFOAM-1.6.x.git] / src / meshTools / coordinateSystems / coordinateSystemNew.C
blob9a6ec2a0b4cec370ff2af0790867b54891d59d90
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2009 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 the
13     Free Software Foundation; either version 2 of the License, or (at your
14     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, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 \*---------------------------------------------------------------------------*/
27 #include "coordinateSystem.H"
28 #include "dictionary.H"
30 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
32 Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New
34     const word& name,
35     const dictionary& dict
38     if (debug)
39     {
40         Pout<< "coordinateSystem::New(const word&, const dictionary&) : "
41             << "constructing coordinateSystem"
42             << endl;
43     }
45     // construct base class directly, also allow 'cartesian' as an alias
46     word coordType(typeName_());
47     if
48     (
49         !dict.readIfPresent("type", coordType)
50      || coordType == typeName_()
51      || coordType == "cartesian"
52     )
53     {
54         return autoPtr<coordinateSystem>(new coordinateSystem(name, dict));
55     }
57     dictionaryConstructorTable::iterator cstrIter =
58         dictionaryConstructorTablePtr_->find(coordType);
60     if (cstrIter == dictionaryConstructorTablePtr_->end())
61     {
62         FatalIOErrorIn
63         (
64             "coordinateSystem::New(const word&, const dictionary&)",
65             dict
66         )   << "Unknown coordinateSystem type " << coordType << nl << nl
67             << "Valid coordinateSystem types are :" << nl
68             << "[default: " << typeName_() << "]"
69             << dictionaryConstructorTablePtr_->toc()
70             << exit(FatalIOError);
71     }
73     return autoPtr<coordinateSystem>(cstrIter()(name, dict));
77 Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New
79     const word& coordType,
80     const word& name,
81     const point& origin,
82     const coordinateRotation& cr
85     if (debug)
86     {
87         Pout<< "coordinateSystem::New(const word&, const word&, "
88             << "const point&, const coordinateRotation&) : "
89                "constructing coordinateSystem"
90             << endl;
91     }
93     origRotationConstructorTable::iterator cstrIter =
94         origRotationConstructorTablePtr_->find(coordType);
96     if (cstrIter == origRotationConstructorTablePtr_->end())
97     {
98         FatalErrorIn
99         (
100             "coordinateSystem::New(const word&, const word&, "
101             "const point&, const coordinateRotation&) : "
102             "constructing coordinateSystem"
103         )   << "Unknown coordinateSystem type " << coordType << nl << nl
104             << "Valid coordinateSystem types are :" << nl
105             << origRotationConstructorTablePtr_->toc()
106             << exit(FatalError);
107     }
109     return autoPtr<coordinateSystem>(cstrIter()(name, origin, cr));
113 Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New
115     Istream& is
118     word name(is);
119     dictionary dict(is);
121     return New(name, dict);
124 // ************************************************************************* //