Forward compatibility: flex
[foam-extend-3.2.git] / applications / utilities / postProcessing / dataConversion / foamDataToFluent / writeFluentScalarField.C
blobc7d5fb74ba5cacdd6eb77923ea598bc2373136a2
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend 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 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Description
25     Given a volScalarField and Fluent field identifier, write the field in
26     Fluent data format
29 \*---------------------------------------------------------------------------*/
31 #include "writeFluentFields.H"
32 #include "emptyFvPatchFields.H"
34 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
36 namespace Foam
39 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
41 void writeFluentField
43     const volScalarField& phi,
44     const label fluentFieldIdentifier,
45     Ostream& stream
48     const scalarField& phiInternal = phi.internalField();
50     // Writing cells
51     stream
52         << "(300 ("
53         << fluentFieldIdentifier << " "  // Field identifier
54         << "1 "                  // Zone ID: (cells=1, internal faces=2,
55                                  // patch faces=patchI+10)
56         << "1 "                  // Number of components (scalar=1, vector=3)
57         << "0 0 "                // Unused
58         << "1 " << phiInternal.size() // Start and end of list
59         << ")(" << endl;
61     forAll (phiInternal, cellI)
62     {
63         stream << phiInternal[cellI] << endl;
64     }
66     stream
67         << "))" << endl;
69     label nWrittenFaces = phiInternal.size();
71     // Writing boundary faces
72     forAll (phi.boundaryField(), patchI)
73     {
74         if (isType<emptyFvPatchScalarField>(phi.boundaryField()[patchI]))
75         {
76             // Form empty patch field repeat the internal field to
77             // allow for the node interpolation in Fluent
78             const scalarField& phiInternal = phi.internalField();
80             // Get reference to internal cells
81             const labelList emptyFaceCells =
82                 phi.boundaryField()[patchI].patch().patch().faceCells();
84             // Writing cells for empty patch
85             stream
86                 << "(300 ("
87                 << fluentFieldIdentifier << " "  // Field identifier
88                 << patchI + 10 << " "            // Zone ID: patchI+10
89                 << "1 "             // Number of components (scalar=1, vector=3)
90                 << "0 0 "                // Unused
91                 << nWrittenFaces + 1 << " "
92                 << nWrittenFaces + emptyFaceCells.size()// Start and end of list
93                 << ")(" << endl;
95             nWrittenFaces += emptyFaceCells.size();
97             forAll (emptyFaceCells, faceI)
98             {
99                 stream << phiInternal[emptyFaceCells[faceI]] << endl;
100             }
102             stream
103                 << "))" << endl;
104         }
105         else
106         {
107             // Regular patch
108             label nWrittenFaces = phiInternal.size();
110             const scalarField& patchPhi = phi.boundaryField()[patchI];
112             // Write header
113             stream
114                 << "(300 ("
115                 << fluentFieldIdentifier << " "  // Field identifier
116                 << patchI + 10 << " "            // Zone ID: patchI+10
117                 << "1 "          // Number of components (scalar=1, vector=3)
118                 << "0 0 "            // Unused
119                 << nWrittenFaces + 1 << " " << nWrittenFaces + patchPhi.size()
120                                  // Start and end of list
121                 << ")(" << endl;
123             nWrittenFaces += patchPhi.size();
125             forAll (patchPhi, faceI)
126             {
127                 stream << patchPhi[faceI] << endl;
128             }
130             stream
131                 << "))" << endl;
132         }
133     }
137 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
139 } // End namespace Foam
141 // ************************************************************************* //