Merge branch 'upstream/OpenFOAM' into master
[freefoam.git] / applications / utilities / postProcessing / miscellaneous / ptot / ptot.C
blob5e93344b5ffaae0c83ea7249b263ffb485b6673d
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 Application
26     ptot
28 Description
29     For each time: calculate the total pressure.
31 Usage
33     - ptot [OPTIONS]
35     @param -noZero \n
36     Ignore timestep 0.
38     @param -constant \n
39     Include the constant directory.
41     @param -time \<time\>\n
42     Apply only to specific time.
44     @param -latestTime \n
45     Only apply to latest time step.
47     @param -case \<dir\>\n
48     Case directory.
50     @param -parallel \n
51     Run in parallel.
53     @param -help \n
54     Display help message.
56     @param -doc \n
57     Display Doxygen API documentation page for this application.
59     @param -srcDoc \n
60     Display Doxygen source documentation page for this application.
62 \*---------------------------------------------------------------------------*/
64 #include <finiteVolume/fvCFD.H>
66 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
68 int main(int argc, char *argv[])
70     timeSelector::addOptions();
72 #   include <OpenFOAM/setRootCase.H>
73 #   include <OpenFOAM/createTime.H>
75     instantList timeDirs = timeSelector::select0(runTime, args);
77 #   include <OpenFOAM/createMesh.H>
79     forAll(timeDirs, timeI)
80     {
81         runTime.setTime(timeDirs[timeI], timeI);
83         Info<< "Time = " << runTime.timeName() << endl;
85         IOobject pheader
86         (
87             "p",
88             runTime.timeName(),
89             mesh,
90             IOobject::MUST_READ
91         );
93         IOobject Uheader
94         (
95             "U",
96             runTime.timeName(),
97             mesh,
98             IOobject::MUST_READ
99         );
102         // Check p and U exist
103         if (pheader.headerOk() && Uheader.headerOk())
104         {
105             mesh.readUpdate();
107             Info<< "    Reading p" << endl;
108             volScalarField p(pheader, mesh);
110             Info<< "    Reading U" << endl;
111             volVectorField U(Uheader, mesh);
113             Info<< "    Calculating ptot" << endl;
114             if (p.dimensions() == dimensionSet(0, 2, -2, 0, 0))
115             {
116                 volScalarField ptot
117                 (
118                     IOobject
119                     (
120                         "ptot",
121                         runTime.timeName(),
122                         mesh,
123                         IOobject::NO_READ
124                     ),
125                     p + 0.5*magSqr(U)
126                 );
127                 ptot.write();
128             }
129             else
130             {
131                 IOobject rhoheader
132                 (
133                     "rho",
134                     runTime.timeName(),
135                     mesh,
136                     IOobject::MUST_READ
137                 );
139                 // Check rho exists
140                 if (rhoheader.headerOk())
141                 {
142                     Info<< "    Reading rho" << endl;
143                     volScalarField rho(rhoheader, mesh);
145                     volScalarField ptot
146                     (
147                         IOobject
148                         (
149                             "ptot",
150                             runTime.timeName(),
151                             mesh,
152                             IOobject::NO_READ
153                         ),
154                         p + 0.5*rho*magSqr(U)
155                     );
156                     ptot.write();
157                 }
158                 else
159                 {
160                     Info<< "    No rho" << endl;
161                 }
162             }
163         }
164         else
165         {
166             Info<< "    No p or U" << endl;
167         }
169         Info<< endl;
170     }
172     return 0;
176 // ************************ vim: set sw=4 sts=4 et: ************************ //