fixed writing out entries in advective bc
[OpenFOAM-1.6-ext.git] / src / OpenFOAM / meshes / primitiveMesh / primitiveMeshEdgeCells.C
blob097f1f718a9bbe4c1e7a8c18c9c522fc976305f4
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
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 the
13     Free Software Foundation; either version 2 of the License, or (at your
14     option) any later version.
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.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM; if not, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 \*---------------------------------------------------------------------------*/
27 #include "primitiveMesh.H"
28 #include "ListOps.H"
31 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
33 const Foam::labelListList& Foam::primitiveMesh::edgeCells() const
35     if (!ecPtr_)
36     {
37         if (debug)
38         {
39             Pout<< "primitiveMesh::edgeCells() : calculating edgeCells"
40                 << endl;
42             if (debug == -1)
43             {
44                 // For checking calls:abort so we can quickly hunt down
45                 // origin of call
46                 FatalErrorIn("primitiveMesh::edgeCells()")
47                     << abort(FatalError);
48             }
49         }
50         // Invert cellEdges
51         ecPtr_ = new labelListList(nEdges());
52         invertManyToMany(nEdges(), cellEdges(), *ecPtr_);
53     }
55     return *ecPtr_;
59 const Foam::labelList& Foam::primitiveMesh::edgeCells
61     const label edgeI,
62     DynamicList<label>& storage
63 ) const
65     if (hasEdgeCells())
66     {
67         return edgeCells()[edgeI];
68     }
69     else
70     {
71         const labelList& own = faceOwner();
72         const labelList& nei = faceNeighbour();
74         // Construct edgeFaces
75         DynamicList<label> eFacesStorage;
76         const labelList& eFaces = edgeFaces(edgeI, eFacesStorage);
78         storage.clear();
80         // Do quadratic insertion.
81         forAll(eFaces, i)
82         {
83             label faceI = eFaces[i];
85             {
86                 label ownCellI = own[faceI];
88                 // Check if not already in storage
89                 forAll(storage, j)
90                 {
91                     if (storage[j] == ownCellI)
92                     {
93                         ownCellI = -1;
94                         break;
95                     }
96                 }
98                 if (ownCellI != -1)
99                 {
100                     storage.append(ownCellI);
101                 }
102             }
104             if (isInternalFace(faceI))
105             {
106                 label neiCellI = nei[faceI];
108                 forAll(storage, j)
109                 {
110                     if (storage[j] == neiCellI)
111                     {
112                         neiCellI = -1;
113                         break;
114                     }
115                 }
117                 if (neiCellI != -1)
118                 {
119                     storage.append(neiCellI);
120                 }
121             }
122         }
124         return storage;
125     }
129 const Foam::labelList& Foam::primitiveMesh::edgeCells(const label edgeI) const
131     return edgeCells(edgeI, labels_);
135 // ************************************************************************* //