Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / foam / coordinateSystems / newCoordinateSystem.C
blobed97386875d2e8383aaf9e48d94ef9f456d49710
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 "coordinateSystem.H"
27 #include "dictionary.H"
29 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
31 Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New
33     const word& name,
34     const dictionary& dict
37     if (debug)
38     {
39         Pout<< "coordinateSystem::New(const word&, const dictionary&) : "
40             << "constructing coordinateSystem"
41             << endl;
42     }
44     // construct base class directly, also allow 'cartesian' as an alias
45     word coordType(typeName_());
46     if
47     (
48         !dict.readIfPresent("type", coordType)
49      || coordType == typeName_()
50      || coordType == "cartesian"
51     )
52     {
53         return autoPtr<coordinateSystem>(new coordinateSystem(name, dict));
54     }
56     dictionaryConstructorTable::iterator cstrIter =
57         dictionaryConstructorTablePtr_->find(coordType);
59     if (cstrIter == dictionaryConstructorTablePtr_->end())
60     {
61         FatalIOErrorIn
62         (
63             "coordinateSystem::New(const word&, const dictionary&)",
64             dict
65         )   << "Unknown coordinateSystem type " << coordType << nl << nl
66             << "Valid coordinateSystem types are :" << nl
67             << "[default: " << typeName_() << "]"
68             << dictionaryConstructorTablePtr_->sortedToc()
69             << exit(FatalIOError);
70     }
72     return autoPtr<coordinateSystem>(cstrIter()(name, dict));
76 Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New
78     const word& coordType,
79     const word& name,
80     const point& origin,
81     const coordinateRotation& cr
84     if (debug)
85     {
86         Pout<< "coordinateSystem::New(const word&, const word&, "
87             << "const point&, const coordinateRotation&) : "
88                "constructing coordinateSystem"
89             << endl;
90     }
92     origRotationConstructorTable::iterator cstrIter =
93         origRotationConstructorTablePtr_->find(coordType);
95     if (cstrIter == origRotationConstructorTablePtr_->end())
96     {
97         FatalErrorIn
98         (
99             "coordinateSystem::New(const word&, const word&, "
100             "const point&, const coordinateRotation&) : "
101             "constructing coordinateSystem"
102         )   << "Unknown coordinateSystem type " << coordType << nl << nl
103             << "Valid coordinateSystem types are :" << nl
104             << origRotationConstructorTablePtr_->sortedToc()
105             << exit(FatalError);
106     }
108     return autoPtr<coordinateSystem>(cstrIter()(name, origin, cr));
112 Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New
114     Istream& is
117     word name(is);
118     dictionary dict(is);
120     return New(name, dict);
123 // ************************************************************************* //