addSubtract.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
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.
15 
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.
20 
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/>.
23 
24 \*---------------------------------------------------------------------------*/
25 
26 #include "addSubtract.H"
28 
29 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
30 
31 namespace Foam
32 {
33  namespace calcTypes
34  {
37  }
38 }
39 
40 
41 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
42 
44 (
45  const Time& runTime,
46  const fvMesh& mesh,
47  const IOobject& baseFieldHeader
48 )
49 {
50  bool processed = false;
51 
52  IOobject addSubtractFieldHeader
53  (
54  addSubtractFieldName_,
55  runTime.timeName(),
56  mesh,
57  IOobject::MUST_READ
58  );
59 
60  if (addSubtractFieldHeader.headerOk())
61  {
62  writeAddSubtractField<scalar>
63  (
64  baseFieldHeader,
65  addSubtractFieldHeader,
66  mesh,
67  processed
68  );
69  writeAddSubtractField<vector>
70  (
71  baseFieldHeader,
72  addSubtractFieldHeader,
73  mesh,
74  processed
75  );
76  writeAddSubtractField<sphericalTensor>
77  (
78  baseFieldHeader,
79  addSubtractFieldHeader,
80  mesh,
81  processed
82  );
83  writeAddSubtractField<symmTensor>
84  (
85  baseFieldHeader,
86  addSubtractFieldHeader,
87  mesh,
88  processed
89  );
90  writeAddSubtractField<tensor>
91  (
92  baseFieldHeader,
93  addSubtractFieldHeader,
94  mesh,
95  processed
96  );
97 
98  if (!processed)
99  {
100  FatalError
101  << "Unable to process " << baseFieldName_
102  << " + " << addSubtractFieldName_ << nl
103  << "No call to addSubtract for fields of type "
104  << baseFieldHeader.headerClassName() << " + "
105  << addSubtractFieldHeader.headerClassName() << nl << nl
106  << exit(FatalError);
107  }
108  }
109  else
110  {
112  << "Unable to read addSubtract field: " << addSubtractFieldName_
113  << nl << exit(FatalError);
114  }
115 }
116 
117 
119 (
120  const Time& runTime,
121  const fvMesh& mesh,
122  const IOobject& baseFieldHeader
123 )
124 {
125  bool processed = false;
126 
127  writeAddSubtractValue<scalar>
128  (
129  baseFieldHeader,
130  addSubtractValueStr_,
131  mesh,
132  processed
133  );
134  writeAddSubtractValue<vector>
135  (
136  baseFieldHeader,
137  addSubtractValueStr_,
138  mesh,
139  processed
140  );
141  writeAddSubtractValue<sphericalTensor>
142  (
143  baseFieldHeader,
144  addSubtractValueStr_,
145  mesh,
146  processed
147  );
148  writeAddSubtractValue<symmTensor>
149  (
150  baseFieldHeader,
151  addSubtractValueStr_,
152  mesh,
153  processed
154  );
155  writeAddSubtractValue<tensor>
156  (
157  baseFieldHeader,
158  addSubtractValueStr_,
159  mesh,
160  processed
161  );
162 
163  if (!processed)
164  {
166  << "Unable to process " << baseFieldName_
167  << " + " << addSubtractValueStr_ << nl
168  << "No call to addSubtract for fields of type "
169  << baseFieldHeader.headerClassName() << nl << nl
170  << exit(FatalError);
171  }
172 }
173 
174 
175 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
176 
178 :
179  calcType(),
180  baseFieldName_(""),
181  calcType_(FIELD),
182  addSubtractFieldName_(""),
183  addSubtractValueStr_(""),
184  resultName_(""),
185  calcMode_(ADD)
186 {}
187 
188 
189 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
190 
192 {}
193 
194 
195 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
196 
198 {
199  argList::validArgs.append("add");
200  argList::validArgs.append("baseField");
201  argList::validArgs.append("calcMode");
202  argList::validOptions.insert("field", "fieldName");
203  argList::validOptions.insert("value", "valueString");
204  argList::validOptions.insert("resultName", "fieldName");
205 }
206 
207 
209 (
210  const argList& args,
211  const Time& runTime,
212  const fvMesh& mesh
213 )
214 {
215  baseFieldName_ = args[2];
216  const word calcModeName = args[3];
217 
218  if (calcModeName == "add")
219  {
220  calcMode_ = ADD;
221  }
222  else if (calcModeName == "subtract")
223  {
224  calcMode_ = SUBTRACT;
225  }
226  else
227  {
229  << "Invalid calcMode: " << calcModeName << nl
230  << " Valid calcModes are add and subtract" << nl
231  << exit(FatalError);
232  }
233 
234  if (args.optionReadIfPresent("field", addSubtractFieldName_))
235  {
236  calcType_ = FIELD;
237  }
238  else if (args.optionReadIfPresent("value", addSubtractValueStr_))
239  {
240  calcType_ = VALUE;
241  }
242  else
243  {
245  << "addSubtract requires either -field or -value option"
246  << nl << exit(FatalError);
247  }
248 
249  args.optionReadIfPresent("resultName", resultName_);
250 }
251 
252 
254 (
255  const argList& args,
256  const Time& runTime,
257  const fvMesh& mesh
258 )
259 {
260  IOobject baseFieldHeader
261  (
262  baseFieldName_,
263  runTime.timeName(),
264  mesh,
266  );
267 
268  if (baseFieldHeader.headerOk())
269  {
270  switch (calcType_)
271  {
272  case FIELD:
273  {
274  writeAddSubtractFields(runTime, mesh, baseFieldHeader);
275  break;
276  }
277  case VALUE:
278  {
279  writeAddSubtractValues(runTime, mesh, baseFieldHeader);
280  break;
281  }
282  default:
283  {
285  << "unknown calcType " << calcType_ << nl
286  << abort(FatalError);
287  }
288  }
289  }
290  else
291  {
293  << "Unable to read base field: " << baseFieldName_
294  << nl << exit(FatalError);
295  }
296 }
297 
298 
299 // ************************************************************************* //
Foam::argList::validArgs
static SLList< string > validArgs
A list of valid (mandatory) arguments.
Definition: argList.H:143
Foam::IOobject
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:91
Foam::Time
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:68
Foam::word
A class for handling words, derived from string.
Definition: word.H:59
addSubtract.H
Foam::calcTypes::addSubtract::preCalc
virtual void preCalc(const argList &args, const Time &runTime, const fvMesh &mesh)
Pre-time loop calculations.
Definition: addSubtract.C:209
Foam::calcTypes::addSubtract::addSubtract
addSubtract()
Construct null.
Definition: addSubtract.C:177
Foam::argList
Extract command arguments and options from the supplied argc and argv parameters.
Definition: argList.H:97
Foam::IOobject::MUST_READ
@ MUST_READ
Definition: IOobject.H:108
Foam::calcTypes::addSubtract::writeAddSubtractFields
void writeAddSubtractFields(const Time &runTime, const fvMesh &mesh, const IOobject &baseFieldHeader)
Calc and output field addSubtractitions.
Definition: addSubtract.C:44
Foam::IOobject::headerOk
bool headerOk()
Read and check header info.
Definition: IOobject.C:439
Foam::IOobject::headerClassName
const word & headerClassName() const
Return name of the class name read from header.
Definition: IOobject.H:279
Foam::nl
static const char nl
Definition: Ostream.H:260
Foam::calcTypes::defineTypeNameAndDebug
defineTypeNameAndDebug(addSubtract, 0)
Foam::argList::validOptions
static HashTable< string > validOptions
A list of valid options.
Definition: argList.H:146
Foam::FatalError
error FatalError
Foam::dictionary
A list of keyword definitions, which are a keyword followed by any number of values (e....
Definition: dictionary.H:137
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:18
addToRunTimeSelectionTable.H
Macros for easy insertion into run-time selection tables.
Foam::calcTypes::addToRunTimeSelectionTable
addToRunTimeSelectionTable(calcType, addSubtract, dictionary)
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:78
Foam
Namespace for OpenFOAM.
Definition: combustionModel.C:30
Foam::abort
errorManip< error > abort(error &err)
Definition: errorManip.H:131
Foam::exit
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:124
Foam::calcTypes::addSubtract::init
virtual void init()
Initialise - typically setting static variables,.
Definition: addSubtract.C:197
Foam::calcTypes::addSubtract::writeAddSubtractValues
void writeAddSubtractValues(const Time &runTime, const fvMesh &mesh, const IOobject &baseFieldHeader)
Calc and output field and value addSubtractitions.
Definition: addSubtract.C:119
FatalErrorInFunction
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:318
Foam::calcTypes::addSubtract::~addSubtract
virtual ~addSubtract()
Destructor.
Definition: addSubtract.C:191
Foam::Time::timeName
static word timeName(const scalar, const int precision=precision_)
Return time name of given scalar time.
Definition: Time.C:741
Foam::calcTypes::addSubtract::calc
virtual void calc(const argList &args, const Time &runTime, const fvMesh &mesh)
Time loop calculations.
Definition: addSubtract.C:254
Foam::calcTypes::addSubtract
adds/subtracts a field or value to/from a base field.
Definition: addSubtract.H:63
args
Foam::argList args(argc, argv)
Foam::argList::optionReadIfPresent
bool optionReadIfPresent(const word &opt, T &) const
Read a value from the named option if present.
Definition: argListI.H:198
Foam::calcType
Base class for post-processing calculation functions.
Definition: calcType.H:58