1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
7 -------------------------------------------------------------------------------
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
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"
31 #include "mathematicalConstants.H"
33 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
35 template<class RhoFieldType>
36 void Foam::radialActuationDiskSource::
37 addRadialActuationDiskAxialInertialResistance
40 const labelList& cells,
41 const scalarField& Vcells,
42 const RhoFieldType& rho,
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));
65 + coeffs_[1]*sqr(maxR)/2.0
66 + coeffs_[2]*pow4(maxR)/3.0;
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);
75 T[i]*(coeffs_[0] + coeffs_[1]*sqr(r) + coeffs_[2]*pow4(r))
81 Usource[cells[i]] += ((Vcells[cells[i]]/V())*Tr[i]*E) & U[cells[i]];
86 Info<< "Source name: " << name() << nl
87 << "Average centre: " << avgCentre << nl
88 << "Maximum radius: " << maxR << endl;
93 // ************************************************************************* //