initial commit for version 1.6.x patch release
[OpenFOAM-1.6.x.git] / src / postProcessing / foamCalcFunctions / basic / addSubtract / writeAddSubtractField.C
blob03b01a12c91c7c18d958bb3cfa97c675b80e073f
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2008-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 \*---------------------------------------------------------------------------*/
27 template<class Type>
28 void Foam::calcTypes::addSubtract::writeAddSubtractField
30     const IOobject& baseHeader,
31     const IOobject& addHeader,
32     const fvMesh& mesh,
33     bool& processed
36     typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
38     if
39     (
40         baseHeader.headerClassName() == fieldType::typeName
41      && baseHeader.headerClassName() == addHeader.headerClassName()
42     )
43     {
44         if (resultName_ == "")
45         {
46             if (calcMode_ == ADD)
47             {
48                 resultName_ = baseHeader.name() + "_add_" + addHeader.name();
49             }
50             else
51             {
52                 resultName_ = baseHeader.name() + "_subtract_"
53                     + addHeader.name();
54             }
55         }
57         Info<< "    Reading " << baseHeader.name() << endl;
58         fieldType baseField(baseHeader, mesh);
60         Info<< "    Reading " << addHeader.name() << endl;
61         fieldType addField(addHeader, mesh);
63         if (baseField.dimensions() == addField.dimensions())
64         {
65             Info<< "    Calculating " << resultName_ << endl;
67             fieldType newField
68             (
69                 IOobject
70                 (
71                     resultName_,
72                     mesh.time().timeName(),
73                     mesh,
74                     IOobject::NO_READ
75                 ),
76                 calcMode_ == ADD ? baseField + addField : baseField - addField
77             );
78             newField.write();
79         }
80         else
81         {
82             Info<< "    Cannot calculate " << resultName_ << nl
83                 << "    - inconsistent dimensions: "
84                 << baseField.dimensions() << " - " << addField.dimensions()
85                 << endl;
86         }
88         processed = true;
89     }
93 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //