FreeFOAM The Cross-Platform CFD Toolkit
processorPointPatchField.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) 1991-2010 OpenCFD Ltd.
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 
29 
30 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
31 
32 namespace Foam
33 {
34 
35 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
36 
37 template<class Type>
39 (
40  const pointPatch& p,
42 )
43 :
45  procPatch_(refCast<const processorPointPatch>(p))
46 {}
47 
48 
49 template<class Type>
51 (
52  const pointPatch& p,
54  const dictionary& dict
55 )
56 :
58  procPatch_(refCast<const processorPointPatch>(p))
59 {}
60 
61 
62 template<class Type>
64 (
66  const pointPatch& p,
68  const pointPatchFieldMapper& mapper
69 )
70 :
71  coupledPointPatchField<Type>(ptf, p, iF, mapper),
72  procPatch_(refCast<const processorPointPatch>(ptf.patch()))
73 {}
74 
75 
76 template<class Type>
78 (
81 )
82 :
84  procPatch_(refCast<const processorPointPatch>(ptf.patch()))
85 {}
86 
87 
88 // * * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * //
89 
90 template<class Type>
92 {}
93 
94 
95 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
96 
97 template<class Type>
99 {
100  if (Pstream::parRun())
101  {
102  // Get internal field into my point order
103  Field<Type> pf(this->patchInternalField(pField));
104 
106  (
108  procPatch_.neighbProcNo(),
109  reinterpret_cast<const char*>(pf.begin()),
110  pf.byteSize()
111  );
112  }
113 }
114 
115 
116 template<class Type>
118 {
119  if (Pstream::parRun())
120  {
121  Field<Type> pnf(this->size());
122 
124  (
126  procPatch_.neighbProcNo(),
127  reinterpret_cast<char*>(pnf.begin()),
128  pnf.byteSize()
129  );
130 
131  if (doTransform())
132  {
133  const processorPolyPatch& ppp = procPatch_.procPolyPatch();
134  const tensorField& forwardT = ppp.forwardT();
135 
136  if (forwardT.size() == 1)
137  {
138  transform(pnf, forwardT[0], pnf);
139  }
140  else
141  {
142  const labelList& nonGlobalPatchPoints =
143  procPatch_.nonGlobalPatchPoints();
144  const labelListList& pointFaces = ppp.pointFaces();
145 
146  forAll(nonGlobalPatchPoints, pfi)
147  {
148  pnf[pfi] = transform
149  (
150  forwardT[pointFaces[nonGlobalPatchPoints[pfi]][0]],
151  pnf[pfi]
152  );
153  }
154  }
155  }
156 
157  addToInternalField(pField, pnf);
158  }
159 }
160 
161 
162 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
163 
164 } // End namespace Foam
165 
166 // ************************ vim: set sw=4 sts=4 et: ************************ //