Steady compressible solver updates, MRF and jump conditions. Gregor Cvijetic

This commit is contained in:
Hrvoje Jasak 2017-05-25 14:43:28 +01:00
parent 7b2137f0e9
commit 7c2fb83e9c
32 changed files with 752 additions and 99 deletions

View file

@ -231,10 +231,10 @@ void ggiFvPatchField<Type>::initEvaluate
template<class Type>
void ggiFvPatchField<Type>::evaluate
(
const Pstream::commsTypes
const Pstream::commsTypes commsTypes
)
{
fvPatchField<Type>::evaluate();
coupledFvPatchField<Type>::evaluate(commsTypes);
}

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved
@ -38,7 +39,6 @@ Note on parallelisation
\*---------------------------------------------------------------------------*/
#include "jumpGgiFvPatchField.H"
//#include "symmTransformField.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -122,44 +122,46 @@ void jumpGgiFvPatchField<Type>::initInterfaceMatrixUpdate
const unallocLabelList& sfc = this->ggiPatch().shadow().faceCells();
scalarField sField(sfc.size());
forAll (sField, i)
{
sField[i] = psiInternal[sfc[i]];
}
Field<Type> pnf = this->ggiPatch().interpolate(sField);
// Multiply the field by coefficients and add into the result
const unallocLabelList& fc = this->ggiPatch().faceCells();
const Field<scalar> jf = jump()().component(cmpt);
if
(
reinterpret_cast<const void*>(&psiInternal)
== reinterpret_cast<const void*>(&this->internalField())
)
{
const scalarField jf = jump()().component(cmpt);
forAll (sField, i)
forAll(pnf, elemI)
{
sField[i] = psiInternal[sfc[i]] + jf[i];
}
}
else
{
forAll (sField, i)
{
sField[i] = psiInternal[sfc[i]];
pnf[elemI] += jf[elemI];
}
}
scalarField pnf = this->ggiPatch().interpolate(sField);
// Multiply the field by coefficients and add into the result
const unallocLabelList& fc = this->ggiPatch().faceCells();
multiply(pnf, coeffs, pnf);
if (switchToLhs)
{
forAll(fc, elemI)
{
result[fc[elemI]] += coeffs[elemI]*pnf[elemI];
result[fc[elemI]] += pnf[elemI];
}
}
else
{
forAll(fc, elemI)
{
result[fc[elemI]] -= coeffs[elemI]*pnf[elemI];
result[fc[elemI]] -= pnf[elemI];
}
}
}

View file

@ -32,6 +32,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved
@ -109,7 +110,7 @@ jumpMixingPlaneFvPatchField<Type>::patchNeighbourField() const
if (this->mixing() == mixingPlaneInterpolation::AREA_AVERAGING)
{
// Area-weighted averaging
return this->mixingPlanePatch().interpolate(sField);
return this->mixingPlanePatch().interpolate(sField) + jump();
}
else if (this->mixing() == mixingPlaneInterpolation::FLUX_AVERAGING)
{
@ -134,11 +135,12 @@ jumpMixingPlaneFvPatchField<Type>::patchNeighbourField() const
)
)
+ this->mixingPlanePatch().fromProfile(1 - mask)*
this->patchInternalField();
this->patchInternalField()
+ jump();
}
else if (this->mixing() == mixingPlaneInterpolation::ZERO_GRADIENT)
{
return this->patchInternalField();
return this->patchInternalField() + jump();
}
else
{
@ -195,6 +197,32 @@ void jumpMixingPlaneFvPatchField<Type>::initInterfaceMatrixUpdate
scalarField pnf = this->mixingPlanePatch().interpolate(sField);
if
(
reinterpret_cast<const void*>(&psiInternal)
== reinterpret_cast<const void*>(&this->internalField())
)
{
const Field<scalar> jf = jump()().component(cmpt);
// Multiply the field by coefficients and add into the result
if (switchToLhs)
{
forAll(fc, elemI)
{
result[fc[elemI]] += coeffs[elemI]*(pnf[elemI] + jf[elemI]);
}
}
else
{
forAll(fc, elemI)
{
result[fc[elemI]] -= coeffs[elemI]*(pnf[elemI] + jf[elemI]);
}
}
}
else
{
// Multiply the field by coefficients and add into the result
if (switchToLhs)
{
@ -211,6 +239,7 @@ void jumpMixingPlaneFvPatchField<Type>::initInterfaceMatrixUpdate
}
}
}
}
else if (this->mixing() == mixingPlaneInterpolation::ZERO_GRADIENT)
{
// Do nothing

View file

@ -32,6 +32,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -30,6 +30,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -33,6 +33,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -33,6 +33,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -0,0 +1,199 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 4.0
\\ / A nd | Web: http://www.foam-extend.org
\\/ M anipulation | For copyright notice see file Copyright
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
Author
Ilaria De Dominicis, General Electric Power, (March 2016)
Contributor
Hrvoje Jasak, Wikki Ltd.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved
\*---------------------------------------------------------------------------*/
#include "jumpOverlapGgiFvPatchField.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class Type>
jumpOverlapGgiFvPatchField<Type>::jumpOverlapGgiFvPatchField
(
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF
)
:
overlapGgiFvPatchField<Type>(p, iF)
{}
template<class Type>
jumpOverlapGgiFvPatchField<Type>::jumpOverlapGgiFvPatchField
(
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF,
const dictionary& dict
)
:
overlapGgiFvPatchField<Type>(p, iF, dict)
{}
template<class Type>
jumpOverlapGgiFvPatchField<Type>::jumpOverlapGgiFvPatchField
(
const jumpOverlapGgiFvPatchField<Type>& ptf,
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF,
const fvPatchFieldMapper& mapper
)
:
overlapGgiFvPatchField<Type>(ptf, p, iF, mapper)
{}
template<class Type>
jumpOverlapGgiFvPatchField<Type>::jumpOverlapGgiFvPatchField
(
const jumpOverlapGgiFvPatchField<Type>& ptf
)
:
overlapGgiFvPatchField<Type>(ptf)
{}
template<class Type>
jumpOverlapGgiFvPatchField<Type>::jumpOverlapGgiFvPatchField
(
const jumpOverlapGgiFvPatchField<Type>& ptf,
const DimensionedField<Type, volMesh>& iF
)
:
overlapGgiFvPatchField<Type>(ptf, iF)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type>
tmp<Field<Type> >
jumpOverlapGgiFvPatchField<Type>::patchNeighbourField() const
{
return overlapGgiFvPatchField<Type>::patchNeighbourField() + jump();
}
template<class Type>
void jumpOverlapGgiFvPatchField<Type>::initInterfaceMatrixUpdate
(
const scalarField& psiInternal,
scalarField& result,
const lduMatrix&,
const scalarField& coeffs,
const direction cmpt,
const Pstream::commsTypes commsType,
const bool switchToLhs
) const
{
// Get shadow face-cells and assemble shadow field
const unallocLabelList& sfc = this->overlapGgiPatch().shadow().faceCells();
scalarField sField(sfc.size());
forAll (sField, i)
{
sField[i] = psiInternal[sfc[i]];
}
scalarField pnf = this->overlapGgiPatch().interpolate(sField);
// Multiply the field by coefficients and add into the result
const unallocLabelList& fc = this->overlapGgiPatch().faceCells();
if
(
reinterpret_cast<const void*>(&psiInternal)
== reinterpret_cast<const void*>(&this->internalField())
)
{
const Field<scalar> jf = jump()().component(cmpt);
if (switchToLhs)
{
forAll(fc, elemI)
{
result[fc[elemI]] += coeffs[elemI]*(pnf[elemI] + jf[elemI]);
}
}
else
{
forAll(fc, elemI)
{
result[fc[elemI]] -= coeffs[elemI]*(pnf[elemI] + jf[elemI]);
}
}
}
else
{
if (switchToLhs)
{
forAll(fc, elemI)
{
result[fc[elemI]] += coeffs[elemI]*(pnf[elemI]);
}
}
else
{
forAll(fc, elemI)
{
result[fc[elemI]] -= coeffs[elemI]*(pnf[elemI]);
}
}
}
}
template<class Type>
void jumpOverlapGgiFvPatchField<Type>::updateInterfaceMatrix
(
const scalarField& psiInternal,
scalarField& result,
const lduMatrix&,
const scalarField& coeffs,
const direction cmpt,
const Pstream::commsTypes,
const bool switchToLhs
) const
{}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View file

@ -0,0 +1,170 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 4.0
\\ / A nd | Web: http://www.foam-extend.org
\\/ M anipulation | For copyright notice see file Copyright
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
Class
jumpOverlapGgiFvPatchField
Description
OverlapGgi interface patch field with a jump condition
Author
Ilaria De Dominicis, General Electric Power, (March 2016)
Contributor
Hrvoje Jasak, Wikki Ltd.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved
SourceFiles
jumpOverlapGgiFvPatchField.C
\*---------------------------------------------------------------------------*/
#ifndef jumpOverlapGgiFvPatchField_H
#define jumpOverlapGgiFvPatchField_H
#include "overlapGgiFvPatchField.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class jumpOverlapGgiFvPatchField Declaration
\*---------------------------------------------------------------------------*/
template<class Type>
class jumpOverlapGgiFvPatchField
:
public overlapGgiFvPatchField<Type>
{
public:
//- Runtime type information
TypeName("jumpOverlapGgi");
// Constructors
//- Construct from patch and internal field
jumpOverlapGgiFvPatchField
(
const fvPatch&,
const DimensionedField<Type, volMesh>&
);
//- Construct from patch, internal field and dictionary
jumpOverlapGgiFvPatchField
(
const fvPatch&,
const DimensionedField<Type, volMesh>&,
const dictionary&
);
//- Construct by mapping given jumpOverlapGgiFvPatchField
// onto a new patch
jumpOverlapGgiFvPatchField
(
const jumpOverlapGgiFvPatchField<Type>&,
const fvPatch&,
const DimensionedField<Type, volMesh>&,
const fvPatchFieldMapper&
);
//- Construct as copy
jumpOverlapGgiFvPatchField
(
const jumpOverlapGgiFvPatchField&
);
//- Construct as copy setting internal field reference
jumpOverlapGgiFvPatchField
(
const jumpOverlapGgiFvPatchField<Type>&,
const DimensionedField<Type, volMesh>&
);
// Member functions
// Access
//- Return the interface type
virtual const word& interfaceFieldType() const
{
return overlapGgiFvPatchField<Type>::type();
}
//- Return the "jump" across the patch as a "half" field
virtual tmp<Field<Type> > jump() const = 0;
// Evaluation functions
//- Return neighbour patch field
virtual tmp<Field<Type> > patchNeighbourField() const;
//- Initialise neighbour matrix update
virtual void initInterfaceMatrixUpdate
(
const scalarField& psiInternal,
scalarField& result,
const lduMatrix& m,
const scalarField& coeffs,
const direction cmpt,
const Pstream::commsTypes commsType,
const bool switchToLhs
) const;
//- Update result field based on interface functionality
virtual void updateInterfaceMatrix
(
const scalarField& psiInternal,
scalarField& result,
const lduMatrix&,
const scalarField& coeffs,
const direction cmpt,
const Pstream::commsTypes commsType,
const bool switchToLhs
) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
# include "jumpOverlapGgiFvPatchField.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,55 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 4.0
\\ / A nd | Web: http://www.foam-extend.org
\\/ M anipulation | For copyright notice see file Copyright
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
Description
OverlapGgi patch field, providing coupling with a jump condition
between arbitrary patches
Author
Ilaria De Dominicis, General Electric Power, (March 2016)
Contributor
Hrvoje Jasak, Wikki Ltd.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved
\*---------------------------------------------------------------------------*/
#include "jumpOverlapGgiFvPatchFields.H"
#include "addToRunTimeSelectionTable.H"
#include "volFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
makePatchFieldsTypeName(jumpOverlapGgi);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View file

@ -0,0 +1,67 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 4.0
\\ / A nd | Web: http://www.foam-extend.org
\\/ M anipulation | For copyright notice see file Copyright
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
Class
jumpOverlapGgiFvPatchFields
Description
OverlapGgi patch field, providing coupling with a jump condition
between arbitrary patches
Author
Ilaria De Dominicis, General Electric Power, (March 2016)
Contributor
Hrvoje Jasak, Wikki Ltd.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved
SourceFiles
jumpOverlapGgiFvPatchFields.C
\*---------------------------------------------------------------------------*/
#ifndef jumpOverlapGgiFvPatchFields_H
#define jumpOverlapGgiFvPatchFields_H
#include "jumpOverlapGgiFvPatchField.H"
#include "fieldTypes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeFieldTypedefs(jumpOverlapGgi)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,65 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 4.0
\\ / A nd | Web: http://www.foam-extend.org
\\/ M anipulation | For copyright notice see file Copyright
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
Class
jumpOverlapGgiFvPatchField
Description
OverlapGgi patch field, providing coupling with a jump condition
between arbitrary patches
Author
Ilaria De Dominicis, General Electric Power, (March 2016)
Contributor
Hrvoje Jasak, Wikki Ltd.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved
\*---------------------------------------------------------------------------*/
#ifndef jumpOverlapGgiFvPatchFieldsFwd_H
#define jumpOverlapGgiFvPatchFieldsFwd_H
#include "fieldTypes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
template<class Type> class jumpOverlapGgiFvPatchField;
makePatchTypeFieldTypedefs(jumpOverlapGgi)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -522,10 +522,10 @@ void mixingPlaneFvPatchField<Type>::initEvaluate
template<class Type>
void mixingPlaneFvPatchField<Type>::evaluate
(
const Pstream::commsTypes
const Pstream::commsTypes commsTypes
)
{
fvPatchField<Type>::evaluate();
coupledFvPatchField<Type>::evaluate(commsTypes);
}

View file

@ -125,6 +125,14 @@ public:
// Member functions
//- Access
// Return overlapGgiFvPatch
const overlapGgiFvPatch& overlapGgiPatch() const
{
return overlapGgiPatch_;
}
// Evaluation functions

View file

@ -29,6 +29,7 @@ derivedFvPatchFields/mixedInternalEnergy/mixedInternalEnergyFvPatchScalarField.C
derivedFvPatchFields/ggiEnthalpyJump/ggiEnthalpyJumpFvPatchFields.C
derivedFvPatchFields/mixingPlaneEnthalpyJump/mixingPlaneEnthalpyJumpFvPatchFields.C
derivedFvPatchFields/overlapGgiEnthalpyJump/overlapGgiEnthalpyJumpFvPatchFields.C
derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C

View file

@ -116,13 +116,15 @@ void Foam::fixedEnthalpyFvPatchScalarField::updateCoeffs()
)
{
// Get access to relative and rotational velocity
const word UrelName("Urel");
const word UrotName("Urot");
const word UName("U");
const word URotName("URot");
const word UThetaName("UTheta");
if
(
!this->db().objectRegistry::found(UrelName)
|| !this->db().objectRegistry::found(UrotName)
!this->db().objectRegistry::found(URotName)
|| !this->db().objectRegistry::found(UName)
|| !this->db().objectRegistry::found(UThetaName)
)
{
// Velocities not available, do not update
@ -130,8 +132,9 @@ void Foam::fixedEnthalpyFvPatchScalarField::updateCoeffs()
(
"void gradientEnthalpyFvPatchScalarField::"
"updateCoeffs(const vectorField& Up)"
) << "Velocity fields " << UrelName << " or "
<< UrotName << " not found. "
) << "Velocity fields " << UName << " or "
<< URotName << " or "
<< UThetaName << " not found. "
<< "Performing enthalpy value update for field "
<< this->dimensionedInternalField().name()
<< " and patch " << patchi
@ -141,16 +144,20 @@ void Foam::fixedEnthalpyFvPatchScalarField::updateCoeffs()
}
else
{
const fvPatchVectorField& Urelp =
lookupPatchField<volVectorField, vector>(UrelName);
const fvPatchVectorField& Up =
lookupPatchField<volVectorField, vector>(UName);
const fvPatchVectorField& Urotp =
lookupPatchField<volVectorField, vector>(UrotName);
const fvPatchVectorField& URotp =
lookupPatchField<volVectorField, vector>(URotName);
const fvPatchScalarField& UThetap =
lookupPatchField<volScalarField, scalar>(UThetaName);
operator==
(
thermo.h(Tw, patchi)
- 0.5*(magSqr(Urotp) - magSqr(Urelp))
+ 0.5*magSqr(Up)
- mag(UThetap)*mag(URotp)
);
}
}

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -32,6 +32,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved
@ -58,13 +59,15 @@ void Foam::ggiEnthalpyJumpFvPatchField<Foam::scalar>::updateCoeffs()
}
// Get access to relative and rotational velocity
const word UrelName("Urel");
const word UName("U");
const word URotName("URot");
const word UThetaName("UTheta");
jump_ = 0;
if
(
!this->db().objectRegistry::found(UrelName)
|| !this->db().objectRegistry::found(UName)
!this->db().objectRegistry::found(URotName)
|| !this->db().objectRegistry::found(UThetaName)
)
{
// Velocities not available, do not update
@ -72,31 +75,37 @@ void Foam::ggiEnthalpyJumpFvPatchField<Foam::scalar>::updateCoeffs()
(
"void gradientEnthalpyFvPatchScalarField::"
"updateCoeffs(const vectorField& Up)"
) << "Velocity fields " << UrelName << " or "
<< UName << " not found. "
) << "Velocity fields " << URotName << " or "
<< UThetaName << " not found. "
<< "Performing enthalpy value update" << endl;
jump_ = 0;
}
else
{
const fvPatchVectorField& Urelp =
lookupPatchField<volVectorField, vector>(UrelName);
const fvPatchVectorField& URotp =
lookupPatchField<volVectorField, vector>(URotName);
const fvPatchVectorField& Up =
lookupPatchField<volVectorField, vector>(UName);
const fvPatchScalarField& UThetap =
lookupPatchField<volScalarField, scalar>(UThetaName);
if (rotating_)
{
jump_ =
mag(Up.patchInternalField())*mag(Urelp.patchInternalField())
- magSqr(Up.patchInternalField());
const scalarField UThetaIn = UThetap.patchInternalField();
jump_ = - (
mag(UThetaIn)
*mag(URotp.patchInternalField())
);
}
else
{
jump_ =
mag(Up.patchNeighbourField())*mag(Urelp.patchNeighbourField())
- magSqr(Up.patchNeighbourField());
const scalarField UThetaIn = UThetap.patchNeighbourField();
jump_ = (
mag(UThetaIn)
*mag(URotp.patchNeighbourField())
);
}
}

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -122,13 +122,15 @@ void Foam::gradientEnthalpyFvPatchScalarField::updateCoeffs()
)
{
// Get access to relative and rotational velocity
const word UrelName("Urel");
const word UrotName("Urot");
const word UName("U");
const word URotName("URot");
const word UThetaName("UTheta");
if
(
!this->db().objectRegistry::found(UrelName)
|| !this->db().objectRegistry::found(UrotName)
!this->db().objectRegistry::found(UName)
|| !this->db().objectRegistry::found(URotName)
|| !this->db().objectRegistry::found(UThetaName)
)
{
// Velocities not available, do not update
@ -136,8 +138,9 @@ void Foam::gradientEnthalpyFvPatchScalarField::updateCoeffs()
(
"void gradientEnthalpyFvPatchScalarField::"
"updateCoeffs(const vectorField& Up)"
) << "Velocity fields " << UrelName << " or "
<< UrotName << " not found. "
) << "Velocity fields " << UName << " or "
<< URotName << " or "
<< UThetaName << " not found. "
<< "Performing enthalpy value update for field "
<< this->dimensionedInternalField().name()
<< " and patch " << patchi
@ -152,11 +155,14 @@ void Foam::gradientEnthalpyFvPatchScalarField::updateCoeffs()
}
else
{
const fvPatchVectorField& Urelp =
lookupPatchField<volVectorField, vector>(UrelName);
const fvPatchVectorField& Up =
lookupPatchField<volVectorField, vector>(UName);
const fvPatchVectorField& Urotp =
lookupPatchField<volVectorField, vector>(UrotName);
const fvPatchVectorField& URotp =
lookupPatchField<volVectorField, vector>(URotName);
const fvPatchScalarField& UThetap =
lookupPatchField<volScalarField, scalar>(UThetaName);
gradient() = thermo.Cp(Tw, patchi)*Tw.snGrad()
+ patch().deltaCoeffs()*
@ -164,8 +170,8 @@ void Foam::gradientEnthalpyFvPatchScalarField::updateCoeffs()
thermo.h(Tw, patchi)
- thermo.h(Tw, patch().faceCells())
)
- mag(Urotp)*mag(Urotp.snGrad())
+ mag(Urelp)*mag(Urelp.snGrad());
+ 0.5*mag(Up)*mag(Up.snGrad())
- mag(UThetap)*mag(URotp.snGrad());
}
}
else

View file

@ -131,13 +131,15 @@ void Foam::mixedEnthalpyFvPatchScalarField::updateCoeffs()
)
{
// Get access to relative and rotational velocity
const word UrelName("Urel");
const word UrotName("Urot");
const word UName("U");
const word URotName("URot");
const word UThetaName("UTheta");
if
(
!this->db().objectRegistry::found(UrelName)
|| !this->db().objectRegistry::found(UrotName)
!this->db().objectRegistry::found(UName)
|| !this->db().objectRegistry::found(URotName)
|| !this->db().objectRegistry::found(UThetaName)
)
{
// Velocities not available, do not update
@ -145,8 +147,9 @@ void Foam::mixedEnthalpyFvPatchScalarField::updateCoeffs()
(
"void gradientEnthalpyFvPatchScalarField::"
"updateCoeffs(const vectorField& Up)"
) << "Velocity fields " << UrelName << " or "
<< UrotName << " not found. "
) << "Velocity fields " << UName << " or "
<< URotName << " or "
<< UThetaName << " not found. "
<< "Performing enthalpy value update for field "
<< this->dimensionedInternalField().name()
<< " and patch " << patchi
@ -162,14 +165,18 @@ void Foam::mixedEnthalpyFvPatchScalarField::updateCoeffs()
}
else
{
const fvPatchVectorField& Urelp =
lookupPatchField<volVectorField, vector>(UrelName);
const fvPatchVectorField& Up =
lookupPatchField<volVectorField, vector>(UName);
const fvPatchVectorField& Urotp =
lookupPatchField<volVectorField, vector>(UrotName);
const fvPatchVectorField& URotp =
lookupPatchField<volVectorField, vector>(URotName);
const fvPatchScalarField& UThetap =
lookupPatchField<volScalarField, scalar>(UThetaName);
refValue() = thermo.h(Tw.refValue(), patchi)
- 0.5*(magSqr(Urotp) - magSqr(Urelp));
+ 0.5*magSqr(Up)
- mag(UThetap)*mag(URotp);
refGrad() = thermo.Cp(Tw, patchi)*Tw.refGrad()
+ patch().deltaCoeffs()*
@ -177,8 +184,8 @@ void Foam::mixedEnthalpyFvPatchScalarField::updateCoeffs()
thermo.h(Tw, patchi)
- thermo.h(Tw, patch().faceCells())
)
- mag(Urotp)*mag(Urotp.snGrad())
+ mag(Urelp)*mag(Urelp.snGrad());
+ 0.5*mag(Up)*mag(Up.snGrad())
- mag(UThetap)*mag(URotp.snGrad());
}
}
else

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -32,6 +32,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved
@ -58,13 +59,15 @@ void Foam::mixingPlaneEnthalpyJumpFvPatchField<Foam::scalar>::updateCoeffs()
}
// Get access to relative and rotational velocity
const word UrelName("Urel");
const word UName("U");
const word URotName("URot");
const word UThetaName("UTheta");
jump_ = 0;
if
(
!this->db().objectRegistry::found(UrelName)
|| !this->db().objectRegistry::found(UName)
!this->db().objectRegistry::found(URotName)
|| !this->db().objectRegistry::found(UThetaName)
)
{
// Velocities not available, do not update
@ -72,31 +75,40 @@ void Foam::mixingPlaneEnthalpyJumpFvPatchField<Foam::scalar>::updateCoeffs()
(
"void gradientEnthalpyFvPatchScalarField::"
"updateCoeffs(const vectorField& Up)"
) << "Velocity fields " << UrelName << " or "
<< UName << " not found. "
) << "Velocity fields " << URotName << " or "
<< UThetaName << " not found. "
<< "Performing enthalpy value update" << endl;
jump_ = 0;
}
else
{
const fvPatchVectorField& Urelp =
lookupPatchField<volVectorField, vector>(UrelName);
const fvPatchVectorField& URotp =
lookupPatchField<volVectorField, vector>(URotName);
const fvPatchVectorField& Up =
lookupPatchField<volVectorField, vector>(UName);
const fvPatchScalarField& UThetap =
lookupPatchField<volScalarField, scalar>(UThetaName);
if (rotating_)
{
jump_ =
mag(Up.patchInternalField())*mag(Urelp.patchInternalField())
- magSqr(Up.patchInternalField());
// We can either make jump_ on neighbour field and interpolate (in
// jumpOverlapGgi) or interpolate first, then add jump_ for
// internalField
const scalarField UThetaIn = UThetap.patchInternalField();
jump_ = - (
mag(UThetaIn)
*mag(URotp.patchInternalField())
);
}
else
{
jump_ =
mag(Up.patchNeighbourField())*mag(Urelp.patchNeighbourField())
- magSqr(Up.patchNeighbourField());
const scalarField UThetaIn = UThetap.patchNeighbourField();
jump_ = (
mag(UThetaIn)
*mag(URotp.patchNeighbourField())
);
}
}

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved

View file

@ -26,6 +26,7 @@ Author
Contributor
Hrvoje Jasak, Wikki Ltd.
Gregor Cvijetic, FMENA Zagreb.
GE CONFIDENTIAL INFORMATION 2016 General Electric Company. All Rights Reserved