GGI and mixing planes with jump conditions

This commit is contained in:
Hrvoje Jasak 2016-05-26 13:36:20 +01:00
parent a5865eaf77
commit b80d362741
27 changed files with 2358 additions and 31 deletions

View file

@ -87,3 +87,5 @@ Contents:
Alexey Matveichev Alexey Matveichev
Vuko Vukcevic Vuko Vukcevic
Robert Keser Robert Keser
Cesare Guardino
Ilaria De Dominicis

View file

@ -123,9 +123,11 @@ $(constraintFvPatchFields)/wedge/wedgeFvPatchScalarField.C
$(constraintFvPatchFields)/wedge/wedgeFvPatchVectorNFields.C $(constraintFvPatchFields)/wedge/wedgeFvPatchVectorNFields.C
$(constraintFvPatchFields)/ggi/ggiFvPatchFields.C $(constraintFvPatchFields)/ggi/ggiFvPatchFields.C
$(constraintFvPatchFields)/ggi/ggiFvPatchVectorNFields.C $(constraintFvPatchFields)/ggi/ggiFvPatchVectorNFields.C
$(constraintFvPatchFields)/jumpGgi/jumpGgiFvPatchFields.C
$(constraintFvPatchFields)/cyclicGgi/cyclicGgiFvPatchFields.C $(constraintFvPatchFields)/cyclicGgi/cyclicGgiFvPatchFields.C
$(constraintFvPatchFields)/overlapGgi/overlapGgiFvPatchFields.C $(constraintFvPatchFields)/overlapGgi/overlapGgiFvPatchFields.C
$(constraintFvPatchFields)/mixingPlane/mixingPlaneFvPatchFields.C $(constraintFvPatchFields)/mixingPlane/mixingPlaneFvPatchFields.C
$(constraintFvPatchFields)/jumpMixingPlane/jumpMixingPlaneFvPatchFields.C
$(constraintFvPatchFields)/regionCoupling/regionCouplingFvPatchFields.C $(constraintFvPatchFields)/regionCoupling/regionCouplingFvPatchFields.C
derivedFvPatchFields = $(fvPatchFields)/derived derivedFvPatchFields = $(fvPatchFields)/derived

View file

@ -128,6 +128,12 @@ public:
// Access // Access
//- Return reference to GGI patch
const ggiFvPatch& ggiPatch() const
{
return ggiPatch_;
}
//- Return shadow patch field //- Return shadow patch field
const ggiFvPatchField<Type>& shadowPatchField() const; const ggiFvPatchField<Type>& shadowPatchField() const;

View file

@ -0,0 +1,186 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
Note on parallelisation
In order to handle parallelisation correctly, I need to rely on the fact
that all patches that require a global gather-scatter come before
processor patches. In that case, the communication pattern
will be correct without intervention. HJ, 6/Aug/2009
\*---------------------------------------------------------------------------*/
#include "jumpGgiFvPatchField.H"
//#include "symmTransformField.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class Type>
jumpGgiFvPatchField<Type>::jumpGgiFvPatchField
(
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF
)
:
ggiFvPatchField<Type>(p, iF)
{}
template<class Type>
jumpGgiFvPatchField<Type>::jumpGgiFvPatchField
(
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF,
const dictionary& dict
)
:
ggiFvPatchField<Type>(p, iF, dict)
{}
template<class Type>
jumpGgiFvPatchField<Type>::jumpGgiFvPatchField
(
const jumpGgiFvPatchField<Type>& ptf,
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF,
const fvPatchFieldMapper& mapper
)
:
ggiFvPatchField<Type>(ptf, p, iF, mapper)
{}
template<class Type>
jumpGgiFvPatchField<Type>::jumpGgiFvPatchField
(
const jumpGgiFvPatchField<Type>& ptf,
const DimensionedField<Type, volMesh>& iF
)
:
ggiFvPatchField<Type>(ptf, iF)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type>
tmp<Field<Type> > jumpGgiFvPatchField<Type>::patchNeighbourField() const
{
return ggiFvPatchField<Type>::patchNeighbourField() + jump();
}
template<class Type>
void jumpGgiFvPatchField<Type>::initInterfaceMatrixUpdate
(
const scalarField& psiInternal,
scalarField& result,
const lduMatrix&,
const scalarField& coeffs,
const direction cmpt,
const Pstream::commsTypes commsType,
const bool switchToLhs
) const
{
// Communication is allowed either before or after processor
// patch comms. HJ, 11/Jul/2011
// Get shadow face-cells and assemble shadow field
const unallocLabelList& sfc = this->ggiPatch().shadow().faceCells();
scalarField sField(sfc.size());
if
(
reinterpret_cast<const void*>(&psiInternal)
== reinterpret_cast<const void*>(&this->internalField())
)
{
const scalarField jf = jump()().component(cmpt);
forAll (sField, i)
{
sField[i] = psiInternal[sfc[i]] + jf[i];
}
}
else
{
forAll (sField, i)
{
sField[i] = psiInternal[sfc[i]];
}
}
scalarField pnf = this->ggiPatch().interpolate(sField);
// Multiply the field by coefficients and add into the result
const unallocLabelList& fc = this->ggiPatch().faceCells();
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 jumpGgiFvPatchField<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,162 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
jumpGgiFvPatchField
Description
Generalized grid 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
jumpGgiFvPatchField.C
\*---------------------------------------------------------------------------*/
#ifndef jumpGgiFvPatchField_H
#define jumpGgiFvPatchField_H
#include "ggiFvPatchField.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class jumpGgiFvPatchField Declaration
\*---------------------------------------------------------------------------*/
template<class Type>
class jumpGgiFvPatchField
:
public ggiFvPatchField<Type>
{
public:
//- Runtime type information
TypeName("jumpGgi");
// Constructors
//- Construct from patch and internal field
jumpGgiFvPatchField
(
const fvPatch&,
const DimensionedField<Type, volMesh>&
);
//- Construct from patch, internal field and dictionary
jumpGgiFvPatchField
(
const fvPatch&,
const DimensionedField<Type, volMesh>&,
const dictionary&
);
//- Construct by mapping given jumpGgiFvPatchField onto a new patch
jumpGgiFvPatchField
(
const jumpGgiFvPatchField<Type>&,
const fvPatch&,
const DimensionedField<Type, volMesh>&,
const fvPatchFieldMapper&
);
//- Construct as copy setting internal field reference
jumpGgiFvPatchField
(
const jumpGgiFvPatchField<Type>&,
const DimensionedField<Type, volMesh>&
);
// Member functions
// Access
//- Return the interface type
virtual const word& interfaceFieldType() const
{
return ggiFvPatchField<Type>::type();
}
//- Return the "jump" across the patch as a "half" field
virtual tmp<Field<Type> > jump() const = 0;
// Evaluation functions
//- Return neighbour field given internal cell data
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 "jumpGgiFvPatchField.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,51 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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 "jumpGgiFvPatchFields.H"
#include "addToRunTimeSelectionTable.H"
#include "volFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
makePatchFieldsTypeName(jumpGgi);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View file

@ -0,0 +1,57 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
\*---------------------------------------------------------------------------*/
#ifndef jumpGgiFvPatchFields_H
#define jumpGgiFvPatchFields_H
#include "jumpGgiFvPatchField.H"
#include "fieldTypes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeFieldTypedefs(jumpGgi)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,59 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
\*---------------------------------------------------------------------------*/
#ifndef jumpGgiFvPatchFieldsFwd_H
#define jumpGgiFvPatchFieldsFwd_H
#include "fvPatchField.H"
#include "fieldTypes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
template<class Type> class jumpGgiFvPatchField;
makePatchTypeFieldTypedefs(jumpGgi)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,260 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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 "jumpMixingPlaneFvPatchField.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class Type>
jumpMixingPlaneFvPatchField<Type>::jumpMixingPlaneFvPatchField
(
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF
)
:
mixingPlaneFvPatchField<Type>(p, iF)
{}
template<class Type>
jumpMixingPlaneFvPatchField<Type>::jumpMixingPlaneFvPatchField
(
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF,
const dictionary& dict
)
:
mixingPlaneFvPatchField<Type>(p, iF, dict)
{}
template<class Type>
jumpMixingPlaneFvPatchField<Type>::jumpMixingPlaneFvPatchField
(
const jumpMixingPlaneFvPatchField<Type>& ptf,
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF,
const fvPatchFieldMapper& mapper
)
:
mixingPlaneFvPatchField<Type>(ptf, p, iF, mapper)
{}
template<class Type>
jumpMixingPlaneFvPatchField<Type>::jumpMixingPlaneFvPatchField
(
const jumpMixingPlaneFvPatchField<Type>& ptf
)
:
mixingPlaneFvPatchField<Type>(ptf)
{}
template<class Type>
jumpMixingPlaneFvPatchField<Type>::jumpMixingPlaneFvPatchField
(
const jumpMixingPlaneFvPatchField<Type>& ptf,
const DimensionedField<Type, volMesh>& iF
)
:
mixingPlaneFvPatchField<Type>(ptf, iF)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type>
tmp<Field<Type> >
jumpMixingPlaneFvPatchField<Type>::patchNeighbourField() const
{
// Get shadow patch internalField field
Field<Type> sField = this->shadowPatchField().patchInternalField();
if (this->mixing() == mixingPlaneInterpolation::AREA_AVERAGING)
{
// Area-weighted averaging
return this->mixingPlanePatch().interpolate(sField);
}
else if (this->mixing() == mixingPlaneInterpolation::FLUX_AVERAGING)
{
// Flux averaging
// - for outgoing flux, use zero gradient condition
// - for incoming flux, use interpolated flux-weighted value
const scalarField& mask = this->fluxMask();
const scalarField& shadowFluxWeights =
this->shadowPatchField().fluxWeights();
// For outgoing flux, the value is identical to internal value
// For incoming flux, calculate the average value of the
// flux-weight shadow values coming out
return
this->mixingPlanePatch().fromProfile
(
mask*this->mixingPlanePatch().shadow().toProfile
(
sField*shadowFluxWeights
)
)
+ this->mixingPlanePatch().fromProfile(1 - mask)*
this->patchInternalField();
}
else if (this->mixing() == mixingPlaneInterpolation::ZERO_GRADIENT)
{
return this->patchInternalField();
}
else
{
FatalErrorIn
(
"tmp<Field<Type> > jumpMixingPlaneFvPatchField<Type>::"
"patchNeighbourField() const"
) << "Unknown mixing type for patch " << this->patch().name()
<< " for field "
<< this->dimensionedInternalField().name()
<< abort(FatalError);
}
// Dummy return to keep compiler happy
return this->patchInternalField();
}
template<class Type>
void jumpMixingPlaneFvPatchField<Type>::initInterfaceMatrixUpdate
(
const scalarField& psiInternal,
scalarField& result,
const lduMatrix&,
const scalarField& coeffs,
const direction cmpt,
const Pstream::commsTypes commsType,
const bool switchToLhs
) const
{
// Communication is allowed either before or after processor
// patch comms. HJ, 11/Jul/2011
if
(
this->mixing() == mixingPlaneInterpolation::AREA_AVERAGING
|| this->mixing() == mixingPlaneInterpolation::FLUX_AVERAGING
)
{
// Get shadow face-cells and assemble shadow field
const unallocLabelList& sfc =
this->mixingPlanePatch().shadow().faceCells();
scalarField sField(sfc.size());
forAll (sField, i)
{
sField[i] = psiInternal[sfc[i]];
}
// Get local faceCells
const unallocLabelList& fc = this->mixingPlanePatch().faceCells();
scalarField pnf = this->mixingPlanePatch().interpolate(sField);
// Multiply the field by coefficients and add into the result
if (switchToLhs)
{
forAll(fc, elemI)
{
result[fc[elemI]] += coeffs[elemI]*pnf[elemI];
}
}
else
{
forAll(fc, elemI)
{
result[fc[elemI]] -= coeffs[elemI]*pnf[elemI];
}
}
}
else if (this->mixing() == mixingPlaneInterpolation::ZERO_GRADIENT)
{
// Do nothing
}
else
{
FatalErrorIn
(
"void jumpMixingPlaneFvPatchField<Type>::"
"initInterfaceMatrixUpdate\n"
"(\n"
" const scalarField& psiInternal,\n"
" scalarField& result,\n"
" const lduMatrix&,\n"
" const scalarField& coeffs,\n"
" const direction cmpt,\n"
" const Pstream::commsTypes commsType,\n"
" const bool switchToLhs\n"
") const"
) << "Unknown mixing type for patch " << this->patch().name()
<< " for field "
<< this->dimensionedInternalField().name()
<< abort(FatalError);
}
}
template<class Type>
void jumpMixingPlaneFvPatchField<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: 3.2
\\ / 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
jumpMixingPlaneFvPatchField
Description
MixingPlane 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
jumpMixingPlaneFvPatchField.C
\*---------------------------------------------------------------------------*/
#ifndef jumpMixingPlaneFvPatchField_H
#define jumpMixingPlaneFvPatchField_H
#include "mixingPlaneFvPatchField.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class jumpMixingPlaneFvPatchField Declaration
\*---------------------------------------------------------------------------*/
template<class Type>
class jumpMixingPlaneFvPatchField
:
public mixingPlaneFvPatchField<Type>
{
public:
//- Runtime type information
TypeName("jumpMixingPlane");
// Constructors
//- Construct from patch and internal field
jumpMixingPlaneFvPatchField
(
const fvPatch&,
const DimensionedField<Type, volMesh>&
);
//- Construct from patch, internal field and dictionary
jumpMixingPlaneFvPatchField
(
const fvPatch&,
const DimensionedField<Type, volMesh>&,
const dictionary&
);
//- Construct by mapping given jumpMixingPlaneFvPatchField
// onto a new patch
jumpMixingPlaneFvPatchField
(
const jumpMixingPlaneFvPatchField<Type>&,
const fvPatch&,
const DimensionedField<Type, volMesh>&,
const fvPatchFieldMapper&
);
//- Construct as copy
jumpMixingPlaneFvPatchField
(
const jumpMixingPlaneFvPatchField&
);
//- Construct as copy setting internal field reference
jumpMixingPlaneFvPatchField
(
const jumpMixingPlaneFvPatchField<Type>&,
const DimensionedField<Type, volMesh>&
);
// Member functions
// Access
//- Return the interface type
virtual const word& interfaceFieldType() const
{
return mixingPlaneFvPatchField<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 "jumpMixingPlaneFvPatchField.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,55 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
MixingPlane 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 "jumpMixingPlaneFvPatchFields.H"
#include "addToRunTimeSelectionTable.H"
#include "volFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
makePatchFieldsTypeName(jumpMixingPlane);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View file

@ -0,0 +1,67 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
jumpMixingPlaneFvPatchFields
Description
MixingPlane 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
jumpMixingPlaneFvPatchFields.C
\*---------------------------------------------------------------------------*/
#ifndef jumpMixingPlaneFvPatchFields_H
#define jumpMixingPlaneFvPatchFields_H
#include "jumpMixingPlaneFvPatchField.H"
#include "fieldTypes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeFieldTypedefs(jumpMixingPlane)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,65 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
jumpMixingPlaneFvPatchField
Description
MixingPlane 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 jumpMixingPlaneFvPatchFieldsFwd_H
#define jumpMixingPlaneFvPatchFieldsFwd_H
#include "fieldTypes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
template<class Type> class jumpMixingPlaneFvPatchField;
makePatchTypeFieldTypedefs(jumpMixingPlane)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -324,24 +324,6 @@ mixingPlaneFvPatchField<Type>::mixingPlaneFvPatchField
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
// Return shadow field
template<class Type>
const mixingPlaneFvPatchField<Type>&
mixingPlaneFvPatchField<Type>::shadowPatchField() const
{
const GeometricField<Type, fvPatchField, volMesh>& fld =
static_cast<const GeometricField<Type, fvPatchField, volMesh>&>
(
this->internalField()
);
return refCast<const mixingPlaneFvPatchField<Type> >
(
fld.boundaryField()[mixingPlanePatch_.shadowIndex()]
);
}
template<class Type> template<class Type>
void mixingPlaneFvPatchField<Type>::autoMap void mixingPlaneFvPatchField<Type>::autoMap
( (
@ -371,6 +353,39 @@ void mixingPlaneFvPatchField<Type>::rmap
} }
// Return shadow field
template<class Type>
const mixingPlaneFvPatchField<Type>&
mixingPlaneFvPatchField<Type>::shadowPatchField() const
{
const GeometricField<Type, fvPatchField, volMesh>& fld =
static_cast<const GeometricField<Type, fvPatchField, volMesh>&>
(
this->internalField()
);
return refCast<const mixingPlaneFvPatchField<Type> >
(
fld.boundaryField()[mixingPlanePatch_.shadowIndex()]
);
}
// Return shadow field
template<class Type>
const mixingPlaneInterpolation::mixingType&
mixingPlaneFvPatchField<Type>::mixing() const
{
// If mixing type is unknown, read it
if (this->mixing_ == mixingPlaneInterpolation::MIXING_UNKNOWN)
{
this->readMixingType();
}
return mixing_;
}
template<class Type> template<class Type>
void mixingPlaneFvPatchField<Type>::updateCoeffs() void mixingPlaneFvPatchField<Type>::updateCoeffs()
{ {

View file

@ -90,14 +90,6 @@ class mixingPlaneFvPatchField
//- Calculate flux mask and weights //- Calculate flux mask and weights
void calcFluxMask() const; void calcFluxMask() const;
// Return flux mask. Flux mask is calculated from master fluxes
// and relates to the mixing plane profile
const scalarField& fluxMask() const;
// Return flux weights. Flux weights relate to local faces and are
// used in weighted interpolation
const scalarField& fluxWeights() const;
public: public:
@ -186,9 +178,26 @@ public:
// Access // Access
//- Return reference to mixingPlanePatch patch
const mixingPlaneFvPatch& mixingPlanePatch() const
{
return mixingPlanePatch_;
}
//- Return shadow patch field //- Return shadow patch field
const mixingPlaneFvPatchField<Type>& shadowPatchField() const; const mixingPlaneFvPatchField<Type>& shadowPatchField() const;
//- Return reference to mixing patch
const mixingPlaneInterpolation::mixingType& mixing() const;
//- Return flux mask. Flux mask is calculated from master fluxes
// and relates to the mixing plane profile
const scalarField& fluxMask() const;
//- Return flux weights. Flux weights relate to local faces
// and are used in weighted interpolation
const scalarField& fluxWeights() const;
// Evaluation functions // Evaluation functions

View file

@ -22,6 +22,9 @@ derivedFvPatchFields/fixedInternalEnergy/fixedInternalEnergyFvPatchScalarField.C
derivedFvPatchFields/gradientInternalEnergy/gradientInternalEnergyFvPatchScalarField.C derivedFvPatchFields/gradientInternalEnergy/gradientInternalEnergyFvPatchScalarField.C
derivedFvPatchFields/mixedInternalEnergy/mixedInternalEnergyFvPatchScalarField.C derivedFvPatchFields/mixedInternalEnergy/mixedInternalEnergyFvPatchScalarField.C
derivedFvPatchFields/ggiEnthalpyJump/ggiEnthalpyJumpFvPatchFields.C
derivedFvPatchFields/mixingPlaneEnthalpyJump/mixingPlaneEnthalpyJumpFvPatchFields.C
derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C
derivedFvPatchFields/temperatureDirectedInletOutletVelocity/temperatureDirectedInletOutletVelocityFvPatchVectorField.C derivedFvPatchFields/temperatureDirectedInletOutletVelocity/temperatureDirectedInletOutletVelocityFvPatchVectorField.C

View file

@ -0,0 +1,161 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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 "ggiEnthalpyJumpFvPatchField.H"
#include "IOmanip.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class Type>
ggiEnthalpyJumpFvPatchField<Type>::ggiEnthalpyJumpFvPatchField
(
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF
)
:
jumpGgiFvPatchField<Type>(p, iF),
rotating_(false),
jump_(this->size(), pTraits<Type>::zero)
{}
template<class Type>
ggiEnthalpyJumpFvPatchField<Type>::ggiEnthalpyJumpFvPatchField
(
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF,
const dictionary& dict
)
:
jumpGgiFvPatchField<Type>(p, iF),
rotating_(dict.lookup("rotating")),
jump_(this->size(), pTraits<Type>::zero)
{
if (dict.found("value"))
{
fvPatchField<Type>::operator=
(
Field<Type>("value", dict, p.size())
);
}
else
{
this->evaluate(Pstream::blocking);
}
}
template<class Type>
ggiEnthalpyJumpFvPatchField<Type>::ggiEnthalpyJumpFvPatchField
(
const ggiEnthalpyJumpFvPatchField<Type>& ptf,
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF,
const fvPatchFieldMapper& mapper
)
:
jumpGgiFvPatchField<Type>(ptf, p, iF, mapper),
rotating_(ptf.rotating_),
jump_(ptf.jump_, mapper)
{}
template<class Type>
ggiEnthalpyJumpFvPatchField<Type>::ggiEnthalpyJumpFvPatchField
(
const ggiEnthalpyJumpFvPatchField<Type>& ptf,
const DimensionedField<Type, volMesh>& iF
)
:
jumpGgiFvPatchField<Type>(ptf, iF),
rotating_(ptf.rotating_),
jump_(ptf.jump_)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type>
void ggiEnthalpyJumpFvPatchField<Type>::autoMap
(
const fvPatchFieldMapper& m
)
{
jumpGgiFvPatchField<Type>::autoMap(m);
jump_.autoMap(m);
}
template<class Type>
void ggiEnthalpyJumpFvPatchField<Type>::rmap
(
const fvPatchField<Type>& ptf,
const labelList& addr
)
{
jumpGgiFvPatchField<Type>::rmap(ptf, addr);
// rmap jump
const ggiEnthalpyJumpFvPatchField<Type>& ejPtf =
refCast<const ggiEnthalpyJumpFvPatchField<Type> >(ptf);
jump_.rmap(ejPtf.jump_, addr);
}
template<class Type>
void ggiEnthalpyJumpFvPatchField<Type>::write(Ostream& os) const
{
fvPatchField<Type>::write(os);
os.writeKeyword("patchType")
<< ggiFvPatch::typeName << token::END_STATEMENT << nl;
os.writeKeyword("rotating")
<< rotating_ << token::END_STATEMENT << nl;
IOstream::streamFormat fmt0 = os.format(IOstream::ASCII);
os.format(fmt0);
this->writeEntry("value", os);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View file

@ -0,0 +1,195 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
Foam::ggiEnthalpyJumpFvPatchField
Description
Foam::ggiEnthalpyJumpFvPatchField
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
ggiEnthalpyJumpFvPatchField.C
\*---------------------------------------------------------------------------*/
#ifndef ggiEnthalpyJumpFvPatchField_H
#define ggiEnthalpyJumpFvPatchField_H
#include "jumpGgiFvPatchField.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class ggiEnthalpyJumpFvPatchField Declaration
\*---------------------------------------------------------------------------*/
template<class Type>
class ggiEnthalpyJumpFvPatchField
:
public jumpGgiFvPatchField<Type>
{
// Private data
//- Is the patch on the rotating side?
Switch rotating_;
//- "jump" field
Field<Type> jump_;
public:
//- Runtime type information
TypeName("ggiEnthalpyJump");
// Constructors
//- Construct from patch and internal field
ggiEnthalpyJumpFvPatchField
(
const fvPatch&,
const DimensionedField<Type, volMesh>&
);
//- Construct from patch, internal field and dictionary
ggiEnthalpyJumpFvPatchField
(
const fvPatch&,
const DimensionedField<Type, volMesh>&,
const dictionary&
);
//- Construct by mapping given ggiEnthalpyJumpFvPatchField
// onto a new patch
ggiEnthalpyJumpFvPatchField
(
const ggiEnthalpyJumpFvPatchField<Type>&,
const fvPatch&,
const DimensionedField<Type, volMesh>&,
const fvPatchFieldMapper&
);
//- Construct as copy setting internal field reference
ggiEnthalpyJumpFvPatchField
(
const ggiEnthalpyJumpFvPatchField<Type>&,
const DimensionedField<Type, volMesh>&
);
//- Construct and return a clone
virtual tmp<fvPatchField<Type> > clone() const
{
return tmp<fvPatchField<Type> >
(
new ggiEnthalpyJumpFvPatchField<Type>(*this)
);
}
//- Construct and return a clone setting internal field reference
virtual tmp<fvPatchField<Type> > clone
(
const DimensionedField<Type, volMesh>& iF
) const
{
return tmp<fvPatchField<Type> >
(
new ggiEnthalpyJumpFvPatchField<Type>(*this, iF)
);
}
// Member functions
// Access
//- Is the patch rotating
bool rotating() const
{
return rotating_;
}
//- Return the "jump" across the patch as a "half" field
virtual tmp<Field<Type> > jump() const
{
return jump_;
}
// Mapping functions
//- Map (and resize as needed) from self given a mapping object
virtual void autoMap
(
const fvPatchFieldMapper&
);
//- Reverse map the given fvPatchField onto this fvPatchField
virtual void rmap
(
const fvPatchField<Type>&,
const labelList&
);
// Evaluation functions
//- Update the coefficients associated with the patch field
virtual void updateCoeffs();
//- Write
virtual void write(Ostream&) const;
};
//- Specialisation of the jump-condition for the enthalpy
template<>
void ggiEnthalpyJumpFvPatchField<scalar>::updateCoeffs();
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
# include "ggiEnthalpyJumpFvPatchField.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,107 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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 "ggiEnthalpyJumpFvPatchFields.H"
#include "addToRunTimeSelectionTable.H"
#include "volFields.H"
#include "surfaceFields.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
makeTemplatePatchTypeField
(
fvPatchScalarField,
ggiEnthalpyJumpFvPatchScalarField
);
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<>
void Foam::ggiEnthalpyJumpFvPatchField<Foam::scalar>::updateCoeffs()
{
if (updated())
{
return;
}
// Get access to relative and rotational velocity
const word UrelName("Urel");
const word UName("U");
if
(
!this->db().objectRegistry::found(UrelName)
|| !this->db().objectRegistry::found(UName)
)
{
// Velocities not available, do not update
InfoIn
(
"void gradientEnthalpyFvPatchScalarField::"
"updateCoeffs(const vectorField& Up)"
) << "Velocity fields " << UrelName << " or "
<< UName << " not found. "
<< "Performing enthalpy value update" << endl;
jump_ = 0;
}
else
{
const fvPatchVectorField& Urelp =
lookupPatchField<volVectorField, vector>(UrelName);
const fvPatchVectorField& Up =
lookupPatchField<volVectorField, vector>(UName);
if (rotating_)
{
jump_ =
mag(Up.patchInternalField())*mag(Urelp.patchInternalField())
- magSqr(Up.patchInternalField());
}
else
{
jump_ =
mag(Up.patchNeighbourField())*mag(Urelp.patchNeighbourField())
- magSqr(Up.patchNeighbourField());
}
}
jumpGgiFvPatchField<scalar>::updateCoeffs();
}
// ************************************************************************* //

View file

@ -0,0 +1,57 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
\*---------------------------------------------------------------------------*/
#ifndef ggiEnthalpyJumpFvPatchFields_H
#define ggiEnthalpyJumpFvPatchFields_H
#include "ggiEnthalpyJumpFvPatchField.H"
#include "fieldTypes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeFieldTypedefs(ggiEnthalpyJump)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,59 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
\*---------------------------------------------------------------------------*/
#ifndef ggiEnthalpyJumpFvPatchFieldsFwd_H
#define ggiEnthalpyJumpFvPatchFieldsFwd_H
#include "fvPatchField.H"
#include "fieldTypes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
template<class Type> class ggiEnthalpyJumpFvPatchField;
makePatchTypeFieldTypedefs(ggiEnthalpyJump)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,161 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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 "mixingPlaneEnthalpyJumpFvPatchField.H"
#include "IOmanip.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class Type>
mixingPlaneEnthalpyJumpFvPatchField<Type>::mixingPlaneEnthalpyJumpFvPatchField
(
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF
)
:
jumpMixingPlaneFvPatchField<Type>(p, iF),
rotating_(false),
jump_(this->size(), pTraits<Type>::zero)
{}
template<class Type>
mixingPlaneEnthalpyJumpFvPatchField<Type>::mixingPlaneEnthalpyJumpFvPatchField
(
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF,
const dictionary& dict
)
:
jumpMixingPlaneFvPatchField<Type>(p, iF),
rotating_(dict.lookup("rotating")),
jump_(this->size(), pTraits<Type>::zero)
{
if (dict.found("value"))
{
fvPatchField<Type>::operator=
(
Field<Type>("value", dict, p.size())
);
}
else
{
this->evaluate(Pstream::blocking);
}
}
template<class Type>
mixingPlaneEnthalpyJumpFvPatchField<Type>::mixingPlaneEnthalpyJumpFvPatchField
(
const mixingPlaneEnthalpyJumpFvPatchField<Type>& ptf,
const fvPatch& p,
const DimensionedField<Type, volMesh>& iF,
const fvPatchFieldMapper& mapper
)
:
jumpMixingPlaneFvPatchField<Type>(ptf, p, iF, mapper),
rotating_(ptf.rotating_),
jump_(ptf.jump_, mapper)
{}
template<class Type>
mixingPlaneEnthalpyJumpFvPatchField<Type>::mixingPlaneEnthalpyJumpFvPatchField
(
const mixingPlaneEnthalpyJumpFvPatchField<Type>& ptf,
const DimensionedField<Type, volMesh>& iF
)
:
jumpMixingPlaneFvPatchField<Type>(ptf, iF),
rotating_(ptf.rotating_),
jump_(ptf.jump_)
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type>
void mixingPlaneEnthalpyJumpFvPatchField<Type>::autoMap
(
const fvPatchFieldMapper& m
)
{
jumpMixingPlaneFvPatchField<Type>::autoMap(m);
jump_.autoMap(m);
}
template<class Type>
void mixingPlaneEnthalpyJumpFvPatchField<Type>::rmap
(
const fvPatchField<Type>& ptf,
const labelList& addr
)
{
jumpMixingPlaneFvPatchField<Type>::rmap(ptf, addr);
// rmap jump
const mixingPlaneEnthalpyJumpFvPatchField<Type>& ejPtf =
refCast<const mixingPlaneEnthalpyJumpFvPatchField<Type> >(ptf);
jump_.rmap(ejPtf.jump_, addr);
}
template<class Type>
void mixingPlaneEnthalpyJumpFvPatchField<Type>::write(Ostream& os) const
{
fvPatchField<Type>::write(os);
os.writeKeyword("patchType")
<< mixingPlaneFvPatch::typeName << token::END_STATEMENT << nl;
os.writeKeyword("rotating")
<< rotating_ << token::END_STATEMENT << nl;
IOstream::streamFormat fmt0 = os.format(IOstream::ASCII);
os.format(fmt0);
this->writeEntry("value", os);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View file

@ -0,0 +1,195 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
Foam::mixingPlaneEnthalpyJumpFvPatchField
Description
Foam::mixingPlaneEnthalpyJumpFvPatchField
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
mixingPlaneEnthalpyJumpFvPatchField.C
\*---------------------------------------------------------------------------*/
#ifndef mixingPlaneEnthalpyJumpFvPatchField_H
#define mixingPlaneEnthalpyJumpFvPatchField_H
#include "jumpMixingPlaneFvPatchField.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class mixingPlaneEnthalpyJumpFvPatchField Declaration
\*---------------------------------------------------------------------------*/
template<class Type>
class mixingPlaneEnthalpyJumpFvPatchField
:
public jumpMixingPlaneFvPatchField<Type>
{
// Private data
//- Is the patch on the rotating side?
Switch rotating_;
//- "jump" field
Field<Type> jump_;
public:
//- Runtime type information
TypeName("mixingPlaneEnthalpyJump");
// Constructors
//- Construct from patch and internal field
mixingPlaneEnthalpyJumpFvPatchField
(
const fvPatch&,
const DimensionedField<Type, volMesh>&
);
//- Construct from patch, internal field and dictionary
mixingPlaneEnthalpyJumpFvPatchField
(
const fvPatch&,
const DimensionedField<Type, volMesh>&,
const dictionary&
);
//- Construct by mapping given mixingPlaneEnthalpyJumpFvPatchField
// onto a new patch
mixingPlaneEnthalpyJumpFvPatchField
(
const mixingPlaneEnthalpyJumpFvPatchField<Type>&,
const fvPatch&,
const DimensionedField<Type, volMesh>&,
const fvPatchFieldMapper&
);
//- Construct as copy setting internal field reference
mixingPlaneEnthalpyJumpFvPatchField
(
const mixingPlaneEnthalpyJumpFvPatchField<Type>&,
const DimensionedField<Type, volMesh>&
);
//- Construct and return a clone
virtual tmp<fvPatchField<Type> > clone() const
{
return tmp<fvPatchField<Type> >
(
new mixingPlaneEnthalpyJumpFvPatchField<Type>(*this)
);
}
//- Construct and return a clone setting internal field reference
virtual tmp<fvPatchField<Type> > clone
(
const DimensionedField<Type, volMesh>& iF
) const
{
return tmp<fvPatchField<Type> >
(
new mixingPlaneEnthalpyJumpFvPatchField<Type>(*this, iF)
);
}
// Member functions
// Access
//- Is the patch rotating
bool rotating() const
{
return rotating_;
}
//- Return the "jump" across the patch as a "half" field
virtual tmp<Field<Type> > jump() const
{
return jump_;
}
// Mapping functions
//- Map (and resize as needed) from self given a mapping object
virtual void autoMap
(
const fvPatchFieldMapper&
);
//- Reverse map the given fvPatchField onto this fvPatchField
virtual void rmap
(
const fvPatchField<Type>&,
const labelList&
);
// Evaluation functions
//- Update the coefficients associated with the patch field
virtual void updateCoeffs();
//- Write
virtual void write(Ostream&) const;
};
//- Specialisation of the jump-condition for the enthalpy
template<>
void mixingPlaneEnthalpyJumpFvPatchField<scalar>::updateCoeffs();
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
# include "mixingPlaneEnthalpyJumpFvPatchField.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,107 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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 "mixingPlaneEnthalpyJumpFvPatchFields.H"
#include "addToRunTimeSelectionTable.H"
#include "volFields.H"
#include "surfaceFields.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
makeTemplatePatchTypeField
(
fvPatchScalarField,
mixingPlaneEnthalpyJumpFvPatchScalarField
);
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<>
void Foam::mixingPlaneEnthalpyJumpFvPatchField<Foam::scalar>::updateCoeffs()
{
if (updated())
{
return;
}
// Get access to relative and rotational velocity
const word UrelName("Urel");
const word UName("U");
if
(
!this->db().objectRegistry::found(UrelName)
|| !this->db().objectRegistry::found(UName)
)
{
// Velocities not available, do not update
InfoIn
(
"void gradientEnthalpyFvPatchScalarField::"
"updateCoeffs(const vectorField& Up)"
) << "Velocity fields " << UrelName << " or "
<< UName << " not found. "
<< "Performing enthalpy value update" << endl;
jump_ = 0;
}
else
{
const fvPatchVectorField& Urelp =
lookupPatchField<volVectorField, vector>(UrelName);
const fvPatchVectorField& Up =
lookupPatchField<volVectorField, vector>(UName);
if (rotating_)
{
jump_ =
mag(Up.patchInternalField())*mag(Urelp.patchInternalField())
- magSqr(Up.patchInternalField());
}
else
{
jump_ =
mag(Up.patchNeighbourField())*mag(Urelp.patchNeighbourField())
- magSqr(Up.patchNeighbourField());
}
}
jumpMixingPlaneFvPatchField<scalar>::updateCoeffs();
}
// ************************************************************************* //

View file

@ -0,0 +1,57 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
\*---------------------------------------------------------------------------*/
#ifndef mixingPlaneEnthalpyJumpFvPatchFields_H
#define mixingPlaneEnthalpyJumpFvPatchFields_H
#include "mixingPlaneEnthalpyJumpFvPatchField.H"
#include "fieldTypes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeFieldTypedefs(mixingPlaneEnthalpyJump)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,59 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 3.2
\\ / 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
\*---------------------------------------------------------------------------*/
#ifndef mixingPlaneEnthalpyJumpFvPatchFieldsFwd_H
#define mixingPlaneEnthalpyJumpFvPatchFieldsFwd_H
#include "fvPatchField.H"
#include "fieldTypes.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
template<class Type> class mixingPlaneEnthalpyJumpFvPatchField;
makePatchTypeFieldTypedefs(mixingPlaneEnthalpyJump)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //