Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / equationReader / equationSource / equationSource.H
blobb13634d162e4765770a8f9de37438e4323ec3085
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 Class
25     Foam::equationSource
27 Description
28     A set of data sources for the equationReader templated by Type.
30 SourceFiles
31     equationSourceI.H
32     equationSource.C
33     equationSourceTemplates.C
35 Author
36     David L. F. Gaden
38 \*---------------------------------------------------------------------------*/
40 #ifndef equationSource_H
41 #define equationSource_H
43 #include "word.H"
44 #include "UPtrList.H"
45 #include "wordList.H"
46 #include "PtrList.H"
47 #include "GeometricFields.H"
50 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
52 namespace Foam
55 /*---------------------------------------------------------------------------*\
56                         Class equationSource Declaration
57 \*---------------------------------------------------------------------------*/
59 template <class Type>
60 class equationSource
63     // Private data
65         //- Name of templated type
66         word templateTypeName_;
68         //- Individual "Type"s as sources
69         UPtrList<const Type> singles_;
71         //- Names associated with singles_
72         wordList singleNames_;
74         //- Dimensions associated with singles_
75         PtrList<dimensionSet> singleDimensions_;
77         //- Fields of Type - holds the source data for regular
78         //  Field<Type>'s, but also can hold source data for GeometricFields
79         //      fields_[sourceIndex][geoIndex][cellIndex]
80         //  Where:
81         //      sourceIndex is the source variable index
82         //      geoIndex is to accommodate GeometricFields:
83         //          0 = internalField (or standard Field<Type>)
84         //          1+ = boundary patch as a Field<Type>
85         //      cellIndex is the index number of the Field<Type>
86         PtrList<UPtrList<const Field<Type> > > fields_;
88         //- Dimensions associated with the fields_
89         PtrList<dimensionSet> fieldDimensions_;
91         //- Names associated with the fields_
92         wordList fieldNames_;
94 public:
96     // Static data members
98         static const char* const typeName;
101     // Constructors
103         //- Construct from components
104         explicit equationSource
105         (
106             const word& templateTypeName
107         );
109     // Destructor
110     ~equationSource();
112     // Member functions
114         // Access
116             //- Individual "Type"s as sources
117             inline const UPtrList<const Type>& singles() const;
119             //- Names associated with singles
120             inline const wordList& singleNames() const;
122             //- Dimensions associated with singles_
123             inline const PtrList<dimensionSet>& singleDimensions() const;
125             //- Fields of Type - holds the source data for regular
126             inline const PtrList<UPtrList<const Field<Type> > >&
127                 fields() const;
129             //- Dimensions associated with the fields_
130             inline const PtrList<dimensionSet>& fieldDimensions() const;
132             //- Names associated with the fields_
133             inline const wordList& fieldNames() const;
135         // Data lookup
137             //- True if lookupName is a valid single source
138             bool foundSingle(const word& lookupName) const;
140             //- True if lookupName is a valid field source
141             bool foundField(const word& lookupName) const;
143             //- Returns single sourceIndex for lookupName - fails if not found
144             label lookupSingle(const word& lookupName) const;
146             //- Returns field sourceIndex for lookupName - fails if not found
147             label lookupField(const word& lookupName) const;
149             //- Returns the number of fields associated with sourceIndex
150             label geoSize(label sourceIndex) const;
152             //- Returns the field size associated with source and geo indices
153             label fieldSize
154             (
155                 label sourceIndex,
156                 label geoIndex
157             ) const;
159             //- Return componentIndex for a given component name
160             //  Returns -1 if not found (error handled by calling function)
161             label lookupComponentIndex(const word& componentName) const;
163             //- Returns the number of singles_
164             label nSingles() const;
166             //- Returns the number of fields_
167             label nFields() const;
169         // Data retrieval
171             //- Retrieve scalar value from singles
172             const scalar& singleValue
173             (
174                 label sourceIndex,
175                 label componentIndex
176             ) const;
178             //- Retrieve dimensions from singles
179             const dimensionSet& singleDimensions(label sourceIndex) const;
181             //- Retrieve name associated with singles
182             const word& singleName(label sourceIndex) const;
184             //- Retrieve scalar value from field
185             const scalar& fieldValue
186             (
187                 label sourceIndex,
188                 label componentIndex,
189                 label cellIndex,
190                 label geoIndex
191             ) const;
193             //- Retrieve component as entire field
194             void fullFieldValue
195             (
196                 scalarField& result,
197                 label sourceIndex,
198                 label componentIndex,
199                 label geoIndex
200             ) const;
202             //- Retrieve dimensions from field
203             const dimensionSet& fieldDimensions(label sourceIndex) const;
205             //- Retrieve name associated with field
206             const word& fieldName(label sourceIndex) const;
208         // Adding data sources
210             //- Add single source
211             void addSource
212             (
213                 const Type& singleIn,
214                 const word& name,
215                 dimensionSet dimensions = dimless
216             );
218             //- Add dimensionedSingle source
219             void addSource
220             (
221                 const dimensioned<Type>& dSingleIn
222             );
224             //- Add field source
225             void addSource
226             (
227                 const Field<Type>& fieldIn,
228                 const word& name,
229                 dimensionSet dimensions = dimless
230             );
232             //- Add dimensioned field source
233             template<class GeoMesh>
234             void addSource
235             (
236                 const DimensionedField<Type, GeoMesh>& dFieldIn
237             );
239             //- Add geometric field source
240             template<template<class> class PatchField, class GeoMesh>
241             void addSource
242             (
243                 const GeometricField<Type, PatchField, GeoMesh>& gFieldIn
244             );
246         // Removing data sources
248             //- Remove a single source and reorder index
249             void removeSingle(label sourceIndex);
251             //- Remove a field source and reorderd index
252             void removeField(label sourceIndex);
254         // Input / output
256             //- Output sources to a dictionary
257             dictionary outputDictionary() const;
260 template<>
261 label equationSource<scalar>::lookupComponentIndex
263     const word& componentName
264 ) const;
266 template<>
267 const scalar& equationSource<scalar>::singleValue
269     label sourceIndex,
270     label componentIndex
271 ) const;
273 template<>
274 const scalar& equationSource<scalar>::fieldValue
276     label sourceIndex,
277     label componentIndex,
278     label cellIndex,
279     label geoIndex
280 ) const;
282 template<>
283 void equationSource<scalar>::fullFieldValue
285     scalarField& result,
286     label sourceIndex,
287     label componentIndex,
288     label geoIndex
289 ) const;
292 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
294 } // End namespace Foam
296 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
298 #include "equationSourceI.H"
299 #ifdef NoRepository
300 #   include "equationSource.C"
301 //#   include "equationScalarSource.C"
302 #endif
304 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
306 #endif
308 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //