35 template<
class AlphaFieldType,
class RhoFieldType>
36 void Foam::fv::propellerDisk::addActuationDiskAxialInertialResistance
39 const AlphaFieldType&
alpha,
40 const RhoFieldType&
rho,
61 const vector centre = diskCentre();
62 const scalar
delta = diskThickness(centre);
65 const scalar rHub = 0.5*dHub_;
68 const scalar rProp = 0.5*dProp_;
74 const scalar
A = (rProp - rHub)*(rProp - rHub)*
pi;
77 const scalar&
n = this->
n();
81 const scalar J = this->J(
U, nHat);
84 const scalar Udisk =
n*dProp_*J;
87 const scalar phiDisk = Udisk*
A;
94 vector2D KtandKq(propellerFunction_->value(J));
95 scalar Kt = KtandKq.x();
96 scalar Kq = KtandKq.y();
103 const scalar Ucorr =
T/(2*phiDisk);
104 const scalar Jcorr = (Udisk - Ucorr)/(
n*dProp_);
107 KtandKq = propellerFunction_->value(Jcorr);
111 const scalar Q = Kq*
sqr(
n)*
pow5(dProp_);
119 (105/8.0)*
T/(
delta*
pi*(rProp - rHub)*(3*rHub + 4*rProp));
121 (105/8.0)*Q/(
delta*
pi*rProp*(rProp - rHub)*(3*rHub + 4*rProp));
127 const vector r = mesh().cellCentres()[celli] - centre;
128 const scalar magr =
mag(r);
132 const scalar rPrime = magr/rProp;
133 const scalar rHubPrime = rHub/rProp;
137 min((rPrime - rHubPrime)/(1 - rHubPrime), 1);
139 const scalar Faxial = Ax*rStar*
sqrt(1 - rStar);
140 const scalar Ftangential =
141 At*rStar*
sqrt(1 - rStar)
142 /(rStar*(1 - rHubPrime) + rHubPrime);
146 const vector rotationVector = radiusOrtho*rotationDir_;
150 *(Faxial*nHat + Ftangential*rotationVector);
152 Usource[celli] += V[celli]*force[celli];
158 mesh().lookupObject<pimpleNoLoopControl>(
"solutionControl")
162 if (logFile_.valid())
164 logFile_->writeTime(
n, J, Jcorr, Udisk, Ucorr, Kt, Kq,
T, Q);
167 if (mesh().time().writeTime())
static const Foam::dimensionedScalar A("A", Foam::dimPressure, 611.21)
#define forAll(list, i)
Loop across all elements in list.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
volScalarField alpha(IOobject("alpha", runTime.name(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
Vector2D< scalar > vector2D
vector2D obtained from generic Vector2D
dimensionedScalar pow5(const dimensionedScalar &ds)
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
word name(const bool)
Return a word representation of a bool.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
const dimensionSet dimTime
Vector< scalar > vector
A scalar version of the templated Vector.
dimensionedScalar sqrt(const dimensionedScalar &ds)
dimensionSet normalised(const dimensionSet &)
dimensioned< scalar > mag(const dimensioned< Type > &)
word typedName(Name name)
Return the name of the object within the given type.
dimensionedScalar pow4(const dimensionedScalar &ds)
dimensioned< vector > dimensionedVector
Dimensioned vector obtained from generic dimensioned type.
Field< vector > vectorField
Specialisation of Field<T> for vector.
UList< label > labelUList
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)