Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / postProcessing / functionObjects / field / maxFieldCell / maxFieldCell.C
blob092a66b2fe298d787df7eb4da17667f1a36fc704
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 Author
25     Hrvoje Jasak, Wikki Ltd.  All rights reserved
27 \*---------------------------------------------------------------------------*/
29 #include "maxFieldCell.H"
30 #include "addToRunTimeSelectionTable.H"
31 #include "volFields.H"
33 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
35 namespace Foam
37     defineTypeNameAndDebug(maxFieldCell, 0);
39     addToRunTimeSelectionTable
40     (
41         functionObject,
42         maxFieldCell,
43         dictionary
44     );
48 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
51 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
53 Foam::maxFieldCell::maxFieldCell
55     const word& name,
56     const Time& t,
57     const dictionary& dict
60     functionObject(name),
61     time_(t),
62     regionName_(polyMesh::defaultRegion),
63     fieldName_(dict.lookup("name"))
65     if (dict.found("region"))
66     {
67         dict.lookup("region") >> regionName_;
68     }
70     Info<< "Creating maxFieldCell for field "
71         << fieldName_ << endl;
75 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
77 bool Foam::maxFieldCell::start()
79     return true;
83 bool Foam::maxFieldCell::execute()
85     const fvMesh& mesh =
86         time_.lookupObject<fvMesh>(regionName_);
88     if (mesh.foundObject<volScalarField>(fieldName_))
89     {
90         const volScalarField& f = mesh.lookupObject<volScalarField>
91         (
92             fieldName_
93         );
94         const scalarField& fIn = f.internalField();
96         if (!fIn.empty())
97         {
98             label maxCellID = 0;
99             scalar maxValue = mag(fIn[maxCellID]);
101             forAll (fIn, cellI)
102             {
103                 if (mag(fIn[cellI]) > maxValue)
104                 {
105                     maxCellID = cellI;
106                     maxValue = mag(fIn[maxCellID]);
107                 }
108             }
110             Info<< "Field " << fieldName_ << " max magnitude = " << maxValue
111                 << " in cell " << maxCellID << endl;
113             return true;
114         }
115         else
116         {
117             Info<< "Field "  << fieldName_ << " empty.  Skipping." << endl;
119             return false;
120         }
121     }
122     else if (mesh.foundObject<volVectorField>(fieldName_))
123     {
124         const volVectorField& f =
125             mesh.lookupObject<volVectorField>(fieldName_);
127         const vectorField& fIn = f.internalField();
129         if (!fIn.empty())
130         {
131             label maxCellID = 0;
132             scalar maxValue = mag(fIn[maxCellID]);
134             forAll (fIn, cellI)
135             {
136                 if (mag(fIn[cellI]) > maxValue)
137                 {
138                     maxCellID = cellI;
139                     maxValue = mag(fIn[maxCellID]);
140                 }
141             }
143             Info<< "Field " << fieldName_ << " max magnitude = " << maxValue
144                 << " in cell " << maxCellID << endl;
146             return true;
147         }
148         else
149         {
150             Info<< "Field "  << fieldName_ << " empty.  Skipping." << endl;
152             return false;
153         }
154     }
155     else
156     {
157         Info<< "Field "  << fieldName_ << " not found.  Skipping." << endl;
159         return false;
160     }
164 bool Foam::maxFieldCell::read(const dictionary& dict)
166     fieldName_ = word(dict.lookup("name"));
168     if (dict.found("region"))
169     {
170         dict.lookup("region") >> regionName_;
171     }
173     return false;
176 // ************************************************************************* //