Report patch name instead of index in debug
[foam-extend-3.2.git] / src / foam / coordinateSystems / parabolicCylindricalCS.C
blob880c5ad515ffa9214440fb07ab443c8fee9287fe
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 "parabolicCylindricalCS.H"
27 #include "mathematicalConstants.H"
28 #include "boundBox.H"
29 #include "addToRunTimeSelectionTable.H"
31 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
33 namespace Foam
35     defineTypeNameAndDebug(parabolicCylindricalCS, 0);
36     addToRunTimeSelectionTable
37     (
38         coordinateSystem,
39         parabolicCylindricalCS,
40         dictionary
41     );
45 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
47 Foam::parabolicCylindricalCS::parabolicCylindricalCS(const bool inDegrees)
49     coordinateSystem(),
50     inDegrees_(inDegrees)
54 Foam::parabolicCylindricalCS::parabolicCylindricalCS
56     const word& name,
57     const point& origin,
58     const coordinateRotation& cr,
59     const bool inDegrees
62     coordinateSystem(name, origin, cr),
63     inDegrees_(inDegrees)
67 Foam::parabolicCylindricalCS::parabolicCylindricalCS
69     const word& name,
70     const dictionary& dict
73     coordinateSystem(name, dict),
74     inDegrees_(dict.lookupOrDefault<Switch>("degrees", true))
78 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
80 Foam::coordinateSystem::spanInfo
81 Foam::parabolicCylindricalCS::spanLimited() const
83     spanInfo b(Pair<bool>(true, true));
85     // Upper bound or r is unlimited
86     b[0] = Pair<bool>(true, false);
88     // z is unlimited
89     b[2] = Pair<bool>(false, false);
91     return b;
95 Foam::boundBox Foam::parabolicCylindricalCS::spanBounds() const
97     return boundBox
98     (
99         vector
100         (
101             0,
102             ( inDegrees_ ? -180.0 : -mathematicalConstant::pi ),
103             -GREAT
104         ),
105         vector
106         (
107             GREAT,
108             ( inDegrees_ ? 180.0 : mathematicalConstant::pi ),
109             GREAT
110         )
111     );
115 bool Foam::parabolicCylindricalCS::inDegrees() const
117     return inDegrees_;
121 Foam::Switch& Foam::parabolicCylindricalCS::inDegrees()
123     return inDegrees_;
127 Foam::vector Foam::parabolicCylindricalCS::localToGlobal
129     const vector& local,
130     bool translate
131 ) const
133     // Notation: u = local.x() v = local.y() z = local.z();
134     if (local.y() < 0.0)
135     {
136         FatalErrorIn
137         (
138             "parabolicCylindricalCS::localToGlobal(const vector&, bool) const"
139         )
140             << "parabolic cylindrical coordinates v < 0"
141             << abort(FatalError);
142     }
144     return coordinateSystem::localToGlobal
145     (
146         vector
147         (
148             0.5*(sqr(local.x()) - sqr(local.y())),
149             local.x()*local.y(),
150             local.z()
151         ),
152         translate
153     );
157 Foam::tmp<Foam::vectorField> Foam::parabolicCylindricalCS::localToGlobal
159     const vectorField& local,
160     bool translate
161 ) const
163     if (min(local.component(vector::Y)) < 0.0)
164     {
165         FatalErrorIn
166         (
167             "parabolicCylindricalCS::localToGlobal"
168             "(const vectorField&, bool) const"
169         )   << "parabolic cylindrical coordinates v < 0"
170             << abort(FatalError);
171     }
173     vectorField lc(local.size());
174     lc.replace
175     (
176         vector::X,
177         0.5*
178         (
179             sqr(local.component(vector::X))
180           - sqr(local.component(vector::Y))
181         )
182     );
184     lc.replace
185     (
186         vector::Y,
187         local.component(vector::X) * local.component(vector::Y)
188     );
190     lc.replace
191     (
192         vector::Z,
193         local.component(vector::Z)
194     );
196     return coordinateSystem::localToGlobal(lc, translate);
200 Foam::vector Foam::parabolicCylindricalCS::globalToLocal
202     const vector& global,
203     bool translate
204 ) const
206     notImplemented
207     (
208         "parabolicCylindricalCS::globalToLocal(const vector&, bool) const"
209     );
211     return vector::zero;
214 Foam::tmp<Foam::vectorField> Foam::parabolicCylindricalCS::globalToLocal
216     const vectorField& global,
217     bool translate
218 ) const
220     notImplemented
221     (
222         "parabolicCylindricalCS::globalToLocal(const vectorField&, bool) const"
223     );
225     return tmp<vectorField>(vectorField::null());
229 void Foam::parabolicCylindricalCS::write(Ostream& os) const
231     coordinateSystem::write(os);
232     os << "inDegrees: " << inDegrees() << endl;
236 void Foam::parabolicCylindricalCS::writeDict(Ostream& os, bool subDict) const
238     if (subDict)
239     {
240         os  << indent << nl
241             << indent << token::BEGIN_BLOCK << incrIndent << nl;
242     }
244     coordinateSystem::writeDict(os, false);
245     os.writeKeyword("inDegrees") << inDegrees_ << token::END_STATEMENT << nl;
247     if (subDict)
248     {
249         os << decrIndent << indent << token::END_BLOCK << endl;
250     }
254 // ************************************************************************* //