LagrangianInjectionTemplates.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) 2025 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 "LagrangianInjection.H"
27 
28 // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
29 
30 template<class ... OtherFields>
32 (
34  labelField& celli,
35  labelField& facei,
36  labelField& faceTrii,
37  OtherFields& ... otherFields
38 )
39 {
40  label iNew = 0;
41 
42  forAll(coordinates, iOld)
43  {
44  if (celli[iOld] != -1)
45  {
46  coordinates[iNew] = coordinates[iOld];
47  celli[iNew] = celli[iOld];
48  facei[iNew] = facei[iOld];
49  faceTrii[iNew] = faceTrii[iOld];
50 
51  (void)std::initializer_list<nil>
52  {(
53  otherFields[iNew] = otherFields[iOld],
54  nil()
55  ) ... };
56 
57  ++ iNew;
58  }
59  }
60 
61  coordinates.resize(iNew);
62  celli.resize(iNew);
63  facei.resize(iNew);
64  faceTrii.resize(iNew);
65 
66  (void)std::initializer_list<nil>
67  {(
68  otherFields.resize(iNew),
69  nil()
70  ) ... };
71 }
72 
73 
74 // ************************************************************************* //
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:433
Pre-declare SubField and related Field type.
Definition: Field.H:83
static void filter(barycentricField &coordinates, labelField &celli, labelField &facei, labelField &faceTrii, OtherFields &... otherFields)
Filter out injected elements that are on other processes. These.
List construction class.
void resize(const label)
Alias for setSize(const label)
Definition: ListI.H:138
A zero-sized class without any storage. Used, for example, in HashSet.
Definition: nil.H:59
barycentric coordinates(const polyMesh &mesh, const point &position, const label celli, const label facei, const label faceTrii, const scalar stepFraction)
Return the coordinates given the position and tet topology.
Definition: tracking.C:1259
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59