37 #define checkField(df1, df2, op) \
38 if (&(df1).mesh() != &(df2).mesh()) \
40 FatalErrorInFunction \
41 << "different mesh for fields " \
42 << (df1).name() << " and " << (df2).name() \
43 << " during operation " << op \
44 << abort(FatalError); \
50 template<
class Type,
class GeoMesh>
55 const dimensionSet& dims,
56 const Field<Type>& field
64 if (field.size() && field.size() != GeoMesh::size(
mesh))
67 <<
"size of field = " << field.size()
68 <<
" is not the same as the size of mesh = "
69 << GeoMesh::size(
mesh)
75 template<
class Type,
class GeoMesh>
76 DimensionedField<Type, GeoMesh>::DimensionedField
80 const dimensionSet& dims,
81 const bool checkIOFlags
85 Field<Type>(GeoMesh::size(
mesh)),
96 template<
class Type,
class GeoMesh>
97 DimensionedField<Type, GeoMesh>::DimensionedField
101 const dimensioned<Type>& dt,
102 const bool checkIOFlags
106 Field<Type>(GeoMesh::size(
mesh), dt.value()),
108 dimensions_(dt.dimensions())
117 template<
class Type,
class GeoMesh>
118 DimensionedField<Type, GeoMesh>::DimensionedField
120 const DimensionedField<Type, GeoMesh>& df
126 dimensions_(df.dimensions_)
130 template<
class Type,
class GeoMesh>
131 DimensionedField<Type, GeoMesh>::DimensionedField
133 DimensionedField<Type, GeoMesh>& df,
137 regIOobject(df, reUse),
138 Field<Type>(df, reUse),
140 dimensions_(df.dimensions_)
144 template<
class Type,
class GeoMesh>
145 DimensionedField<Type, GeoMesh>::DimensionedField
147 const Xfer<DimensionedField<Type, GeoMesh> >& df
150 regIOobject(df(), true),
153 dimensions_(df->dimensions_)
157 #ifndef NoConstructFromTmp
158 template<
class Type,
class GeoMesh>
159 DimensionedField<Type, GeoMesh>::DimensionedField
161 const tmp<DimensionedField<Type, GeoMesh> >& tdf
164 regIOobject(tdf(), tdf.isTmp()),
167 const_cast<DimensionedField<Type, GeoMesh>&>(tdf()),
171 dimensions_(tdf().dimensions_)
178 template<
class Type,
class GeoMesh>
179 DimensionedField<Type, GeoMesh>::DimensionedField
182 const DimensionedField<Type, GeoMesh>& df
188 dimensions_(df.dimensions_)
192 template<
class Type,
class GeoMesh>
193 DimensionedField<Type, GeoMesh>::DimensionedField
196 DimensionedField<Type, GeoMesh>& df,
201 Field<Type>(df, reUse),
203 dimensions_(df.dimensions_)
207 template<
class Type,
class GeoMesh>
208 DimensionedField<Type, GeoMesh>::DimensionedField
211 const DimensionedField<Type, GeoMesh>& df
214 regIOobject(newName, df, newName == df.
name()),
217 dimensions_(df.dimensions_)
221 template<
class Type,
class GeoMesh>
222 DimensionedField<Type, GeoMesh>::DimensionedField
225 DimensionedField<Type, GeoMesh>& df,
229 regIOobject(newName, df, true),
230 Field<Type>(df, reUse),
232 dimensions_(df.dimensions_)
236 template<
class Type,
class GeoMesh>
237 DimensionedField<Type, GeoMesh>::DimensionedField
240 const Xfer<DimensionedField<Type, GeoMesh> >& df
243 regIOobject(newName, df, true),
246 dimensions_(df->dimensions_)
250 #ifndef NoConstructFromTmp
251 template<
class Type,
class GeoMesh>
252 DimensionedField<Type, GeoMesh>::DimensionedField
255 const tmp<DimensionedField<Type, GeoMesh> >& tdf
258 regIOobject(newName, tdf(), true),
261 const_cast<DimensionedField<Type, GeoMesh>&>(tdf()),
265 dimensions_(tdf().dimensions_)
272 template<
class Type,
class GeoMesh>
273 tmp<DimensionedField<Type, GeoMesh> >
285 template<
class Type,
class GeoMesh>
292 template<
class Type,
class GeoMesh>
324 template<
class Type,
class GeoMesh>
325 void DimensionedField<Type, GeoMesh>::replace
328 const DimensionedField
329 <
typename DimensionedField<Type, GeoMesh>::cmptType, GeoMesh>& df
336 template<
class Type,
class GeoMesh>
337 void DimensionedField<Type, GeoMesh>::replace
343 <
typename DimensionedField<Type, GeoMesh>::cmptType, GeoMesh>
352 template<
class Type,
class GeoMesh>
353 tmp<DimensionedField<Type, GeoMesh> >
377 template<
class Type,
class GeoMesh>
382 this->
name() +
".average()",
391 template<
class Type,
class GeoMesh>
401 this->
name() +
".weightedAverage(weights)",
403 gSum(weightField*field())/
gSum(weightField)
409 template<
class Type,
class GeoMesh>
410 dimensioned<Type> DimensionedField<Type, GeoMesh>::weightedAverage
412 const tmp<DimensionedField<scalar, GeoMesh> >& tweightField
415 dimensioned<Type> wa = weightedAverage(tweightField());
416 tweightField.clear();
423 template<
class Type,
class GeoMesh>
424 void DimensionedField<Type, GeoMesh>::operator=
426 const DimensionedField<Type, GeoMesh>& df
433 <<
"attempted assignment to self"
439 dimensions_ = df.dimensions();
444 template<
class Type,
class GeoMesh>
445 void DimensionedField<Type, GeoMesh>::operator=
447 const tmp<DimensionedField<Type, GeoMesh> >& tdf
450 const DimensionedField<Type, GeoMesh>& df = tdf();
456 <<
"attempted assignment to self"
462 dimensions_ = df.dimensions();
463 this->transfer(
const_cast<DimensionedField<Type, GeoMesh>&
>(df));
468 template<
class Type,
class GeoMesh>
469 void DimensionedField<Type, GeoMesh>::operator=
471 const dimensioned<Type>& dt
474 dimensions_ = dt.dimensions();
479 #define COMPUTED_ASSIGNMENT(TYPE, op) \
481 template<class Type, class GeoMesh> \
482 void DimensionedField<Type, GeoMesh>::operator op \
484 const DimensionedField<TYPE, GeoMesh>& df \
487 checkField(*this, df, #op); \
489 dimensions_ op df.dimensions(); \
490 Field<Type>::operator op(df); \
493 template<class Type, class GeoMesh> \
494 void DimensionedField<Type, GeoMesh>::operator op \
496 const tmp<DimensionedField<TYPE, GeoMesh> >& tdf \
499 operator op(tdf()); \
503 template<class Type, class GeoMesh> \
504 void DimensionedField<Type, GeoMesh>::operator op \
506 const dimensioned<TYPE>& dt \
509 dimensions_ op dt.dimensions(); \
510 Field<Type>::operator op(dt.value()); \
518 #undef COMPUTED_ASSIGNMENT