MRF zone wall flux bug fix. Hakan Nilsson, Martin Beaudoin, Hrvoje Jasak

This commit is contained in:
Hrvoje Jasak 2020-07-08 09:18:26 +01:00
parent f2c557318f
commit e2e049bb04
2 changed files with 49 additions and 34 deletions

View file

@ -149,9 +149,9 @@ void Foam::MRFZone::setMRFFaces()
label faceI; label faceI;
forAll (patches, patchi) forAll (patches, patchI)
{ {
const polyPatch& pp = patches[patchi]; const polyPatch& pp = patches[patchI];
forAll (pp, patchFaceI) forAll (pp, patchFaceI)
{ {
@ -159,11 +159,11 @@ void Foam::MRFZone::setMRFFaces()
if (faceType[faceI] == 1) if (faceType[faceI] == 1)
{ {
nIncludedFaces[patchi]++; nIncludedFaces[patchI]++;
} }
else if (faceType[faceI] == 2) else if (faceType[faceI] == 2)
{ {
nExcludedFaces[patchi]++; nExcludedFaces[patchI]++;
} }
} }
} }
@ -553,8 +553,8 @@ void Foam::MRFZone::addCoriolis(fvVectorMatrix& UEqn) const
forAll (cells, i) forAll (cells, i)
{ {
label celli = cells[i]; label cellI = cells[i];
Usource[celli] -= V[celli]*(rotVel ^ U[celli]); Usource[cellI] -= V[cellI]*(rotVel ^ U[cellI]);
} }
} }
@ -578,8 +578,8 @@ void Foam::MRFZone::addCoriolis
forAll (cells, i) forAll (cells, i)
{ {
label celli = cells[i]; label cellI = cells[i];
Usource[celli] -= V[celli]*rho[celli]*(rotVel ^ U[celli]); Usource[cellI] -= V[cellI]*rho[cellI]*(rotVel ^ U[cellI]);
} }
} }
@ -609,28 +609,28 @@ void Foam::MRFZone::relativeVelocity(volVectorField& U) const
forAll (cells, i) forAll (cells, i)
{ {
label celli = cells[i]; label cellI = cells[i];
U[celli] -= (rotVel ^ (C[celli] - origin)); U[cellI] -= (rotVel ^ (C[cellI] - origin));
} }
// Included faces // Included faces
forAll (includedFaces_, patchi) forAll (includedFaces_, patchI)
{ {
forAll (includedFaces_[patchi], i) forAll (includedFaces_[patchI], i)
{ {
label patchFaceI = includedFaces_[patchi][i]; label patchFaceI = includedFaces_[patchI][i];
U.boundaryField()[patchi][patchFaceI] = vector::zero; U.boundaryField()[patchI][patchFaceI] = vector::zero;
} }
} }
// Excluded faces // Excluded faces
forAll (excludedFaces_, patchi) forAll (excludedFaces_, patchI)
{ {
forAll (excludedFaces_[patchi], i) forAll (excludedFaces_[patchI], i)
{ {
label patchFaceI = excludedFaces_[patchi][i]; label patchFaceI = excludedFaces_[patchI][i];
U.boundaryField()[patchi][patchFaceI] -= U.boundaryField()[patchI][patchFaceI] -=
(rotVel ^ (C.boundaryField()[patchi][patchFaceI] - origin)); (rotVel ^ (C.boundaryField()[patchI][patchFaceI] - origin));
} }
} }
} }
@ -647,29 +647,45 @@ void Foam::MRFZone::absoluteVelocity(volVectorField& U) const
forAll (cells, i) forAll (cells, i)
{ {
label celli = cells[i]; label cellI = cells[i];
U[celli] += (rotVel ^ (C[celli] - origin)); U[cellI] += (rotVel ^ (C[cellI] - origin));
} }
// For precision and consistency, normal component of the
// absolute velocity must match the mesh flux exactly
// HJ, 3/Jul/2020
const surfaceScalarField& meshVel = meshVelocity();
const surfaceScalarField& magSf = mesh_.magSf();
// Included faces // Included faces
forAll (includedFaces_, patchi) forAll (includedFaces_, patchI)
{ {
forAll (includedFaces_[patchi], i) vectorField n = mesh_.boundary()[patchI].nf();
forAll (includedFaces_[patchI], i)
{ {
label patchFaceI = includedFaces_[patchi][i]; label patchFaceI = includedFaces_[patchI][i];
U.boundaryField()[patchi][patchFaceI] =
(rotVel ^ (C.boundaryField()[patchi][patchFaceI] - origin)); vector Up =
rotVel ^ (C.boundaryField()[patchI][patchFaceI] - origin);
scalar Un = meshVel.boundaryField()[patchI][patchFaceI]/
magSf.boundaryField()[patchI][patchFaceI];
U.boundaryField()[patchI][patchFaceI] =
(Up + n[patchFaceI]*(Un - (n[patchFaceI] & Up)));
} }
} }
// Excluded faces // Excluded faces
forAll (excludedFaces_, patchi) forAll (excludedFaces_, patchI)
{ {
forAll (excludedFaces_[patchi], i) forAll (excludedFaces_[patchI], i)
{ {
label patchFaceI = excludedFaces_[patchi][i]; label patchFaceI = excludedFaces_[patchI][i];
U.boundaryField()[patchi][patchFaceI] += U.boundaryField()[patchI][patchFaceI] +=
(rotVel ^ (C.boundaryField()[patchi][patchFaceI] - origin)); (rotVel ^ (C.boundaryField()[patchI][patchFaceI] - origin));
} }
} }
} }

View file

@ -62,9 +62,8 @@ void Foam::MRFZone::relativeRhoFlux
{ {
patchFaceI = includedFaces_[patchI][i]; patchFaceI = includedFaces_[patchI][i];
phi.boundaryField()[patchI][patchFaceI] -= // Bugfix, HJ and HN, 3/Jul/2020
rho.boundaryField()[patchI][patchFaceI]* phi.boundaryField()[patchI][patchFaceI] = 0;
meshVel.boundaryField()[patchI][patchFaceI];
} }
} }