BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / finiteVolume / cfdTools / general / fieldSources / basicSource / radialActuationDiskSource / radialActuationDiskSourceTemplates.C
blob47ac4d0f4083862825de8baf0832ac88e8620ba5
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
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 3 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 "radialActuationDiskSource.H"
28 #include "volFields.H"
29 #include "fvMatrix.H"
30 #include "fvm.H"
31 #include "mathematicalConstants.H"
33 // * * * * * * * * * * * * * * *  Member Functions * * * * * * * * * * * * * //
35 template<class RhoFieldType>
36 void Foam::radialActuationDiskSource::
37 addRadialActuationDiskAxialInertialResistance
39     vectorField& Usource,
40     const labelList& cells,
41     const scalarField& Vcells,
42     const RhoFieldType& rho,
43     const vectorField& U
44 ) const
46     scalar a = 1.0 - Cp_/Ct_;
47     scalarField T(cells.size());
48     scalarField Tr(cells.size());
49     const vector uniDiskDir = diskDir_/mag(diskDir_);
52     tensor E(tensor::zero);
53     E.xx() = uniDiskDir.x();
54     E.yy() = uniDiskDir.y();
55     E.zz() = uniDiskDir.z();
57     const Field<vector> zoneCellCentres(mesh().cellCentres(), cells);
58     const Field<scalar> zoneCellVolumes(mesh().cellVolumes(), cells);
60     const vector avgCentre = gSum(zoneCellVolumes*zoneCellCentres)/V();
61     const scalar maxR = gMax(mag(zoneCellCentres - avgCentre));
63     scalar intCoeffs =
64         coeffs_[0]
65       + coeffs_[1]*sqr(maxR)/2.0
66       + coeffs_[2]*pow4(maxR)/3.0;
68     forAll(cells, i)
69     {
70         T[i] = 2.0*rho[cells[i]]*diskArea_*mag(U[cells[i]])*a/(1.0 - a);
72         scalar r = mag(mesh().cellCentres()[cells[i]] - avgCentre);
74         Tr[i] =
75             T[i]*(coeffs_[0] + coeffs_[1]*sqr(r) + coeffs_[2]*pow4(r))
76            /intCoeffs;
77     }
79     forAll(cells, i)
80     {
81         Usource[cells[i]] += ((Vcells[cells[i]]/V())*Tr[i]*E) & U[cells[i]];
82     }
84     if (debug)
85     {
86         Info<< "Source name: " << name() << nl
87             << "Average centre: " << avgCentre << nl
88             << "Maximum radius: " << maxR << endl;
89     }
93 // ************************************************************************* //