Adding cfMesh-v1.0 into the repository
[foam-extend-3.2.git] / src / meshLibrary / utilities / octrees / meshOctree / refinementControls / objectRefinement / boxRefinement.C
blob1ee99c006870f8dd624b0b82b048da017e97cc21
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | cfMesh: A library for mesh generation
4    \\    /   O peration     |
5     \\  /    A nd           | Author: Franjo Juretic (franjo.juretic@c-fields.com)
6      \\/     M anipulation  | Copyright (C) Creative Fields, Ltd.
7 -------------------------------------------------------------------------------
8 License
9     This file is part of cfMesh.
11     cfMesh 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     cfMesh 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 cfMesh.  If not, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
26 #include "boxRefinement.H"
27 #include "addToRunTimeSelectionTable.H"
28 #include "boundBox.H"
30 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
32 namespace Foam
35 defineTypeNameAndDebug(boxRefinement, 0);
36 addToRunTimeSelectionTable(objectRefinement, boxRefinement, dictionary);
38 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
40 boxRefinement::boxRefinement()
42     objectRefinement(),
43     centre_(),
44     lengthX_(-1.0),
45     lengthY_(-1.0),
46     lengthZ_(-1.0)
47     //angleX_(0.0),
48     //angleY_(0.0),
49     //angleZ_(0.0)
52 boxRefinement::boxRefinement
54     const word& name,
55     const scalar cellSize,
56     const point& centre,
57     const scalar lengthX,
58     const scalar lengthY,
59     const scalar lengthZ
60     //const scalar angleX,
61     //const scalar angleY,
62     //const scalar angleZ
65     objectRefinement(),
66     centre_(centre),
67     lengthX_(lengthX),
68     lengthY_(lengthY),
69     lengthZ_(lengthZ)
70     //angleX_(angleX),
71     //angleY_(angleY),
72     //angleZ_(angleZ)
74     setName(name);
75     setCellSize(cellSize);
78 boxRefinement::boxRefinement
80     const word& name,
81     const dictionary& dict
84     objectRefinement(name, dict)
86     this->operator=(dict);
89 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
91 bool boxRefinement::intersectsObject(const boundBox& bb) const
93     vector v(0.5*lengthX_, 0.5*lengthY_, 0.5*lengthZ_);
94     boundBox box(centre_ - v, centre_ + v);
95     
96     if( box.overlaps(bb) )
97         return true;
98     
99     return false;
102 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
104 dictionary boxRefinement::dict(bool ignoreType) const
106     dictionary dict;
108     dict.add("cellSize", cellSize());
109     dict.add("type", type());
111     dict.add("centre", centre_);
112     dict.add("lengthX", lengthX_);
113     dict.add("lengthY", lengthY_);
114     dict.add("lengthZ", lengthZ_);
115     
116     //dict.add("angleX", angleX_);
117     //dict.add("angleY", angleY_);
118     //dict.add("angleZ", angleZ_);
120     return dict;
123 void boxRefinement::write(Ostream& os) const
125     os  << " type:   " << type()
126         << " centre: " << centre_
127         << " lengthX: " << lengthX_
128         << " lengthY: " << lengthY_
129         << " lengthZ: " << lengthZ_;
130         //<< " angleX:  " << angleX_
131         //<< " angleY:  " << angleY_
132         //<< " angleZ:  " << angleZ_;
135 void boxRefinement::writeDict(Ostream& os, bool subDict) const
137     if( subDict )
138     {
139         os << indent << token::BEGIN_BLOCK << incrIndent << nl;
140     }
141     
142     os.writeKeyword("cellSize") << cellSize() << token::END_STATEMENT << nl;
144     // only write type for derived types
145     if( type() != typeName_() )
146     {
147         os.writeKeyword("type") << type() << token::END_STATEMENT << nl;
148     }
150     os.writeKeyword("centre") << centre_ << token::END_STATEMENT << nl;
151     os.writeKeyword("lengthX") << lengthX_ << token::END_STATEMENT << nl; 
152     os.writeKeyword("lengthY") << lengthY_ << token::END_STATEMENT << nl;
153     os.writeKeyword("lengthZ") << lengthZ_ << token::END_STATEMENT << nl;
154     //os.writeKeyword("angleX") << angleX_ << token::END_STATEMENT << nl;
155     //os.writeKeyword("angleY") << angleY_ << token::END_STATEMENT << nl;
156     //os.writeKeyword("angleZ") << angleZ_ << token::END_STATEMENT << nl;
158     if( subDict )
159     {
160         os << decrIndent << indent << token::END_BLOCK << endl;
161     }
164 void boxRefinement::operator=(const dictionary& d)
166     // allow as embedded sub-dictionary "coordinateSystem"
167     const dictionary& dict =
168     (
169         d.found(typeName_())
170       ? d.subDict(typeName_())
171       : d
172     );
174     // unspecified centre is (0 0 0)
175     if( dict.found("centre") )
176     {
177         dict.lookup("centre") >> centre_;
178     }
179     else
180     {
181         FatalErrorIn
182         (
183             "void boxRefinement::operator=(const dictionary& d)"
184         ) << "Entry centre is not sopecified!" << exit(FatalError);
185         centre_ = vector::zero;
186     }
188     // specify lengthX
189     if( dict.found("lengthX") )
190     {
191         lengthX_ = readScalar(dict.lookup("lengthX"));
192     }
193     else
194     {
195         FatalErrorIn
196         (
197             "void boxRefinement::operator=(const dictionary& d)"
198         ) << "Entry lengthX is not sopecified!" << exit(FatalError);
199         lengthX_ = -1.0;
200     }
201     
202     // specify lengthY
203     if( dict.found("lengthY") )
204     {
205         lengthY_ = readScalar(dict.lookup("lengthY"));
206     }
207     else
208     {
209         FatalErrorIn
210         (
211             "void boxRefinement::operator=(const dictionary& d)"
212         ) << "Entry lengthY is not sopecified!" << exit(FatalError);
213         lengthY_ = -1.0;
214     }
215     
216     // specify lengthZ
217     if( dict.found("lengthZ") )
218     {
219         lengthZ_ = readScalar(dict.lookup("lengthZ"));
220     }
221     else
222     {
223         FatalErrorIn
224         (
225             "void boxRefinement::operator=(const dictionary& d)"
226         ) << "Entry lengthZ is not sopecified!" << exit(FatalError);
227         lengthZ_ = -1.0;
228     }
229     
230     // specify angleX
231 /*    if( dict.found("angleX") )
232     {
233         angleX_ = readScalar(dict.lookup("angleX"));
234     }
235     else
236     {
237         angleX_ = -1.0;
238     }
239     
240     // specify angleY
241     if( dict.found("angleY") )
242     {
243         angleY_ = readScalar(dict.lookup("angleY"));
244     }
245     else
246     {
247         angleY_ = -1.0;
248     }
249     
250     // specify angleX
251     if( dict.found("angleZ") )
252     {
253         angleZ_ = readScalar(dict.lookup("angleZ"));
254     }
255     else
256     {
257         angleZ_ = -1.0;
258     }
262 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
264 Ostream& boxRefinement::operator<<(Ostream& os) const
266     os << "name " << name() << nl;
267     os << "cell size " << cellSize() << nl;
268     write(os);
269     return os;
271         
272 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
273         
274 } // End namespace Foam
276 // ************************************************************************* //