/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see . Class Foam::Field Description Generic templated field type. SourceFiles FieldFunctions.H FieldFunctionsM.H FieldMapper.H FieldM.H Field.C FieldFunctions.C FieldFunctionsM.C \*---------------------------------------------------------------------------*/ #ifndef Field_H #define Field_H #include "tmp.H" #include "direction.H" #include "VectorSpace.H" #include "scalarList.H" #include "labelList.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { // Forward declaration of friend functions and operators template class Field; //- Pre-declare related SubField type template class SubField; template Ostream& operator<<(Ostream&, const Field&); template Ostream& operator<<(Ostream&, const tmp>&); class FieldMapper; class dictionary; /*---------------------------------------------------------------------------*\ Class Field Declaration \*---------------------------------------------------------------------------*/ template class Field : public tmp>::refCount, public List { public: //- Component type typedef typename pTraits::cmptType cmptType; //- Declare type of subField typedef SubField subField; // Static data members static const char* const typeName; // Static Member Functions //- Return a null field inline static const Field& null() { return NullObjectRef>(); } // Constructors //- Construct null // Used for temporary fields which are initialised after construction Field(); //- Construct given size // Used for temporary fields which are initialised after construction explicit Field(const label); //- Construct given size and initial value Field(const label, const Type&); //- Construct given size and initialed to zero Field(const label, const zero); //- Construct as copy of a UList\ explicit Field(const UList&); //- Construct by transferring the List contents explicit Field(const Xfer>&); //- Construct by 1 to 1 mapping from the given field Field ( const UList& mapF, const labelUList& mapAddressing ); //- Construct by 1 to 1 mapping from the given tmp field Field ( const tmp>& tmapF, const labelUList& mapAddressing ); //- Construct by interpolative mapping from the given field Field ( const UList& mapF, const labelListList& mapAddressing, const scalarListList& weights ); //- Construct by interpolative mapping from the given tmp field Field ( const tmp>& tmapF, const labelListList& mapAddressing, const scalarListList& weights ); //- Construct by mapping from the given field Field ( const UList& mapF, const FieldMapper& map ); //- Construct by mapping from the given field Field ( const UList& mapF, const FieldMapper& map, const Type& defaultValue ); //- Construct by mapping from the given field Field ( const UList& mapF, const FieldMapper& map, const UList& defaultValues ); //- Construct by mapping from the given tmp field Field ( const tmp>& tmapF, const FieldMapper& map ); //- Construct by mapping from the given tmp field. Supplied uniform // value for unmapped items Field ( const tmp>& tmapF, const FieldMapper& map, const Type& defaultValue ); //- Construct by mapping from the given tmp field. Supplied values // for unmapped items Field ( const tmp>& tmapF, const FieldMapper& map, const UList& defaultValues ); //- Construct as copy Field(const Field&); //- Construct as copy or re-use as specified. Field(Field&, bool reuse); //- Construct by transferring the Field contents Field(const Xfer>&); //- Construct as copy of tmp #ifndef NoConstructFromTmp Field(const tmp>&); #endif //- Construct from Istream Field(Istream&); //- Construct from a dictionary entry Field(const word& keyword, const dictionary&, const label size); //- Clone tmp> clone() const; //- Return a pointer to a new calculatedFvPatchFieldField created on // freestore without setting patchField values template static tmp> NewCalculatedType(const Field& f) { return tmp>(new Field(f.size())); } // Member Functions //- 1 to 1 map from the given field void map ( const UList& mapF, const labelUList& mapAddressing ); //- 1 to 1 map from the given tmp field void map ( const tmp>& tmapF, const labelUList& mapAddressing ); //- Interpolative map from the given field void map ( const UList& mapF, const labelListList& mapAddressing, const scalarListList& weights ); //- Interpolative map from the given tmp field void map ( const tmp>& tmapF, const labelListList& mapAddressing, const scalarListList& weights ); //- Map from the given field void map ( const UList& mapF, const FieldMapper& map ); //- Map from the given tmp field void map ( const tmp>& tmapF, const FieldMapper& map ); //- Map from self void autoMap ( const FieldMapper& map ); //- 1 to 1 reverse-map from the given field void rmap ( const UList& mapF, const labelUList& mapAddressing ); //- 1 to 1 reverse-map from the given tmp field void rmap ( const tmp>& tmapF, const labelUList& mapAddressing ); //- Interpolative reverse map from the given field void rmap ( const UList& mapF, const labelUList& mapAddressing, const UList& weights ); //- Interpolative reverse map from the given tmp field void rmap ( const tmp>& tmapF, const labelUList& mapAddressing, const UList& weights ); //- Negate this field void negate(); //- Return a component field of the field tmp> component(const direction) const; //- Replace a component field of the field void replace(const direction, const UList&); //- Replace a component field of the field void replace(const direction, const tmp>&); //- Replace a component field of the field void replace(const direction, const cmptType&); //- Return the field transpose (only defined for second rank tensors) tmp> T() const; //- Write the field as a dictionary entry void writeEntry(const word& keyword, Ostream& os) const; // Member operators void operator=(const Field&); void operator=(const UList&); void operator=(const SubField&); void operator=(const tmp>&); void operator=(const Type&); void operator=(const zero); template void operator=(const VectorSpace&); void operator+=(const UList&); void operator+=(const tmp>&); void operator-=(const UList&); void operator-=(const tmp>&); void operator*=(const UList&); void operator*=(const tmp>&); void operator/=(const UList&); void operator/=(const tmp>&); void operator+=(const Type&); void operator-=(const Type&); void operator*=(const scalar&); void operator/=(const scalar&); // IOstream operators friend Ostream& operator<< (Ostream&, const Field&); friend Ostream& operator<< (Ostream&, const tmp>&); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #include "FieldFunctions.H" #ifdef NoRepository #include "Field.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //