mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: actuation disk modifications and rough Wall function for atm inlet
This commit is contained in:
@ -66,6 +66,12 @@ void Foam::actuationDiskSource::checkData() const
|
||||
<< "disk direction vector is approximately zero"
|
||||
<< exit(FatalIOError);
|
||||
}
|
||||
if (returnReduce(upstreamCellId_, maxOp<label>()) == -1)
|
||||
{
|
||||
FatalErrorIn("Foam::actuationDiskSource::checkData()")
|
||||
<< "upstream location " << upstreamPoint_ << " not found in mesh"
|
||||
<< exit(FatalIOError);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -83,7 +89,9 @@ Foam::actuationDiskSource::actuationDiskSource
|
||||
diskDir_(coeffs_.lookup("diskDir")),
|
||||
Cp_(readScalar(coeffs_.lookup("Cp"))),
|
||||
Ct_(readScalar(coeffs_.lookup("Ct"))),
|
||||
diskArea_(readScalar(coeffs_.lookup("diskArea")))
|
||||
diskArea_(readScalar(coeffs_.lookup("diskArea"))),
|
||||
upstreamPoint_(coeffs_.lookup("upstreamPoint")),
|
||||
upstreamCellId_(-1)
|
||||
{
|
||||
coeffs_.lookup("fieldNames") >> fieldNames_;
|
||||
applied_.setSize(fieldNames_.size(), false);
|
||||
@ -91,6 +99,8 @@ Foam::actuationDiskSource::actuationDiskSource
|
||||
Info<< " - creating actuation disk zone: "
|
||||
<< this->name() << endl;
|
||||
|
||||
upstreamCellId_ = mesh.findCell(upstreamPoint_);
|
||||
|
||||
checkData();
|
||||
}
|
||||
|
||||
|
||||
@ -48,6 +48,7 @@ Description
|
||||
Cp 0.1; // power coefficient
|
||||
Ct 0.5; // thrust coefficient
|
||||
diskArea 5.0; // disk area
|
||||
upstreamPoint (0 0 0); // upstream point
|
||||
}
|
||||
|
||||
|
||||
@ -92,6 +93,12 @@ protected:
|
||||
//- Disk area
|
||||
scalar diskArea_;
|
||||
|
||||
//- Upstream point sample
|
||||
point upstreamPoint_;
|
||||
|
||||
//- Upstream cell ID
|
||||
label upstreamCellId_;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@ -42,20 +42,27 @@ void Foam::actuationDiskSource::addActuationDiskAxialInertialResistance
|
||||
) const
|
||||
{
|
||||
scalar a = 1.0 - Cp_/Ct_;
|
||||
scalarField T(cells.size());
|
||||
vector uniDiskDir = diskDir_/mag(diskDir_);
|
||||
tensor E(tensor::zero);
|
||||
E.xx() = uniDiskDir.x();
|
||||
E.yy() = uniDiskDir.y();
|
||||
E.zz() = uniDiskDir.z();
|
||||
|
||||
forAll(cells, i)
|
||||
vector upU = vector(VGREAT, VGREAT, VGREAT);
|
||||
scalar upRho = VGREAT;
|
||||
if (upstreamCellId_ != -1)
|
||||
{
|
||||
T[i] = 2.0*rho[cells[i]]*diskArea_*mag(U[cells[i]])*a/(1.0 - a);
|
||||
upU = U[upstreamCellId_];
|
||||
upRho = rho[upstreamCellId_];
|
||||
}
|
||||
reduce(upU, minOp<vector>());
|
||||
reduce(upRho, minOp<scalar>());
|
||||
|
||||
scalar T = 2.0*upRho*diskArea_*mag(upU)*a*(1 - a);
|
||||
|
||||
forAll(cells, i)
|
||||
{
|
||||
Usource[cells[i]] -= ((Vcells[cells[i]]/V())*T[i]*E) & U[cells[i]];
|
||||
Usource[cells[i]] += ((Vcells[cells[i]]/V())*T*E) & upU;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -53,6 +53,7 @@ Description
|
||||
Ct 0.5; // thrust coefficient
|
||||
diskArea 5.0; // disk area
|
||||
coeffs (0.1 0.5 0.01); // radial distribution coefficients
|
||||
upstreamPoint (0 0 0); // upstream point
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -44,11 +44,9 @@ addRadialActuationDiskAxialInertialResistance
|
||||
) const
|
||||
{
|
||||
scalar a = 1.0 - Cp_/Ct_;
|
||||
scalarField T(cells.size());
|
||||
scalarField Tr(cells.size());
|
||||
const vector uniDiskDir = diskDir_/mag(diskDir_);
|
||||
|
||||
|
||||
tensor E(tensor::zero);
|
||||
E.xx() = uniDiskDir.x();
|
||||
E.yy() = uniDiskDir.y();
|
||||
@ -65,21 +63,27 @@ addRadialActuationDiskAxialInertialResistance
|
||||
+ radialCoeffs_[1]*sqr(maxR)/2.0
|
||||
+ radialCoeffs_[2]*pow4(maxR)/3.0;
|
||||
|
||||
vector upU = vector(VGREAT, VGREAT, VGREAT);
|
||||
scalar upRho = VGREAT;
|
||||
if (upstreamCellId_ != -1)
|
||||
{
|
||||
upU = U[upstreamCellId_];
|
||||
upRho = rho[upstreamCellId_];
|
||||
}
|
||||
reduce(upU, minOp<vector>());
|
||||
reduce(upRho, minOp<scalar>());
|
||||
|
||||
scalar T = 2.0*upRho*diskArea_*mag(upU)*a*(1.0 - a);
|
||||
forAll(cells, i)
|
||||
{
|
||||
T[i] = 2.0*rho[cells[i]]*diskArea_*mag(U[cells[i]])*a/(1.0 - a);
|
||||
|
||||
scalar r2 = magSqr(mesh().cellCentres()[cells[i]] - avgCentre);
|
||||
|
||||
Tr[i] =
|
||||
T[i]
|
||||
T
|
||||
*(radialCoeffs_[0] + radialCoeffs_[1]*r2 + radialCoeffs_[2]*sqr(r2))
|
||||
/intCoeffs;
|
||||
}
|
||||
|
||||
forAll(cells, i)
|
||||
{
|
||||
Usource[cells[i]] -= ((Vcells[cells[i]]/V_)*Tr[i]*E) & U[cells[i]];
|
||||
Usource[cells[i]] += ((Vcells[cells[i]]/V_)*Tr[i]*E) & upU;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
|
||||
Reference in New Issue
Block a user