BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / applications / utilities / postProcessing / velocityField / Co / Co.C
blob9e6d6d2485e690d4eee5c285047d2aab9cb8c2b2
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
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
13     the Free Software Foundation, either version 3 of the License, or
14     (at your 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, see <http://www.gnu.org/licenses/>.
24 Application
25     Co
27 Description
28     Calculates and writes the Co number as a volScalarField obtained
29     from field phi.
31     The -noWrite option just outputs the max values without writing the
32     field.
34 \*---------------------------------------------------------------------------*/
36 #include "calc.H"
37 #include "fvc.H"
39 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
41 void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh)
43     bool writeResults = !args.optionFound("noWrite");
45     IOobject phiHeader
46     (
47         "phi",
48         runTime.timeName(),
49         mesh,
50         IOobject::MUST_READ
51     );
53     if (phiHeader.headerOk())
54     {
55         volScalarField Co
56         (
57             IOobject
58             (
59                 "Co",
60                 runTime.timeName(),
61                 mesh,
62                 IOobject::NO_READ
63             ),
64             mesh,
65             dimensionedScalar("0", dimless, 0),
66             zeroGradientFvPatchScalarField::typeName
67         );
69         Info<< "    Reading phi" << endl;
70         surfaceScalarField phi(phiHeader, mesh);
72         if (phi.dimensions() == dimensionSet(1, 0, -1, 0, 0))
73         {
74             Info<< "    Calculating compressible Co" << endl;
76             Info<< "    Reading rho" << endl;
77             volScalarField rho
78             (
79                 IOobject
80                 (
81                     "rho",
82                     runTime.timeName(),
83                     mesh,
84                     IOobject::MUST_READ
85                 ),
86                 mesh
87             );
89             Co.dimensionedInternalField() =
90                 (0.5*runTime.deltaT())
91                *fvc::surfaceSum(mag(phi))().dimensionedInternalField()
92                /(rho*mesh.V());
93             Co.correctBoundaryConditions();
94         }
95         else if (phi.dimensions() == dimensionSet(0, 3, -1, 0, 0))
96         {
97             Info<< "    Calculating incompressible Co" << endl;
99             Co.dimensionedInternalField() =
100                 (0.5*runTime.deltaT())
101                *fvc::surfaceSum(mag(phi))().dimensionedInternalField()
102                /mesh.V();
103             Co.correctBoundaryConditions();
104         }
105         else
106         {
107             FatalErrorIn(args.executable())
108                 << "Incorrect dimensions of phi: " << phi.dimensions()
109                 << abort(FatalError);
110         }
112         Info<< "Co max : " << max(Co).value() << endl;
114         if (writeResults)
115         {
116             Co.write();
117         }
118     }
119     else
120     {
121         Info<< "    No phi" << endl;
122     }
124     Info<< "\nEnd\n" << endl;
128 // ************************************************************************* //