mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Adds overset discretisation to selected physics: - diffusion : overLaplacianDyMFoam - incompressible steady : overSimpleFoam - incompressible transient : overPimpleDyMFoam - compressible transient: overRhoPimpleDyMFoam - two-phase VOF: overInterDyMFoam The overset method chosen is a parallel, fully implicit implementation whereby the interpolation (from donor to acceptor) is inserted as an adapted discretisation on the donor cells, such that the resulting matrix can be solved using the standard linear solvers. Above solvers come with a set of tutorials, showing how to create and set-up simple simulations from scratch.
248 lines
6.8 KiB
C++
248 lines
6.8 KiB
C++
/*---------------------------------------------------------------------------*\
|
|
========= |
|
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
\\ / O peration |
|
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
|
\\/ M anipulation |
|
|
-------------------------------------------------------------------------------
|
|
License
|
|
This file is part of OpenFOAM.
|
|
|
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
|
under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
Class
|
|
Foam::cyclicFvPatchField
|
|
|
|
Group
|
|
grpCoupledBoundaryConditions
|
|
|
|
Description
|
|
This boundary condition enforces a cyclic condition between a pair of
|
|
boundaries.
|
|
|
|
Usage
|
|
Example of the boundary condition specification:
|
|
\verbatim
|
|
<patchName>
|
|
{
|
|
type cyclic;
|
|
}
|
|
\endverbatim
|
|
|
|
Note
|
|
The patches must be topologically similar, i.e. if the owner patch is
|
|
transformed to the neighbour patch, the patches should be identical (or
|
|
very similar).
|
|
|
|
SourceFiles
|
|
cyclicFvPatchField.C
|
|
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef cyclicFvPatchField_H
|
|
#define cyclicFvPatchField_H
|
|
|
|
#include "coupledFvPatchField.H"
|
|
#include "cyclicLduInterfaceField.H"
|
|
#include "cyclicFvPatch.H"
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
namespace Foam
|
|
{
|
|
|
|
/*---------------------------------------------------------------------------*\
|
|
Class cyclicFvPatch Declaration
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
template<class Type>
|
|
class cyclicFvPatchField
|
|
:
|
|
virtual public cyclicLduInterfaceField,
|
|
public coupledFvPatchField<Type>
|
|
{
|
|
// Private data
|
|
|
|
//- Local reference cast into the cyclic patch
|
|
const cyclicFvPatch& cyclicPatch_;
|
|
|
|
|
|
// Private Member Functions
|
|
|
|
//- Return neighbour side field given internal fields
|
|
template<class Type2>
|
|
tmp<Field<Type2>> neighbourSideField
|
|
(
|
|
const Field<Type2>&
|
|
) const;
|
|
|
|
|
|
public:
|
|
|
|
//- Runtime type information
|
|
TypeName(cyclicFvPatch::typeName_());
|
|
|
|
|
|
// Constructors
|
|
|
|
//- Construct from patch and internal field
|
|
cyclicFvPatchField
|
|
(
|
|
const fvPatch&,
|
|
const DimensionedField<Type, volMesh>&
|
|
);
|
|
|
|
//- Construct from patch, internal field and dictionary
|
|
cyclicFvPatchField
|
|
(
|
|
const fvPatch&,
|
|
const DimensionedField<Type, volMesh>&,
|
|
const dictionary&
|
|
);
|
|
|
|
//- Construct by mapping given cyclicFvPatchField onto a new patch
|
|
cyclicFvPatchField
|
|
(
|
|
const cyclicFvPatchField<Type>&,
|
|
const fvPatch&,
|
|
const DimensionedField<Type, volMesh>&,
|
|
const fvPatchFieldMapper&
|
|
);
|
|
|
|
//- Construct as copy
|
|
cyclicFvPatchField
|
|
(
|
|
const cyclicFvPatchField<Type>&
|
|
);
|
|
|
|
//- Construct and return a clone
|
|
virtual tmp<fvPatchField<Type>> clone() const
|
|
{
|
|
return tmp<fvPatchField<Type>>
|
|
(
|
|
new cyclicFvPatchField<Type>(*this)
|
|
);
|
|
}
|
|
|
|
//- Construct as copy setting internal field reference
|
|
cyclicFvPatchField
|
|
(
|
|
const cyclicFvPatchField<Type>&,
|
|
const DimensionedField<Type, volMesh>&
|
|
);
|
|
|
|
//- 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 cyclicFvPatchField<Type>(*this, iF)
|
|
);
|
|
}
|
|
|
|
|
|
// Member functions
|
|
|
|
// Access
|
|
|
|
//- Return local reference cast into the cyclic patch
|
|
const cyclicFvPatch& cyclicPatch() const
|
|
{
|
|
return cyclicPatch_;
|
|
}
|
|
|
|
|
|
// Evaluation functions
|
|
|
|
//- Return neighbour coupled internal cell data
|
|
tmp<Field<Type>> patchNeighbourField() const;
|
|
|
|
//- Return reference to neighbour patchField
|
|
const cyclicFvPatchField<Type>& neighbourPatchField() const;
|
|
|
|
//- Update result field based on interface functionality
|
|
virtual void updateInterfaceMatrix
|
|
(
|
|
scalarField& result,
|
|
const bool add,
|
|
const scalarField& psiInternal,
|
|
const scalarField& coeffs,
|
|
const direction cmpt,
|
|
const Pstream::commsTypes commsType
|
|
) const;
|
|
|
|
//- Update result field based on interface functionality
|
|
virtual void updateInterfaceMatrix
|
|
(
|
|
Field<Type>& result,
|
|
const bool add,
|
|
const Field<Type>& psiInternal,
|
|
const scalarField& coeffs,
|
|
const Pstream::commsTypes commsType
|
|
) const;
|
|
|
|
|
|
// Cyclic coupled interface functions
|
|
|
|
//- Does the patch field perform the transformation
|
|
virtual bool doTransform() const
|
|
{
|
|
return !(cyclicPatch_.parallel() || pTraits<Type>::rank == 0);
|
|
}
|
|
|
|
//- Return face transformation tensor
|
|
virtual const tensorField& forwardT() const
|
|
{
|
|
return cyclicPatch_.forwardT();
|
|
}
|
|
|
|
//- Return neighbour-cell transformation tensor
|
|
virtual const tensorField& reverseT() const
|
|
{
|
|
return cyclicPatch_.reverseT();
|
|
}
|
|
|
|
//- Return rank of component for transform
|
|
virtual int rank() const
|
|
{
|
|
return pTraits<Type>::rank;
|
|
}
|
|
|
|
|
|
// I-O
|
|
|
|
//- Write
|
|
virtual void write(Ostream& os) const;
|
|
};
|
|
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
} // End namespace Foam
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
#ifdef NoRepository
|
|
#include "cyclicFvPatchField.C"
|
|
#endif
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
#endif
|
|
|
|
// ************************************************************************* //
|