35 template<
class AlphaFieldType,
class RhoFieldType>
36 void Foam::fv::propellerDisk::addActuationDiskAxialInertialResistance
39 const AlphaFieldType&
alpha,
40 const RhoFieldType&
rho,
47 if (!forcePtr_.valid())
66 const vector centre(this->centre());
67 const vector normal(this->normal());
68 const scalar
delta = diskThickness(centre);
71 const scalar rHub = 0.5*dHub_;
74 const scalar rProp = 0.5*dProp_;
77 const scalar
A = (rProp - rHub)*(rProp - rHub)*
pi;
80 const scalar&
n = this->
n();
84 const scalar J = this->J(
U, normal);
87 const scalar Udisk =
n*dProp_*J;
90 const scalar phiDisk = Udisk*
A;
97 vector2D KtandKq(propellerFunction_->value(J));
98 scalar Kt = KtandKq.x();
99 scalar Kq = KtandKq.y();
106 const scalar Ucorr =
T/(2*phiDisk);
107 const scalar Jcorr = (Udisk - Ucorr)/(
n*dProp_);
110 KtandKq = propellerFunction_->value(Jcorr);
114 const scalar Q = Kq*
sqr(
n)*
pow5(dProp_);
122 (105/8.0)*
T/(
delta*
pi*(rProp - rHub)*(3*rHub + 4*rProp));
124 (105/8.0)*Q/(
delta*
pi*rProp*(rProp - rHub)*(3*rHub + 4*rProp));
134 const scalar magr =
mag(r);
138 const scalar rPrime = magr/rProp;
139 const scalar rHubPrime = rHub/rProp;
143 min((rPrime - rHubPrime)/(1 - rHubPrime), 1);
145 const scalar Faxial = Ax*rStar*
sqrt(1 - rStar);
146 const scalar Ftangential =
147 At*rStar*
sqrt(1 - rStar)
148 /(rStar*(1 - rHubPrime) + rHubPrime);
152 const vector rotationVector = radiusOrtho*rotationDir_;
156 *(Faxial*normal + Ftangential*rotationVector);
158 const vector Vfi(V[celli]*force[celli]);
165 Usource[celli] += Vfi;
169 reduce(force_, sumOp<vector>());
170 reduce(moment_, sumOp<vector>());
174 mesh().lookupObject<pimpleNoLoopControl>(
"solutionControl")
178 if (logFile_.valid())
#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...
DimensionedField< Type, GeoMesh, PrimitiveField > Internal
Type of the internal field from which this GeometricField is derived.
const DimensionedField< scalar, volMesh > & V() const
Return cell volumes.
const vectorField & cellCentres() const
Foam::fvMesh mesh(Foam::IOobject(regionName, runTime.name(), runTime, Foam::IOobject::MUST_READ), false)
volScalarField alpha(IOobject("alpha", runTime.name(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
static const coefficient A("A", dimPressure, 611.21)
Vector2D< scalar > vector2D
vector2D obtained from generic Vector2D
List< label > labelList
A List of labels.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
void T(LagrangianPatchField< Type > &f, const LagrangianPatchField< Type > &f1)
void pow4(LagrangianPatchField< scalar > &f, const LagrangianPatchField< scalar > &f1)
void mag(LagrangianPatchField< scalar > &f, const LagrangianPatchField< Type > &f1)
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.
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
void pow5(LagrangianPatchField< scalar > &f, const LagrangianPatchField< scalar > &f1)
dimensionSet normalised(const dimensionSet &)
word typedName(Name name)
Return the name of the object within the given type.
dimensioned< vector > dimensionedVector
Dimensioned vector obtained from generic dimensioned type.
Field< vector > vectorField
Specialisation of Field<T> for vector.
void sqr(LagrangianPatchField< typename outerProduct< Type, Type >::type > &f, const LagrangianPatchField< Type > &f1)
word name(const LagrangianState state)
Return a string representation of a Lagrangian state enumeration.
void sqrt(LagrangianPatchField< scalar > &f, const LagrangianPatchField< scalar > &f1)