1 /*---------------------------------------------------------------------------*\
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 -------------------------------------------------------------------------------
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 \*---------------------------------------------------------------------------*/
27 void Foam::calcTypes::componentsTurbo::writeComponentFields
29 const IOobject& header,
34 typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
36 if (header.headerClassName() == fieldType::typeName)
38 const char* turboComponentNames[] = {"radial", "tangential", "z"};
40 Info<< " Reading " << header.name() << endl;
41 fieldType field(header, mesh);
42 fieldType turboField(field);
44 vectorField cellCentres(mesh.cellCentres());
45 cellCentres.replace(vector::Z, scalar(0));
47 const scalarField r = mag(cellCentres);
49 forAll(turboField, fI)
51 turboField[fI].replace(vector::X,
53 cellCentres[fI].component(vector::X)*field[fI].component(vector::X) +
54 cellCentres[fI].component(vector::Y)*field[fI].component(vector::Y)
58 turboField[fI].replace(vector::Y,
60 -cellCentres[fI].component(vector::Y)*field[fI].component(vector::X) +
61 cellCentres[fI].component(vector::X)*field[fI].component(vector::Y)
66 // Convert boundary fields
67 forAll(turboField.boundaryField(), patchI)
69 fvPatchField<Type>& bf = field.boundaryField()[patchI];
70 fvPatchField<Type>& tbf = turboField.boundaryField()[patchI];
72 vectorField faceCentres(tbf.patch().Cf());
74 faceCentres.replace(vector::Z, scalar(0));
76 const scalarField r = mag(faceCentres);
80 tbf[tbfI].replace(vector::X,
82 faceCentres[tbfI].component(vector::X)*bf[tbfI].component(vector::X) +
83 faceCentres[tbfI].component(vector::Y)*bf[tbfI].component(vector::Y)
87 tbf[tbfI].replace(vector::Y,
89 -faceCentres[tbfI].component(vector::Y)*bf[tbfI].component(vector::X) +
90 faceCentres[tbfI].component(vector::X)*bf[tbfI].component(vector::Y)
96 for (direction i=0; i<Type::nComponents; i++)
98 Info<< " Calculating " << header.name()
99 << turboComponentNames[i] << endl;
101 volScalarField componentField
105 header.name() + word(turboComponentNames[i]),
106 mesh.time().timeName(),
110 turboField.component(i)
112 componentField.write();
120 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //