rhoCentralFoam: Ensure fixed value boundary conditions are preserved
Resolves bug-report http://www.openfoam.org/mantisbt/view.php?id=1748
This commit is contained in:
parent
6b92731286
commit
20733b7dd2
10 changed files with 56 additions and 83 deletions
|
|
@ -1,5 +1,5 @@
|
|||
#!/bin/sh
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
cd ${0%/*} || exit 1 # Run from this directory
|
||||
set -x
|
||||
|
||||
wclean libso BCs
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#!/bin/sh
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
cd ${0%/*} || exit 1 # Run from this directory
|
||||
set -x
|
||||
|
||||
(wmake libso BCs && wmake && wmake rhoCentralDyMFoam)
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
EXE_INC = \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude
|
||||
|
||||
LIB_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lcompressibleTransportModels \
|
||||
-lfluidThermophysicalModels \
|
||||
-lspecie
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
|
@ -85,7 +85,7 @@ public:
|
|||
);
|
||||
|
||||
//- Construct by mapping given mixedFixedValueSlipFvPatchField
|
||||
//- onto a new patch
|
||||
//- Onto a new patch
|
||||
mixedFixedValueSlipFvPatchField
|
||||
(
|
||||
const mixedFixedValueSlipFvPatchField<Type>&,
|
||||
|
|
@ -217,7 +217,7 @@ public:
|
|||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "mixedFixedValueSlipFvPatchField.C"
|
||||
#include "mixedFixedValueSlipFvPatchField.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
|
|
|||
|
|
@ -1,52 +0,0 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Global
|
||||
compressibleCourantNo
|
||||
|
||||
Description
|
||||
Calculates the mean and maximum wave speed based Courant Numbers.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
scalar CoNum = 0.0;
|
||||
scalar meanCoNum = 0.0;
|
||||
|
||||
if (mesh.nInternalFaces())
|
||||
{
|
||||
surfaceScalarField amaxSfbyDelta
|
||||
(
|
||||
mesh.surfaceInterpolation::deltaCoeffs()*amaxSf
|
||||
);
|
||||
|
||||
CoNum = max(amaxSfbyDelta/mesh.magSf()).value()*runTime.deltaTValue();
|
||||
|
||||
meanCoNum =
|
||||
(sum(amaxSfbyDelta)/sum(mesh.magSf())).value()
|
||||
*runTime.deltaTValue();
|
||||
}
|
||||
|
||||
Info<< "Mean and max Courant Numbers = "
|
||||
<< meanCoNum << " " << CoNum << endl;
|
||||
|
||||
// ************************************************************************* //
|
||||
|
|
@ -32,7 +32,6 @@ volVectorField U
|
|||
mesh
|
||||
);
|
||||
|
||||
#include "rhoBoundaryTypes.H"
|
||||
volScalarField rho
|
||||
(
|
||||
IOobject
|
||||
|
|
@ -44,7 +43,7 @@ volScalarField rho
|
|||
IOobject::AUTO_WRITE
|
||||
),
|
||||
thermo.rho(),
|
||||
rhoBoundaryTypes
|
||||
derivedPatchFieldTypes(p)
|
||||
);
|
||||
|
||||
volVectorField rhoU
|
||||
|
|
@ -57,7 +56,8 @@ volVectorField rhoU
|
|||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
rho*U
|
||||
rho*U,
|
||||
derivedPatchFieldTypes(U)
|
||||
);
|
||||
|
||||
volScalarField rhoE
|
||||
|
|
@ -70,7 +70,8 @@ volScalarField rhoE
|
|||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
rho*(e + 0.5*magSqr(U))
|
||||
rho*(e + 0.5*magSqr(U)),
|
||||
derivedPatchFieldTypes(T)
|
||||
);
|
||||
|
||||
surfaceScalarField pos
|
||||
|
|
@ -98,7 +99,18 @@ surfaceScalarField neg
|
|||
);
|
||||
|
||||
|
||||
surfaceScalarField phi("phi", mesh.Sf() & fvc::interpolate(rhoU));
|
||||
surfaceScalarField phi
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"phi",
|
||||
runTime.timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
mesh.Sf() & fvc::interpolate(rhoU)
|
||||
);
|
||||
|
||||
Info<< "Creating turbulence model\n" << endl;
|
||||
autoPtr<compressible::turbulenceModel> turbulence
|
||||
|
|
|
|||
|
|
@ -31,8 +31,9 @@ tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > interpolate
|
|||
{
|
||||
if
|
||||
(
|
||||
!sf.boundaryField()[patchi].coupled()
|
||||
!sf.boundaryField()[patchi].coupled()
|
||||
&& sf.boundaryField()[patchi].size()
|
||||
&& !vf.boundaryField()[patchi].fixesValue()
|
||||
&& dir.boundaryField()[patchi][0] > 0
|
||||
)
|
||||
{
|
||||
|
|
@ -44,4 +45,28 @@ tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > interpolate
|
|||
return tsf;
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
wordList derivedPatchFieldTypes
|
||||
(
|
||||
const GeometricField<Type, fvPatchField, volMesh>& vf
|
||||
)
|
||||
{
|
||||
wordList phiTypes
|
||||
(
|
||||
vf.boundaryField().size(),
|
||||
calculatedFvPatchField<Type>::typeName
|
||||
);
|
||||
|
||||
forAll(vf.boundaryField(), patchi)
|
||||
{
|
||||
if (vf.boundaryField()[patchi].fixesValue())
|
||||
{
|
||||
phiTypes[patchi] = fixedValueFvPatchField<Type>::typeName;
|
||||
}
|
||||
}
|
||||
|
||||
return phiTypes;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +0,0 @@
|
|||
const volScalarField::GeometricBoundaryField& pbf = p.boundaryField();
|
||||
wordList rhoBoundaryTypes = pbf.types();
|
||||
|
||||
forAll(rhoBoundaryTypes, patchi)
|
||||
{
|
||||
if (rhoBoundaryTypes[patchi] == "waveTransmissive")
|
||||
{
|
||||
rhoBoundaryTypes[patchi] = zeroGradientFvPatchScalarField::typeName;
|
||||
}
|
||||
else if (pbf[patchi].fixesValue())
|
||||
{
|
||||
rhoBoundaryTypes[patchi] = fixedRhoFvPatchScalarField::typeName;
|
||||
}
|
||||
}
|
||||
|
|
@ -187,7 +187,7 @@ int main(int argc, char *argv[])
|
|||
rhoU.dimensionedInternalField()
|
||||
/rho.dimensionedInternalField();
|
||||
U.correctBoundaryConditions();
|
||||
rhoU.boundaryField() = rho.boundaryField()*U.boundaryField();
|
||||
rhoU.boundaryField() == rho.boundaryField()*U.boundaryField();
|
||||
|
||||
if (!inviscid)
|
||||
{
|
||||
|
|
@ -221,7 +221,7 @@ int main(int argc, char *argv[])
|
|||
e = rhoE/rho - 0.5*magSqr(U);
|
||||
e.correctBoundaryConditions();
|
||||
thermo.correct();
|
||||
rhoE.boundaryField() =
|
||||
rhoE.boundaryField() ==
|
||||
rho.boundaryField()*
|
||||
(
|
||||
e.boundaryField() + 0.5*magSqr(U.boundaryField())
|
||||
|
|
@ -242,7 +242,7 @@ int main(int argc, char *argv[])
|
|||
rho.dimensionedInternalField()
|
||||
/psi.dimensionedInternalField();
|
||||
p.correctBoundaryConditions();
|
||||
rho.boundaryField() = psi.boundaryField()*p.boundaryField();
|
||||
rho.boundaryField() == psi.boundaryField()*p.boundaryField();
|
||||
|
||||
turbulence->correct();
|
||||
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ int main(int argc, char *argv[])
|
|||
rhoU.dimensionedInternalField()
|
||||
/rho.dimensionedInternalField();
|
||||
U.correctBoundaryConditions();
|
||||
rhoU.boundaryField() = rho.boundaryField()*U.boundaryField();
|
||||
rhoU.boundaryField() == rho.boundaryField()*U.boundaryField();
|
||||
|
||||
if (!inviscid)
|
||||
{
|
||||
|
|
@ -203,7 +203,7 @@ int main(int argc, char *argv[])
|
|||
e = rhoE/rho - 0.5*magSqr(U);
|
||||
e.correctBoundaryConditions();
|
||||
thermo.correct();
|
||||
rhoE.boundaryField() =
|
||||
rhoE.boundaryField() ==
|
||||
rho.boundaryField()*
|
||||
(
|
||||
e.boundaryField() + 0.5*magSqr(U.boundaryField())
|
||||
|
|
@ -224,7 +224,7 @@ int main(int argc, char *argv[])
|
|||
rho.dimensionedInternalField()
|
||||
/psi.dimensionedInternalField();
|
||||
p.correctBoundaryConditions();
|
||||
rho.boundaryField() = psi.boundaryField()*p.boundaryField();
|
||||
rho.boundaryField() == psi.boundaryField()*p.boundaryField();
|
||||
|
||||
turbulence->correct();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue