SlicedDimensionedField.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2026 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 "SlicedDimensionedField.H"
27 
28 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
29 
30 template<class Type, class GeoMesh>
32 (
33  const IOobject& io,
34  const GeoMesh& mesh,
35  const dimensionSet& ds,
36  const Field<Type>& iField
37 )
38 :
39  DimensionedField<Type, GeoMesh>(io, mesh, ds, Field<Type>())
40 {
41  // Set the internalField to the slice of the complete field
43  (
44  typename Field<Type>::subField(iField, mesh.size())
45  );
46 }
47 
48 
49 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
50 
51 template<class Type, class GeoMesh>
53 {
54  // Set the internalField storage pointer to nullptr before its destruction
55  // to protect the field it a slice of.
57 }
58 
59 
60 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
61 
62 template<class Type, class GeoMesh>
64 (
65  Field<Type>& f
66 )
67 {
68  this->primitiveFieldRef() = f;
69 }
70 
71 
72 template<class Type, class GeoMesh>
74 (
75  const Field<Type>& iField
76 )
77 {
78  // Reset the internalField to the slice of the complete field
80  (
81  typename Field<Type>::subField(iField, this->mesh().size())
82  );
83 }
84 
85 
86 // ************************************************************************* //
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
const GeoMesh & mesh() const
Return mesh.
Pre-declare SubField and related Field type.
Definition: Field.H:83
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:99
void reset(const Field< Type > &iField)
Reset internalField pointer.
SlicedDimensionedField(const IOobject &, const GeoMesh &, const dimensionSet &, const Field< Type > &iField)
Construct from components and field to slice.
virtual void transfer(Field< Type > &)
Override the DimensionedField::transfer with assignment.
Pre-declare related SubField type.
Definition: SubField.H:63
void shallowCopy(const UList< T > &)
Copy the pointer held by the given UList.
Definition: UListI.H:156
Dimension set for the base types.
Definition: dimensionSet.H:125
Foam::fvMesh mesh(Foam::IOobject(regionName, runTime.name(), runTime, Foam::IOobject::MUST_READ), false)
labelList f(nPoints)
conserve primitiveFieldRef()+