extrudeToRegionMesh: Rationalisation

An extruded region is now contiguous even when specified with multiple
face zones. Edges that border faces in different zones now extrude into
internal faces, rather than a pair of boundary faces. Different zones
now result only in different mapped patches in the extruded and primary
meshes. This means a mesh can be created for a single contiguous
extruded region spanning multiple patches. This might be necessary if,
for example, a film region is needed across multiple walls with
differing thermal boundary conditions.

Disconnected extruded regions can still be constructed by running the
extrudeToRegionMesh utility muiliple times.

The mapped patches created to couple the extruded regions now have
symmetric names similar to those created by splitMeshRegions. For
example, if the mapped patch in the primary region is called
"region0_to_extrudedRegion_f0", then the corresponding patch in the
extruded region is called "extrudedRegion_to_region0_f0" (f0, in this
example is the face zone from which the region was extruded).

Offsetting of the top patch is now handled automatically by a new
mappedExtrudedWallPolyPatch. This refers to the bottom patch and
automatically calculates the sampling offsets by doing a wave across the
extruded mesh layers. This prevents the need to store the offsets in the
patch itself, and makes it possible for the patch to undergo mesh
changes without adding additional functions to the polyPatch (mapping
constructors, autoMap and rmap methods, etc ...).
This commit is contained in:
Will Bainbridge
2022-08-25 11:37:42 +01:00
parent 63892b01f4
commit 381e0921f8
130 changed files with 1803 additions and 1779 deletions

View File

@ -13,66 +13,36 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Name of region to create // Name of the region to create
region liquidFilm; region liquidFilm;
// Specification of faces to extrude. Either faceZones (either exclusively // Specification of faces to extrude. Either faceZones (either exclusively
// internal faces or boundary faces) or faceSets (boundary faces only). // internal faces or boundary faces) or faceSets (boundary faces only). These
// faces will be connected to the bottom patch of the extruded region. If
// shadow faces are also specified then these will be connected to the top
// patch of the extruded region.
// FaceZones to extrude // The faceZones to extrude
faceZones (f0 f1); faceZones (f0 f1);
// faceZonesShadow (f0Shadow f1Shadow); // faceZonesShadow (f0Shadow f1Shadow);
// faceSets to extrude // The faceSets to extrude
// faceSets (f0 f1); // faceSets (f0 f1);
// faceSetsShadow (f0Shadow f1Shadow); // faceSetsShadow (f0Shadow f1Shadow);
// Adapt the original mesh to have mapped patches at where the // Adapt the original mesh to have mapped patches that connect to the extruded
// faceZones are? // region? If so, then extruded internal faces become baffles with mapped
// If true: // patches, and extruded boundary faces are repatched onto mapped patches.
// - extruding internal faces: become baffles on mapped patches // Otherwise the original mesh is not modified. The extruded mesh will still
// - extruding boundary faces: repatched to be on mapped patches // have mapped patches created which will need to be changed.
// If false: leave original mesh intact. Extruded mesh will still have
// mapped patch which might need to be adapted.
adaptMesh true; adaptMesh true;
// Sample mode for inter-region communication //- Extrusion settings
sampleMode nearestPatchFace;
// 1 D extrusion
// ~~~~~~~~~~~~~
// Extrude 1D-columns of cells? This by default duplicates points so can
// have overlapping columns (i.e. non space filling)
oneD false;
//- If oneD: specify which boundary is wanted between the layers
// oneDPolyPatchType empty; // wedge
//- If oneD: specify whether to duplicate points (i.e. disconnect 1D
// columns) or only on non-manifold extrusion areas. Default is false.
// nonManifold true;
//- Extrusion model to use. The only logical choice is linearNormal?
//- Linear extrusion in normal direction
extrudeModel linearNormal; extrudeModel linearNormal;
//- Linear extrusion in specified direction
// extrudeModel linearDirection; // extrudeModel linearDirection;
//- Wedge extrusion. If nLayers is 1 assumes symmetry around plane.
// extrudeModel wedge; // extrudeModel wedge;
//- Extrudes into sphere around (0 0 0)
// extrudeModel linearRadial; // extrudeModel linearRadial;
//- Extrudes into sphere around (0 0 0) with specified radii
// extrudeModel radial; // extrudeModel radial;
//- Extrudes into sphere with grading according to pressure (atmospherics)
// extrudeModel sigmaRadial; // extrudeModel sigmaRadial;
nLayers 10; nLayers 10;
@ -84,6 +54,12 @@ linearNormalCoeffs
thickness 0.05; thickness 0.05;
} }
linearDirectionCoeffs
{
direction (0 1 0);
thickness 0.05;
}
wedgeCoeffs wedgeCoeffs
{ {
axisPt (0 0.1 -0.05); axisPt (0 0.1 -0.05);
@ -91,12 +67,6 @@ wedgeCoeffs
angle 360; // For nLayers=1 assume symmetry so angle/2 on each side angle 360; // For nLayers=1 assume symmetry so angle/2 on each side
} }
linearDirectionCoeffs
{
direction (0 1 0);
thickness 0.05;
}
linearRadialCoeffs linearRadialCoeffs
{ {
R 0.1; R 0.1;

View File

@ -39,6 +39,7 @@ derivedFvPatches = $(fvPatches)/derived
$(derivedFvPatches)/wall/wallFvPatch.C $(derivedFvPatches)/wall/wallFvPatch.C
$(derivedFvPatches)/mapped/mappedFvPatch.C $(derivedFvPatches)/mapped/mappedFvPatch.C
$(derivedFvPatches)/mapped/mappedWallFvPatch.C $(derivedFvPatches)/mapped/mappedWallFvPatch.C
$(derivedFvPatches)/mapped/mappedExtrudedWallFvPatch.C
meshWave = algorithms/FvFaceCellWave meshWave = algorithms/FvFaceCellWave

View File

@ -0,0 +1,37 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 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/>.
\*---------------------------------------------------------------------------*/
#include "mappedExtrudedWallFvPatch.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
defineTypeNameAndDebug(mappedExtrudedWallFvPatch, 0);
addToRunTimeSelectionTable(fvPatch, mappedExtrudedWallFvPatch, polyPatch);
}
// ************************************************************************* //

View File

@ -0,0 +1,80 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 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::mappedExtrudedWallFvPatch
SourceFiles
mappedExtrudedWallFvPatch.C
\*---------------------------------------------------------------------------*/
#ifndef mappedExtrudedWallFvPatch_H
#define mappedExtrudedWallFvPatch_H
#include "wallFvPatch.H"
#include "mappedExtrudedWallPolyPatch.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class mappedExtrudedWallFvPatch Declaration
\*---------------------------------------------------------------------------*/
class mappedExtrudedWallFvPatch
:
public wallFvPatch
{
public:
//- Runtime type information
TypeName(mappedExtrudedWallPolyPatch::typeName_());
// Constructors
//- Construct from components
mappedExtrudedWallFvPatch
(
const polyPatch& patch,
const fvBoundaryMesh& bm
)
:
wallFvPatch(patch, bm)
{}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -250,9 +250,11 @@ patchToPatch/rays/raysPatchToPatch.C
mappedPatches/mappedPolyPatch/mappedPatchBase.C mappedPatches/mappedPolyPatch/mappedPatchBase.C
mappedPatches/mappedPolyPatch/mappedPolyPatch.C mappedPatches/mappedPolyPatch/mappedPolyPatch.C
mappedPatches/mappedPolyPatch/mappedWallPolyPatch.C mappedPatches/mappedPolyPatch/mappedWallPolyPatch.C
mappedPatches/mappedPolyPatch/mappedExtrudedWallPolyPatch.C
mappedPatches/mappedPointPatch/mappedPointPatch.C mappedPatches/mappedPointPatch/mappedPointPatch.C
mappedPatches/mappedPointPatch/mappedWallPointPatch.C mappedPatches/mappedPointPatch/mappedWallPointPatch.C
mappedPatches/mappedPointPatch/mappedExtrudedWallPointPatch.C
meshStructure/meshStructure.C meshStructure/meshStructure.C
meshStructure/topoDistanceData.C meshStructure/topoDistanceData.C

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -22,22 +22,21 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class Class
Foam::DeltaInfoData Foam::LayerInfoData
Description Description
Class to be used with FaceCellWave which calculates the delta (thickness) Class to be used with FaceCellWave which enumerates layers of cells and
across a layered mesh transports data through those layers
SourceFiles SourceFiles
DeltaInfoDataI.H LayerInfoDataI.H
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef DeltaInfoData_H #ifndef LayerInfoData_H
#define DeltaInfoData_H #define LayerInfoData_H
#include "pointField.H" #include "layerInfo.H"
#include "face.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -51,29 +50,23 @@ class transformer;
// Forward declaration of friend functions and operators // Forward declaration of friend functions and operators
template<class Type> template<class Type>
class DeltaInfoData; class LayerInfoData;
template<class Type> template<class Type>
Ostream& operator<<(Ostream&, const DeltaInfoData<Type>&); Ostream& operator<<(Ostream&, const LayerInfoData<Type>&);
template<class Type> template<class Type>
Istream& operator>>(Istream&, DeltaInfoData<Type>&); Istream& operator>>(Istream&, LayerInfoData<Type>&);
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class DeltaInfoData Declaration Class LayerInfoData Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
template<class Type> template<class Type>
class DeltaInfoData class LayerInfoData
:
public layerInfo
{ {
// Private Data // Private Data
//- Direction of propagation (+1 or -1) relative to the face normal.
// Only valid when on a face. Takes a value of 0 when in a cell.
label direction_;
//- The previous face index. Only valid when in a cell. Takes a value
// of -1 if on a face.
label prevFace_;
//- Data //- Data
Type data_; Type data_;
@ -83,10 +76,15 @@ public:
// Constructors // Constructors
//- Construct null //- Construct null
inline DeltaInfoData(); inline LayerInfoData();
//- Construct for a face given a direction and data //- Construct given the face layer index and direction
inline DeltaInfoData(const label direction, const Type& data); inline LayerInfoData
(
const label faceLayer,
const label direction,
const Type& data
);
// Member Functions // Member Functions
@ -99,22 +97,6 @@ public:
// Needed by FaceCellWave // Needed by FaceCellWave
//- Check whether the DeltaInfoData has been changed at all or still
// contains original (invalid) value.
template<class TrackingData>
inline bool valid(TrackingData& td) const;
//- Check for identical geometrical data. Used for checking
// consistency across cyclics.
template<class TrackingData>
inline bool sameGeometry
(
const polyMesh&,
const DeltaInfoData<Type>&,
const scalar,
TrackingData& td
) const;
//- Transform across an interface //- Transform across an interface
template<class TrackingData> template<class TrackingData>
inline void transform inline void transform
@ -131,8 +113,8 @@ public:
( (
const polyMesh&, const polyMesh&,
const label thisCelli, const label thisCelli,
const label neighbourFacei, const label nbrFacei,
const DeltaInfoData<Type>& neighbourInfo, const LayerInfoData<Type>& nbrInfo,
const scalar tol, const scalar tol,
TrackingData& td TrackingData& td
); );
@ -143,8 +125,8 @@ public:
( (
const polyMesh&, const polyMesh&,
const label thisFacei, const label thisFacei,
const label neighbourCelli, const label nbrCelli,
const DeltaInfoData<Type>& neighbourInfo, const LayerInfoData<Type>& nbrInfo,
const scalar tol, const scalar tol,
TrackingData& td TrackingData& td
); );
@ -155,7 +137,7 @@ public:
( (
const polyMesh&, const polyMesh&,
const label thisFacei, const label thisFacei,
const DeltaInfoData<Type>& neighbourInfo, const LayerInfoData<Type>& nbrInfo,
const scalar tol, const scalar tol,
TrackingData& td TrackingData& td
); );
@ -164,15 +146,15 @@ public:
template<class TrackingData> template<class TrackingData>
inline bool equal inline bool equal
( (
const DeltaInfoData<Type>&, const LayerInfoData<Type>&,
TrackingData& td TrackingData& td
) const; ) const;
// Member Operators // Member Operators
inline bool operator==(const DeltaInfoData<Type>&) const; inline bool operator==(const LayerInfoData<Type>&) const;
inline bool operator!=(const DeltaInfoData<Type>&) const; inline bool operator!=(const LayerInfoData<Type>&) const;
// IOstream Operators // IOstream Operators
@ -180,12 +162,12 @@ public:
friend Ostream& operator<< <Type> friend Ostream& operator<< <Type>
( (
Ostream&, Ostream&,
const DeltaInfoData<Type>& const LayerInfoData<Type>&
); );
friend Istream& operator>> <Type> friend Istream& operator>> <Type>
( (
Istream&, Istream&,
DeltaInfoData<Type>& LayerInfoData<Type>&
); );
}; };
@ -195,7 +177,7 @@ public:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "DeltaInfoDataI.H" #include "LayerInfoDataI.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -23,29 +23,28 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "DeltaInfoData.H" #include "LayerInfoData.H"
#include "polyMesh.H" #include "polyMesh.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class Type> template<class Type>
inline Foam::DeltaInfoData<Type>::DeltaInfoData() inline Foam::LayerInfoData<Type>::LayerInfoData()
: :
direction_(0), layerInfo(),
prevFace_(-labelMax),
data_() data_()
{} {}
template<class Type> template<class Type>
inline Foam::DeltaInfoData<Type>::DeltaInfoData inline Foam::LayerInfoData<Type>::LayerInfoData
( (
const label faceLayer,
const label direction, const label direction,
const Type& data const Type& data
) )
: :
direction_(direction), layerInfo(faceLayer, direction),
prevFace_(-labelMax),
data_(data) data_(data)
{} {}
@ -53,7 +52,7 @@ inline Foam::DeltaInfoData<Type>::DeltaInfoData
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type> template<class Type>
inline const Type& Foam::DeltaInfoData<Type>::data() const inline const Type& Foam::LayerInfoData<Type>::data() const
{ {
return data_; return data_;
} }
@ -61,58 +60,33 @@ inline const Type& Foam::DeltaInfoData<Type>::data() const
template<class Type> template<class Type>
template<class TrackingData> template<class TrackingData>
inline bool Foam::DeltaInfoData<Type>::valid(TrackingData& td) const inline void Foam::LayerInfoData<Type>::transform
{
return direction_ != 0 || prevFace_ != -labelMax;
}
template<class Type>
template<class TrackingData>
inline bool Foam::DeltaInfoData<Type>::sameGeometry
(
const polyMesh&,
const DeltaInfoData<Type>& l,
const scalar tol,
TrackingData& td
) const
{
return true;
}
template<class Type>
template<class TrackingData>
inline void Foam::DeltaInfoData<Type>::transform
( (
const polyPatch& patch, const polyPatch& patch,
const label patchFacei, const label patchFacei,
const transformer& transform, const transformer& transform,
TrackingData& td TrackingData& td
) )
{} {
data_ = transform.transform(data_);
}
template<class Type> template<class Type>
template<class TrackingData> template<class TrackingData>
inline bool Foam::DeltaInfoData<Type>::updateCell inline bool Foam::LayerInfoData<Type>::updateCell
( (
const polyMesh& mesh, const polyMesh& mesh,
const label thisCelli, const label thisCelli,
const label neighbourFacei, const label nbrFacei,
const DeltaInfoData<Type>& neighbourDeltaInfo, const LayerInfoData<Type>& nbrInfo,
const scalar tol, const scalar tol,
TrackingData& td TrackingData& td
) )
{ {
const bool o = thisCelli == mesh.faceOwner()[neighbourFacei]; if (layerInfo::updateCell(mesh, thisCelli, nbrFacei, nbrInfo, tol, td))
if (o == (neighbourDeltaInfo.direction_ < 0))
{ {
direction_ = 0; data_ = nbrInfo.data_;
prevFace_ = neighbourFacei;
data_ = neighbourDeltaInfo.data_;
return true; return true;
} }
else else
@ -124,29 +98,19 @@ inline bool Foam::DeltaInfoData<Type>::updateCell
template<class Type> template<class Type>
template<class TrackingData> template<class TrackingData>
inline bool Foam::DeltaInfoData<Type>::updateFace inline bool Foam::LayerInfoData<Type>::updateFace
( (
const polyMesh& mesh, const polyMesh& mesh,
const label thisFacei, const label thisFacei,
const label neighbourCelli, const label nbrCelli,
const DeltaInfoData<Type>& neighbourDeltaInfo, const LayerInfoData<Type>& nbrInfo,
const scalar tol, const scalar tol,
TrackingData& td TrackingData& td
) )
{ {
const cell& c = mesh.cells()[neighbourCelli]; if (layerInfo::updateFace(mesh, thisFacei, nbrCelli, nbrInfo, tol, td))
const label prevFacei = neighbourDeltaInfo.prevFace_;
const label nextFacei = c.opposingFaceLabel(prevFacei, mesh.faces());
if (nextFacei == thisFacei)
{ {
const label direction = data_ = nbrInfo.data_;
mesh.faceOwner()[thisFacei] == neighbourCelli ? +1 : -1;
direction_ = direction;
prevFace_ = -labelMax;
data_ = neighbourDeltaInfo.data_;
return true; return true;
} }
else else
@ -158,30 +122,32 @@ inline bool Foam::DeltaInfoData<Type>::updateFace
template<class Type> template<class Type>
template<class TrackingData> template<class TrackingData>
inline bool Foam::DeltaInfoData<Type>::updateFace inline bool Foam::LayerInfoData<Type>::updateFace
( (
const polyMesh& mesh, const polyMesh& mesh,
const label thisFacei, const label thisFacei,
const DeltaInfoData<Type>& neighbourDeltaInfo, const LayerInfoData<Type>& nbrInfo,
const scalar tol, const scalar tol,
TrackingData& td TrackingData& td
) )
{ {
const label direction = -neighbourDeltaInfo.direction_; if (layerInfo::updateFace(mesh, thisFacei, nbrInfo, tol, td))
{
direction_ = direction; data_ = nbrInfo.data_;
prevFace_ = -labelMax;
data_ = neighbourDeltaInfo.data_;
return true; return true;
} }
else
{
return false;
}
}
template<class Type> template<class Type>
template<class TrackingData> template<class TrackingData>
inline bool Foam::DeltaInfoData<Type>::equal inline bool Foam::LayerInfoData<Type>::equal
( (
const DeltaInfoData<Type>& rhs, const LayerInfoData<Type>& rhs,
TrackingData& td TrackingData& td
) const ) const
{ {
@ -192,19 +158,19 @@ inline bool Foam::DeltaInfoData<Type>::equal
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
template<class Type> template<class Type>
inline bool Foam::DeltaInfoData<Type>::operator== inline bool Foam::LayerInfoData<Type>::operator==
( (
const Foam::DeltaInfoData<Type>& rhs const Foam::LayerInfoData<Type>& rhs
) const ) const
{ {
return direction_ == rhs.direction_ && prevFace_ == rhs.prevFace_; return layerInfo::operator==(rhs) && data_ == rhs.data_;
} }
template<class Type> template<class Type>
inline bool Foam::DeltaInfoData<Type>::operator!= inline bool Foam::LayerInfoData<Type>::operator!=
( (
const Foam::DeltaInfoData<Type>& rhs const Foam::LayerInfoData<Type>& rhs
) const ) const
{ {
return !(*this == rhs); return !(*this == rhs);
@ -214,19 +180,16 @@ inline bool Foam::DeltaInfoData<Type>::operator!=
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
template<class Type> template<class Type>
Foam::Ostream& Foam::operator<<(Ostream& os, const DeltaInfoData<Type>& l) Foam::Ostream& Foam::operator<<(Ostream& os, const LayerInfoData<Type>& l)
{ {
return os return os << static_cast<const layerInfo&>(l) << token::SPACE << l.data_;
<< l.direction_ << token::SPACE
<< l.prevFace_ << token::SPACE
<< l.data_;
} }
template<class Type> template<class Type>
Foam::Istream& Foam::operator>>(Istream& is, DeltaInfoData<Type>& l) Foam::Istream& Foam::operator>>(Istream& is, LayerInfoData<Type>& l)
{ {
return is >> l.direction_ >> l.prevFace_ >> l.data_; return is >> static_cast<layerInfo&>(l) >> l.data_;
} }

View File

@ -135,8 +135,8 @@ public:
( (
const polyMesh&, const polyMesh&,
const label thisCelli, const label thisCelli,
const label neighbourFacei, const label nbrFacei,
const layerInfo& neighbourInfo, const layerInfo& nbrInfo,
const scalar tol, const scalar tol,
TrackingData& td TrackingData& td
); );
@ -147,8 +147,8 @@ public:
( (
const polyMesh&, const polyMesh&,
const label thisFacei, const label thisFacei,
const label neighbourCelli, const label nbrCelli,
const layerInfo& neighbourInfo, const layerInfo& nbrInfo,
const scalar tol, const scalar tol,
TrackingData& td TrackingData& td
); );
@ -159,7 +159,7 @@ public:
( (
const polyMesh&, const polyMesh&,
const label thisFacei, const label thisFacei,
const layerInfo& neighbourInfo, const layerInfo& nbrInfo,
const scalar tol, const scalar tol,
TrackingData& td TrackingData& td
); );

View File

@ -100,7 +100,7 @@ inline bool Foam::layerInfo::sameGeometry
TrackingData& td TrackingData& td
) const ) const
{ {
return layer_ == l.layer_; return true;
} }
@ -120,21 +120,21 @@ inline bool Foam::layerInfo::updateCell
( (
const polyMesh& mesh, const polyMesh& mesh,
const label thisCelli, const label thisCelli,
const label neighbourFacei, const label nbrFacei,
const layerInfo& neighbourLayerInfo, const layerInfo& nbrInfo,
const scalar tol, const scalar tol,
TrackingData& td TrackingData& td
) )
{ {
const bool o = thisCelli == mesh.faceOwner()[neighbourFacei]; const bool o = thisCelli == mesh.faceOwner()[nbrFacei];
if (o == (neighbourLayerInfo.direction_ < 0)) if (o == (nbrInfo.direction_ < 0))
{ {
if (valid(td) && prevFace_ != neighbourFacei) collide(); if (valid(td) && prevFace_ != nbrFacei) collide();
layer_ = valid(td) ? -labelMax : neighbourLayerInfo.layer_ + 1; layer_ = valid(td) ? -labelMax : nbrInfo.layer_ + 1;
direction_ = 0; direction_ = 0;
prevFace_ = neighbourFacei; prevFace_ = nbrFacei;
return true; return true;
} }
@ -150,24 +150,24 @@ inline bool Foam::layerInfo::updateFace
( (
const polyMesh& mesh, const polyMesh& mesh,
const label thisFacei, const label thisFacei,
const label neighbourCelli, const label nbrCelli,
const layerInfo& neighbourLayerInfo, const layerInfo& nbrInfo,
const scalar tol, const scalar tol,
TrackingData& td TrackingData& td
) )
{ {
const cell& c = mesh.cells()[neighbourCelli]; const cell& c = mesh.cells()[nbrCelli];
const label prevFacei = neighbourLayerInfo.prevFace_; const label prevFacei = nbrInfo.prevFace_;
const label nextFacei = c.opposingFaceLabel(prevFacei, mesh.faces()); const label nextFacei = c.opposingFaceLabel(prevFacei, mesh.faces());
if (nextFacei == thisFacei) if (nextFacei == thisFacei)
{ {
const label direction = const label direction =
mesh.faceOwner()[thisFacei] == neighbourCelli ? +1 : -1; mesh.faceOwner()[thisFacei] == nbrCelli ? +1 : -1;
if (valid(td) && direction != direction_) collide(); if (valid(td) && direction != direction_) collide();
layer_ = valid(td) ? -labelMax : neighbourLayerInfo.layer_ + 1; layer_ = valid(td) ? -labelMax : nbrInfo.layer_ + 1;
direction_ = direction; direction_ = direction;
prevFace_ = -labelMax; prevFace_ = -labelMax;
@ -185,16 +185,16 @@ inline bool Foam::layerInfo::updateFace
( (
const polyMesh& mesh, const polyMesh& mesh,
const label thisFacei, const label thisFacei,
const layerInfo& neighbourLayerInfo, const layerInfo& nbrInfo,
const scalar tol, const scalar tol,
TrackingData& td TrackingData& td
) )
{ {
const label direction = -neighbourLayerInfo.direction_; const label direction = -nbrInfo.direction_;
if (valid(td) && direction != direction_) collide(); if (valid(td) && direction != direction_) collide();
layer_ = valid(td) ? -labelMax : neighbourLayerInfo.layer_; layer_ = valid(td) ? -labelMax : nbrInfo.layer_;
direction_ = direction; direction_ = direction;
prevFace_ = -labelMax; prevFace_ = -labelMax;

View File

@ -0,0 +1,51 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 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/>.
\*---------------------------------------------------------------------------*/
#include "mappedExtrudedWallPointPatch.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
defineTypeNameAndDebug(mappedExtrudedWallPointPatch, 0);
// Add the patch constructor functions to the hash tables
addToRunTimeSelectionTable
(
facePointPatch,
mappedExtrudedWallPointPatch,
polyPatch
);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,80 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 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::mappedExtrudedWallPointPatch
SourceFiles
mappedExtrudedWallPointPatch.C
\*---------------------------------------------------------------------------*/
#ifndef mappedExtrudedWallPointPatch_H
#define mappedExtrudedWallPointPatch_H
#include "wallPointPatch.H"
#include "mappedExtrudedWallPolyPatch.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class mappedExtrudedWallPointPatch Declaration
\*---------------------------------------------------------------------------*/
class mappedExtrudedWallPointPatch
:
public wallPointPatch
{
public:
//- Runtime type information
TypeName(mappedExtrudedWallPolyPatch::typeName_());
// Constructors
//- Construct from polyPatch
mappedExtrudedWallPointPatch
(
const polyPatch& patch,
const pointBoundaryMesh& bm
)
:
wallPointPatch(patch, bm)
{}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,277 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 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/>.
\*---------------------------------------------------------------------------*/
#include "mappedExtrudedWallPolyPatch.H"
#include "addToRunTimeSelectionTable.H"
#include "LayerInfoData.H"
#include "FaceCellWave.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
defineTypeNameAndDebug(mappedExtrudedWallPolyPatch, 0);
addToRunTimeSelectionTable(polyPatch, mappedExtrudedWallPolyPatch, word);
addToRunTimeSelectionTable
(
polyPatch,
mappedExtrudedWallPolyPatch,
dictionary
);
}
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
void Foam::mappedExtrudedWallPolyPatch::initCalcGeometry(PstreamBuffers& pBufs)
{
mappedWallPolyPatch::initCalcGeometry(pBufs);
}
void Foam::mappedExtrudedWallPolyPatch::calcGeometry(PstreamBuffers& pBufs)
{
mappedWallPolyPatch::calcGeometry(pBufs);
samplePointsPtr_.clear();
}
void Foam::mappedExtrudedWallPolyPatch::initMovePoints
(
PstreamBuffers& pBufs,
const pointField& p
)
{
mappedWallPolyPatch::initMovePoints(pBufs, p);
}
void Foam::mappedExtrudedWallPolyPatch::movePoints
(
PstreamBuffers& pBufs,
const pointField& p
)
{
mappedWallPolyPatch::movePoints(pBufs, p);
samplePointsPtr_.clear();
}
void Foam::mappedExtrudedWallPolyPatch::initTopoChange(PstreamBuffers& pBufs)
{
mappedWallPolyPatch::initTopoChange(pBufs);
}
void Foam::mappedExtrudedWallPolyPatch::topoChange(PstreamBuffers& pBufs)
{
mappedWallPolyPatch::topoChange(pBufs);
samplePointsPtr_.clear();
}
// * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * * * * //
Foam::mappedExtrudedWallPolyPatch::mappedExtrudedWallPolyPatch
(
const word& name,
const label size,
const label start,
const label index,
const polyBoundaryMesh& bm,
const word& patchType
)
:
mappedWallPolyPatch(name, size, start, index, bm, patchType),
bottomPatch_(word::null)
{}
Foam::mappedExtrudedWallPolyPatch::mappedExtrudedWallPolyPatch
(
const word& name,
const dictionary& dict,
const label index,
const polyBoundaryMesh& bm,
const word& patchType
)
:
mappedWallPolyPatch(name, dict, index, bm, patchType),
bottomPatch_(dict.lookupOrDefault<word>("bottomPatch", word::null))
{}
Foam::mappedExtrudedWallPolyPatch::mappedExtrudedWallPolyPatch
(
const mappedExtrudedWallPolyPatch& pp,
const polyBoundaryMesh& bm
)
:
mappedWallPolyPatch(pp, bm),
bottomPatch_(pp.bottomPatch_)
{}
Foam::mappedExtrudedWallPolyPatch::mappedExtrudedWallPolyPatch
(
const mappedExtrudedWallPolyPatch& pp,
const polyBoundaryMesh& bm,
const label index,
const label newSize,
const label newStart
)
:
mappedWallPolyPatch(pp, bm, index, newSize, newStart),
bottomPatch_(pp.bottomPatch_)
{}
Foam::mappedExtrudedWallPolyPatch::mappedExtrudedWallPolyPatch
(
const mappedExtrudedWallPolyPatch& pp,
const polyBoundaryMesh& bm,
const label index,
const labelUList& mapAddressing,
const label newStart
)
:
mappedWallPolyPatch(pp, bm, index, mapAddressing, newStart),
bottomPatch_(pp.bottomPatch_)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::mappedExtrudedWallPolyPatch::~mappedExtrudedWallPolyPatch()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::tmp<Foam::pointField>
Foam::mappedExtrudedWallPolyPatch::samplePoints() const
{
if (!samplePointsPtr_.valid())
{
const bool isExtrudedRegion = bottomPatch_ != word::null;
if (isExtrudedRegion)
{
// If this is the extruded region we need to work out where the
// corresponding sampling points are on the bottom patch. We do
// this by waving the bottom patch points across the layers.
const polyMesh& mesh = boundaryMesh().mesh();
const polyPatch& pp = *this;
const polyPatch& bottomPp = boundaryMesh()[bottomPatch_];
// Get the sample points from the bottom patch
const pointField bottomSamplePoints
(
refCast<const mappedPatchBase>(bottomPp).samplePoints()
);
// Initialise faces on the bottom patch to wave from
labelList initialFaces(bottomPp.size());
List<LayerInfoData<point>> initialFaceInfo(bottomPp.size());
forAll(bottomPp, bottomPpFacei)
{
initialFaces[bottomPpFacei] =
bottomPp.start() + bottomPpFacei;
initialFaceInfo[bottomPpFacei] =
LayerInfoData<point>
(
0,
-1,
bottomSamplePoints[bottomPpFacei]
);
}
// Wave across the mesh layers
List<LayerInfoData<point>> faceInfo(mesh.nFaces());
List<LayerInfoData<point>> cellInfo(mesh.nCells());
FaceCellWave<LayerInfoData<point>>
(
mesh,
initialFaces,
initialFaceInfo,
faceInfo,
cellInfo,
mesh.globalData().nTotalCells() + 1
);
// Unpack into this patch's sample points
samplePointsPtr_.set(new pointField(pp.size()));
forAll(pp, ppFacei)
{
const LayerInfoData<point>& info =
faceInfo[pp.start() + ppFacei];
static nil td;
if (!info.valid(td))
{
FatalErrorInFunction
<< "Mesh \"" << mesh.name()
<< "\" is not layered between the extruded wall patch "
<< "\"" << pp.name() << "\" and the bottom patch \""
<< bottomPp.name() << "\"" << exit(FatalError);
}
samplePointsPtr_()[ppFacei] = info.data();
}
}
else
{
// If this is not the extruded region then we trigger construction
// of mapping on the extruded region and then reverse map the
// extruded region's sampling locations so they are available here
const mappedExtrudedWallPolyPatch& samplePp =
refCast<const mappedExtrudedWallPolyPatch>(samplePolyPatch());
samplePointsPtr_.set
(
samplePp.reverseDistribute
(
samplePp.mappedPatchBase::samplePoints()
).ptr()
);
}
}
return samplePointsPtr_();
}
void Foam::mappedExtrudedWallPolyPatch::write(Ostream& os) const
{
mappedWallPolyPatch::write(os);
writeEntryIfDifferent(os, "bottomPatch", word::null, bottomPatch_);
}
// ************************************************************************* //

View File

@ -0,0 +1,226 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2022 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::mappedExtrudedWallPolyPatch
Description
Mapped wall patch which offsets the sampling points to account for the
extrusion thickness
SourceFiles
mappedExtrudedWallPolyPatch.C
\*---------------------------------------------------------------------------*/
#ifndef mappedExtrudedWallPolyPatch_H
#define mappedExtrudedWallPolyPatch_H
#include "mappedWallPolyPatch.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
class polyMesh;
/*---------------------------------------------------------------------------*\
Class mappedExtrudedWallPolyPatch Declaration
\*---------------------------------------------------------------------------*/
class mappedExtrudedWallPolyPatch
:
public mappedWallPolyPatch
{
private:
// Private Member Data
//- The bottom patch on the other side of the extruded region. Empty if
// this is not the extruded region.
word bottomPatch_;
//- The sample points
mutable autoPtr<vectorField> samplePointsPtr_;
protected:
// Protected Member Functions
//- Initialise the calculation of the patch geometry
virtual void initCalcGeometry(PstreamBuffers&);
//- Calculate the patch geometry
virtual void calcGeometry(PstreamBuffers&);
//- Initialise the patches for moving points
virtual void initMovePoints(PstreamBuffers&, const pointField&);
//- Correct patches after moving points
virtual void movePoints(PstreamBuffers&, const pointField&);
//- Initialise the update of the patch topology
virtual void initTopoChange(PstreamBuffers&);
//- Update of the patch topology
virtual void topoChange(PstreamBuffers&);
public:
//- Runtime type information
TypeName("mappedExtrudedWall");
// Constructors
//- Construct from components
mappedExtrudedWallPolyPatch
(
const word& name,
const label size,
const label start,
const label index,
const polyBoundaryMesh& bm,
const word& patchType
);
//- Construct from dictionary
mappedExtrudedWallPolyPatch
(
const word& name,
const dictionary& dict,
const label index,
const polyBoundaryMesh& bm,
const word& patchType
);
//- Construct as copy, resetting the boundary mesh
mappedExtrudedWallPolyPatch
(
const mappedExtrudedWallPolyPatch&,
const polyBoundaryMesh&
);
//- Construct given the original patch and resetting the
// face list and boundary mesh information
mappedExtrudedWallPolyPatch
(
const mappedExtrudedWallPolyPatch& pp,
const polyBoundaryMesh& bm,
const label index,
const label newSize,
const label newStart
);
//- Construct given the original patch and a map
mappedExtrudedWallPolyPatch
(
const mappedExtrudedWallPolyPatch& pp,
const polyBoundaryMesh& bm,
const label index,
const labelUList& mapAddressing,
const label newStart
);
//- Construct and return a clone, resetting the boundary mesh
virtual autoPtr<polyPatch> clone(const polyBoundaryMesh& bm) const
{
return autoPtr<polyPatch>
(
new mappedExtrudedWallPolyPatch(*this, bm)
);
}
//- Construct and return a clone, resetting the face list
// and boundary mesh
virtual autoPtr<polyPatch> clone
(
const polyBoundaryMesh& bm,
const label index,
const label newSize,
const label newStart
) const
{
return autoPtr<polyPatch>
(
new mappedExtrudedWallPolyPatch
(
*this,
bm,
index,
newSize,
newStart
)
);
}
//- Construct and return a clone, resetting the face list
// and boundary mesh
virtual autoPtr<polyPatch> clone
(
const polyBoundaryMesh& bm,
const label index,
const labelUList& mapAddressing,
const label newStart
) const
{
return autoPtr<polyPatch>
(
new mappedExtrudedWallPolyPatch
(
*this,
bm,
index,
mapAddressing,
newStart
)
);
}
//- Destructor
virtual ~mappedExtrudedWallPolyPatch();
// Member Functions
//- Return the sampling points
virtual tmp<pointField> samplePoints() const;
//- Write the polyPatch data as a dictionary
virtual void write(Ostream&) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -296,7 +296,7 @@ public:
const polyPatch& samplePolyPatch() const; const polyPatch& samplePolyPatch() const;
//- Get the sample points //- Get the sample points
tmp<pointField> samplePoints() const; virtual tmp<pointField> samplePoints() const;

View File

@ -31,7 +31,7 @@ License
#include "wedgePolyPatch.H" #include "wedgePolyPatch.H"
#include "emptyPolyPatch.H" #include "emptyPolyPatch.H"
#include "FaceCellWave.H" #include "FaceCellWave.H"
#include "DeltaInfoData.H" #include "LayerInfoData.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -62,7 +62,7 @@ tmp<volScalarField::Internal> thermalBaffle::calcDelta() const
// Initialise faces on the first coupled patch with their centres as data // Initialise faces on the first coupled patch with their centres as data
initialFaces.clear(); initialFaces.clear();
DynamicList<DeltaInfoData<point>> initialFaceInfoPoints; DynamicList<LayerInfoData<point>> initialFaceInfoPoints;
{ {
const polyPatch& pp = const polyPatch& pp =
regionMesh().boundaryMesh()[intCoupledPatchIDs_[0]]; regionMesh().boundaryMesh()[intCoupledPatchIDs_[0]];
@ -75,14 +75,14 @@ tmp<volScalarField::Internal> thermalBaffle::calcDelta() const
const point& c = pp.faceCentres()[ppFacei]; const point& c = pp.faceCentres()[ppFacei];
initialFaces.append(pp.start() + ppFacei); initialFaces.append(pp.start() + ppFacei);
initialFaceInfoPoints.append(DeltaInfoData<point>(-1, c)); initialFaceInfoPoints.append(LayerInfoData<point>(0, -1, c));
} }
} }
// Wave across the mesh layers // Wave across the mesh layers
List<DeltaInfoData<point>> faceInfoPoints(regionMesh().nFaces()); List<LayerInfoData<point>> faceInfoPoints(regionMesh().nFaces());
List<DeltaInfoData<point>> cellInfoPoints(regionMesh().nCells()); List<LayerInfoData<point>> cellInfoPoints(regionMesh().nCells());
FaceCellWave<DeltaInfoData<point>> FaceCellWave<LayerInfoData<point>>
( (
regionMesh(), regionMesh(),
initialFaces, initialFaces,
@ -95,7 +95,7 @@ tmp<volScalarField::Internal> thermalBaffle::calcDelta() const
// Calculate the distances between the opposite patch and load into data to // Calculate the distances between the opposite patch and load into data to
// wave back in the opposite direction // wave back in the opposite direction
initialFaces.clear(); initialFaces.clear();
DynamicList<DeltaInfoData<scalar>> initialFaceInfoDeltas; DynamicList<LayerInfoData<scalar>> initialFaceInfoDeltas;
{ {
const polyPatch& pp = const polyPatch& pp =
regionMesh().boundaryMesh()[intCoupledPatchIDs_[1]]; regionMesh().boundaryMesh()[intCoupledPatchIDs_[1]];
@ -112,15 +112,15 @@ tmp<volScalarField::Internal> thermalBaffle::calcDelta() const
mag(c - faceInfoPoints[pp.start() + ppFacei].data()); mag(c - faceInfoPoints[pp.start() + ppFacei].data());
initialFaces.append(pp.start() + ppFacei); initialFaces.append(pp.start() + ppFacei);
initialFaceInfoDeltas.append(DeltaInfoData<scalar>(-1, d)); initialFaceInfoDeltas.append(LayerInfoData<scalar>(0, -1, d));
} }
} }
} }
// Wave back across the layers // Wave back across the layers
List<DeltaInfoData<scalar>> faceInfoDeltas(regionMesh().nFaces()); List<LayerInfoData<scalar>> faceInfoDeltas(regionMesh().nFaces());
List<DeltaInfoData<scalar>> cellInfoDeltas(regionMesh().nCells()); List<LayerInfoData<scalar>> cellInfoDeltas(regionMesh().nCells());
FaceCellWave<DeltaInfoData<scalar>> FaceCellWave<LayerInfoData<scalar>>
( (
regionMesh(), regionMesh(),
initialFaces, initialFaces,

View File

@ -14,18 +14,27 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
internalField uniform 0.0; internalField uniform 0;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
"(sides|frontAndBack)" "(sides|frontAndBack)"
{ {
type zeroGradient; type zeroGradient;
} }
region0_to_wallFilmRegion_wallFilmFaces
top
{
type inletOutlet;
inletValue $internalField;
value $internalField;
}
"region0_to_wallFilm_.*"
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -14,18 +14,27 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
internalField uniform 0.77; internalField uniform 0.77;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
"(sides|frontAndBack)" "(sides|frontAndBack)"
{ {
type zeroGradient; type zeroGradient;
} }
region0_to_wallFilmRegion_wallFilmFaces
top
{
type inletOutlet;
inletValue $internalField;
value $internalField;
}
"region0_to_wallFilm_.*"
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -12,7 +12,6 @@ FoamFile
location "0"; location "0";
object O2; object O2;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
@ -21,11 +20,21 @@ internalField uniform 0.23;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
"(sides|frontAndBack)" "(sides|frontAndBack)"
{ {
type zeroGradient; type zeroGradient;
} }
region0_to_wallFilmRegion_wallFilmFaces
top
{
type inletOutlet;
inletValue $internalField;
value $internalField;
}
"region0_to_wallFilm_.*"
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -8,8 +8,8 @@
FoamFile FoamFile
{ {
format ascii; format ascii;
location "0";
class volScalarField; class volScalarField;
location "0";
object T; object T;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -20,15 +20,25 @@ internalField uniform 300;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
"(sides|frontAndBack)" "(sides|frontAndBack)"
{ {
type fixedValue; type fixedValue;
value uniform 300; value $internalField;
} }
region0_to_wallFilmRegion_wallFilmFaces
top
{
type inletOutlet;
inletValue $internalField;
value $internalField;
}
"region0_to_wallFilm_.*"
{ {
type fixedValue; type fixedValue;
value uniform 300; value $internalField;
} }
} }

View File

@ -20,11 +20,20 @@ internalField uniform (0 0 0);
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
"(sides|frontAndBack)" "(sides|frontAndBack)"
{ {
type noSlip; type noSlip;
} }
region0_to_wallFilmRegion_wallFilmFaces
top
{
type pressureInletOutletVelocity;
value $internalField;
}
"region0_to_wallFilm_.*"
{ {
type noSlip; type noSlip;
} }

View File

@ -16,16 +16,25 @@ FoamFile
dimensions [1 -1 -2 0 0 0 0]; dimensions [1 -1 -2 0 0 0 0];
internalField uniform 100000; internalField uniform 1e5;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
"(sides|frontAndBack)" "(sides|frontAndBack)"
{ {
type calculated; type calculated;
value $internalField; value $internalField;
} }
region0_to_wallFilmRegion_wallFilmFaces
top
{
type calculated;
value $internalField;
}
"region0_to_wallFilm_.*"
{ {
type calculated; type calculated;
value $internalField; value $internalField;

View File

@ -16,15 +16,24 @@ FoamFile
dimensions [1 -1 -2 0 0 0 0]; dimensions [1 -1 -2 0 0 0 0];
internalField uniform 100000; internalField uniform 1e5;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
"(sides|frontAndBack)" "(sides|frontAndBack)"
{ {
type fixedFluxPressure; type fixedFluxPressure;
} }
region0_to_wallFilmRegion_wallFilmFaces
top
{
type prghTotalPressure;
p0 $internalField;
}
"region0_to_wallFilm_.*"
{ {
type fixedFluxPressure; type fixedFluxPressure;
} }

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class volScalarField; class volScalarField;
location "0/wallFilmRegion"; location "0/wallFilm";
object T; object T;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -20,22 +20,14 @@ internalField uniform 300;
boundaryField boundaryField
{ {
wallFilmFaces_top #includeEtc "caseDicts/setConstraintTypes"
"(sides|frontAndBack|wallFilmFaces_top|cylinderFilmFaces_top)"
{ {
type zeroGradient; type zeroGradient;
} }
region0_to_wallFilmRegion_wallFilmFaces "wallFilm_to_region0_.*"
{
type zeroGradient;
}
sides
{
type zeroGradient;
}
frontAndBack
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class volVectorField; class volVectorField;
location "0/wallFilmRegion"; location "0/wallFilm";
object U; object U;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -20,16 +20,13 @@ internalField uniform (0 0 0);
boundaryField boundaryField
{ {
wallFilmFaces_top #includeEtc "caseDicts/setConstraintTypes"
"(wallFilmFaces_top|cylinderFilmFaces_top)"
{ {
type slip; type slip;
} }
region0_to_wallFilmRegion_wallFilmFaces
{
type noSlip;
}
sides sides
{ {
type noSlip; type noSlip;
@ -39,6 +36,11 @@ boundaryField
{ {
type slip; type slip;
} }
"wallFilm_to_region0_.*"
{
type noSlip;
}
} }

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class volScalarField; class volScalarField;
location "0/wallFilmRegion"; location "0/wallFilm";
object delta; object delta;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -20,22 +20,14 @@ internalField uniform 0;
boundaryField boundaryField
{ {
wallFilmFaces_top #includeEtc "caseDicts/setConstraintTypes"
"(sides|frontAndBack|wallFilmFaces_top|cylinderFilmFaces_top)"
{ {
type zeroGradient; type zeroGradient;
} }
region0_to_wallFilmRegion_wallFilmFaces "wallFilm_to_region0_.*"
{
type zeroGradient;
}
sides
{
type zeroGradient;
}
frontAndBack
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -6,6 +6,6 @@ cd ${0%/*} || exit 1 # Run from this directory
cleanCase cleanCase
rm -rf constant/wallFilmRegion/polyMesh rm -rf constant/wallFilm/polyMesh
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -1,11 +0,0 @@
#!/bin/sh
. $WM_PROJECT_DIR/bin/tools/RunFunctions
runApplication blockMesh
runApplication topoSet
runApplication extrudeToRegionMesh -overwrite
paraFoam -touch
paraFoam -touch -region wallFilmRegion
#------------------------------------------------------------------------------

View File

@ -3,10 +3,13 @@ cd ${0%/*} || exit 1 # Run from this directory
. $WM_PROJECT_DIR/bin/tools/RunFunctions . $WM_PROJECT_DIR/bin/tools/RunFunctions
./Allmesh runApplication blockMesh
runApplication topoSet
runApplication extrudeToRegionMesh -overwrite
application=$(getApplication) runApplication $(getApplication)
runApplication $application paraFoam -touch
paraFoam -touch -region wallFilm
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -0,0 +1,21 @@
#!/bin/sh
cd ${0%/*} || exit 1 # Run from this directory
. $WM_PROJECT_DIR/bin/tools/RunFunctions
runApplication blockMesh
runApplication decomposePar -noFields
runParallel topoSet
runParallel extrudeToRegionMesh -overwrite
runApplication -s fields decomposePar -fields -copyZero
runParallel $(getApplication)
runApplication reconstructPar
runApplication -s wallFilm reconstructPar -region wallFilm
paraFoam -touch
paraFoam -touch -region wallFilm
#------------------------------------------------------------------------------

View File

@ -14,7 +14,7 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
regionName wallFilmRegion; regionName wallFilm;
viscosity viscosity
{ {

View File

@ -99,7 +99,7 @@ defaultPatch
boundary boundary
( (
filmWalls walls
{ {
type wall; type wall;
faces faces
@ -108,8 +108,15 @@ boundary
(1 2 21 20) (1 2 21 20)
(12 11 30 31) (12 11 30 31)
(13 12 31 32) (13 12 31 32)
(10 5 24 29) );
}
cylinder
{
type wall;
faces
(
(5 0 19 24) (5 0 19 24)
(10 5 24 29)
(16 10 29 35) (16 10 29 35)
(11 16 35 30) (11 16 35 30)
); );
@ -121,14 +128,21 @@ boundary
( (
(2 3 22 21) (2 3 22 21)
(3 6 25 22) (3 6 25 22)
(7 8 27 26)
(6 7 26 25)
(8 18 37 27)
(18 17 36 37)
(14 13 32 33) (14 13 32 33)
(17 14 33 36) (17 14 33 36)
); );
} }
top
{
type patch;
faces
(
(6 7 26 25)
(7 8 27 26)
(8 18 37 27)
(18 17 36 37)
);
}
); );

View File

@ -16,32 +16,7 @@ FoamFile
numberOfSubdomains 4; numberOfSubdomains 4;
method metis; method scotch;
simpleCoeffs
{
n (2 2 1);
}
hierarchicalCoeffs
{
n (1 1 1);
order xyz;
}
metisCoeffs
{
processorWeights ( 1 1 1 1 );
}
manualCoeffs
{
dataFile "";
}
distributed no;
roots ( );
// ************************************************************************* // // ************************************************************************* //

View File

@ -13,13 +13,9 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
region wallFilmRegion; region wallFilm;
faceZones (wallFilmFaces); faceZones (wallFilmFaces cylinderFilmFaces);
sampleMode nearestPatchFace;
oneD false;
extrudeModel linearNormal; extrudeModel linearNormal;

View File

@ -21,7 +21,7 @@ actions
type faceSet; type faceSet;
action new; action new;
source patchToFace; source patchToFace;
patch filmWalls; patch walls;
} }
{ {
name wallFilmFaces; name wallFilmFaces;
@ -30,6 +30,20 @@ actions
source setToFaceZone; source setToFaceZone;
faceSet wallFilmFaceSet; faceSet wallFilmFaceSet;
} }
{
name cylinderFilmFaceSet;
type faceSet;
action new;
source patchToFace;
patch cylinder;
}
{
name cylinderFilmFaces;
type faceZoneSet;
action new;
source setToFaceZone;
faceSet cylinderFilmFaceSet;
}
); );
// ************************************************************************* // // ************************************************************************* //

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class dictionary; class dictionary;
location "system/wallFilmRegion"; location "system/wallFilm";
object fvSchemes; object fvSchemes;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class dictionary; class dictionary;
location "system/wallFilmRegion"; location "system/wallFilm";
object fvSolution; object fvSolution;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -20,12 +20,14 @@ internalField uniform 0;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
walls walls
{ {
type zeroGradient; type zeroGradient;
} }
"(region0_to.*)" "region0_to_wallFilm_.*"
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -20,12 +20,14 @@ internalField uniform 0.77;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
walls walls
{ {
type zeroGradient; type zeroGradient;
} }
"(region0_to.*)" "region0_to_wallFilm_.*"
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -20,12 +20,14 @@ internalField uniform 0.23;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
walls walls
{ {
type zeroGradient; type zeroGradient;
} }
"(region0_to.*)" "region0_to_wallFilm_.*"
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -20,19 +20,21 @@ internalField uniform 300;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
walls walls
{ {
type fixedValue; type fixedValue;
value uniform 300; value $internalField;
} }
"(region0_to.*)" "region0_to_wallFilm_.*"
{ {
type mapped; type mapped;
field T; field T;
average 300;
setAverage no; setAverage no;
value uniform 300; average 300;
value $internalField;
} }
} }

View File

@ -20,20 +20,21 @@ internalField uniform (0 0 0);
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
walls walls
{ {
type uniformFixedValue; type uniformFixedValue;
uniformValue (0 0 0); uniformValue (0 0 0);
} }
"(region0_to.*)" "region0_to_wallFilm_.*"
{ {
type mapped; type mapped;
uniformValue constant (0 0 0);
value uniform (0 0 0);
field U; field U;
average (0 0 0);
setAverage no; setAverage no;
average (0 0 0);
value uniform (0 0 0);
} }
} }

View File

@ -20,6 +20,8 @@ internalField uniform 1e-7;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
walls walls
{ {
type compressible::alphatWallFunction; type compressible::alphatWallFunction;
@ -27,7 +29,7 @@ boundaryField
value uniform 0; value uniform 0;
} }
"(region0_to.*)" "region0_to_wallFilm_.*"
{ {
type alphatFilmWallFunction; type alphatFilmWallFunction;
B 5.5; B 5.5;

View File

@ -20,16 +20,18 @@ internalField uniform 1e-7;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
walls walls
{ {
type epsilonWallFunction; type epsilonWallFunction;
value uniform 1e-7; value uniform 1e-7;
} }
"(region0_to.*)" "region0_to_wallFilm_.*"
{ {
type epsilonWallFunction; type epsilonWallFunction;
value uniform 1e-07; value uniform 1e-7;
} }
} }

View File

@ -20,13 +20,15 @@ internalField uniform 0;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
walls walls
{ {
type calculated; type calculated;
value uniform 0; value uniform 0;
} }
"(region0_to.*)" "region0_to_wallFilm_.*"
{ {
type convectiveHeatTransfer; type convectiveHeatTransfer;
L 1; L 1;

View File

@ -20,16 +20,18 @@ internalField uniform 1e-5;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
walls walls
{ {
type kqRWallFunction; type kqRWallFunction;
value uniform 1e-5; value uniform 1e-5;
} }
"(region0_to.*)" "region0_to_wallFilm_.*"
{ {
type kqRWallFunction; type kqRWallFunction;
value uniform 1e-05; value uniform 1e-5;
} }
} }

View File

@ -20,13 +20,15 @@ internalField uniform 1e-7;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
walls walls
{ {
type nutkWallFunction; type nutkWallFunction;
value uniform 0; value uniform 0;
} }
"(region0_to.*)" "region0_to_wallFilm_.*"
{ {
type nutkFilmWallFunction; type nutkFilmWallFunction;
B 5.5; B 5.5;

View File

@ -20,16 +20,18 @@ internalField uniform 100000;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
walls walls
{ {
type calculated; type calculated;
value $internalField; value $internalField;
} }
"(region0_to.*)" "region0_to_wallFilm_.*"
{ {
type calculated; type calculated;
value uniform 100000; value $internalField;
} }
} }

View File

@ -20,17 +20,18 @@ internalField uniform 100000;
boundaryField boundaryField
{ {
#includeEtc "caseDicts/setConstraintTypes"
walls walls
{ {
type fixedFluxPressure; type fixedFluxPressure;
value uniform 100000; value $internalField;
} }
"(region0_to.*)" "region0_to_wallFilm_.*"
{ {
type fixedFluxPressure; type fixedFluxPressure;
gradient uniform 0; value $internalField;
value uniform 100000;
} }
} }

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class volScalarField; class volScalarField;
location "0/wallFilmRegion"; location "0/wallFilm";
object T; object T;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -20,22 +20,20 @@ internalField uniform 300;
boundaryField boundaryField
{ {
// top film surface #includeEtc "caseDicts/setConstraintTypes"
"(.*top)"
walls
{ {
type zeroGradient; type zeroGradient;
} }
// mapped boundaries "wallFilm_to_region0_.*"
"(region0_to.*)"
{ {
// type zeroGradient;
type fixedValue; type fixedValue;
value uniform 350.0; value uniform 350.0;
} }
// floor sides ".*_top"
walls
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class volVectorField; class volVectorField;
location "0/wallFilmRegion"; location "0/wallFilm";
object U; object U;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -20,23 +20,22 @@ internalField uniform (0 0 0);
boundaryField boundaryField
{ {
// top film surface #includeEtc "caseDicts/setConstraintTypes"
"(.*top)"
{
type slip;
}
// mapped boundaries
"(region0_to.*)"
{
type slip;
}
// floor sides
walls walls
{ {
type noSlip; type noSlip;
} }
"wallFilm_to_region0_.*"
{
type slip;
}
".*_top"
{
type slip;
}
} }
// ************************************************************************* // // ************************************************************************* //

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class volScalarField; class volScalarField;
location "0/wallFilmRegion"; location "0/wallFilm";
object delta; object delta;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -20,23 +20,22 @@ internalField uniform 0.0;
boundaryField boundaryField
{ {
// top film surface #includeEtc "caseDicts/setConstraintTypes"
"(.*top)"
{
type zeroGradient;
}
// mapped boundaries
"(region0_to.*)"
{
type zeroGradient;
}
// floor sides
walls walls
{ {
type zeroGradient; type zeroGradient;
} }
"wallFilm_to_region0_.*"
{
type zeroGradient;
}
".*_top"
{
type zeroGradient;
}
} }
// ************************************************************************* // // ************************************************************************* //

View File

@ -4,8 +4,6 @@ cd ${0%/*} || exit 1 # Run from this directory
# Source tutorial clean functions # Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions . $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase cleanCase && rm -rf constant/wallFilm/polyMesh
rm -rf constant/wallFilmRegion/polyMesh
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -1,25 +0,0 @@
#!/bin/sh
cd ${0%/*} || exit 1 # Run from this directory
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
# Create the underlying block mesh
runApplication blockMesh
# Create the set for the obstacles
runApplication topoSet
# Create the obstacles - add obstacle patches to wallFilm patch
runApplication subsetMesh c0 -patch wallFilm -overwrite -noFields
# Create a wallFilmRegion faceZone from the obstacles and floor
runApplication -s wallFilmRegion topoSet -dict topoSetDict.wallFilmRegion
# Create the wall film region from the wallFilmRegion faceZone via extrusion
runApplication extrudeToRegionMesh -overwrite
paraFoam -touch
paraFoam -touch -region wallFilmRegion
#------------------------------------------------------------------------------

View File

@ -4,9 +4,30 @@ cd ${0%/*} || exit 1 # Run from this directory
# Source tutorial run functions # Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions . $WM_PROJECT_DIR/bin/tools/RunFunctions
application=$(getApplication) runApplication blockMesh
./Allmesh runApplication decomposePar -noFields
runApplication $application
# Create a set for the bits of the mesh that are not boxes
runParallel topoSet
# Create the boxes and add their surfaces to the boxes patch
runParallel subsetMesh notBoxes -patch boxes -overwrite -noFields
# Create zones from the floor and the boxes
runParallel -s wallFilm topoSet -dict topoSetDict.wallFilm
# Create the film mesh
runParallel extrudeToRegionMesh -overwrite
runApplication -s fields decomposePar -fields -copyZero
runParallel $(getApplication);
runApplication reconstructPar
runApplication -s wallFilm reconstructPar -region wallFilm
paraFoam -touch
paraFoam -touch -region wallFilm
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -1,21 +0,0 @@
#!/bin/sh
cd ${0%/*} || exit 1 # Run from this directory
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
./Allmesh
cp -Rf 0.orig 0
application=$(getApplication)
runApplication -s primaryRegion decomposePar
runApplication -s wallFilmRegion decomposePar -region wallFilmRegion
runParallel $application
runApplication -s primaryRegion reconstructPar
runApplication -s wallFilmRegion reconstructPar -region wallFilmRegion
#------------------------------------------------------------------------------

View File

@ -14,7 +14,7 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
regionName wallFilmRegion; regionName wallFilm;
viscosity viscosity
{ {

View File

@ -46,7 +46,7 @@ boundary
(1 5 4 0) (1 5 4 0)
); );
} }
wallFilm floor
{ {
type wall; type wall;
faces faces
@ -54,6 +54,12 @@ boundary
(0 3 2 1) (0 3 2 1)
); );
} }
boxes
{
type wall;
faces
();
}
); );

View File

@ -14,13 +14,15 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
numberOfSubdomains 4; numberOfSubdomains 12;
method scotch; method hierarchical;
distributed no; hierarchicalCoeffs
{
roots ( ); n (2 2 3);
order xyz;
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -13,13 +13,9 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
region wallFilmRegion; region wallFilm;
faceZones (wallFilmFaces); faceZones (floorFilmFaces boxesFilmFaces);
oneD false;
sampleMode nearestPatchFace;
extrudeModel linearNormal; extrudeModel linearNormal;

View File

@ -17,38 +17,38 @@ FoamFile
actions actions
( (
{ {
name c0; name notBoxes;
type cellSet; type cellSet;
action clear; action clear;
} }
{ {
name c0; name notBoxes;
type cellSet; type cellSet;
action invert; action invert;
} }
{ {
name c0; name notBoxes;
type cellSet; type cellSet;
action delete; action delete;
source boxToCell; source boxToCell;
box (0.4 0.1 0.1) (0.6 0.3 0.3); box (0.4 0.1 0.1) (0.6 0.3 0.3);
} }
{ {
name c0; name notBoxes;
type cellSet; type cellSet;
action delete; action delete;
source boxToCell; source boxToCell;
box (0.4 0.1 0.4) (0.6 0.3 0.6); box (0.4 0.1 0.4) (0.6 0.3 0.6);
} }
{ {
name c0; name notBoxes;
type cellSet; type cellSet;
action delete; action delete;
source boxToCell; source boxToCell;
box (0.4 0.4 0.1) (0.6 0.6 0.3); box (0.4 0.4 0.1) (0.6 0.6 0.3);
} }
{ {
name c0; name notBoxes;
type cellSet; type cellSet;
action delete; action delete;
source boxToCell; source boxToCell;

View File

@ -17,18 +17,32 @@ FoamFile
actions actions
( (
{ {
name wallFilmFaceSet; name floorFilmFaceSet;
type faceSet; type faceSet;
action new; action new;
source patchToFace; source patchToFace;
patch wallFilm; patch floor;
} }
{ {
name wallFilmFaces; name floorFilmFaces;
type faceZoneSet; type faceZoneSet;
action new; action new;
source setToFaceZone; source setToFaceZone;
faceSet wallFilmFaceSet; faceSet floorFilmFaceSet;
}
{
name boxesFilmFaceSet;
type faceSet;
action new;
source patchToFace;
patch boxes;
}
{
name boxesFilmFaces;
type faceZoneSet;
action new;
source setToFaceZone;
faceSet boxesFilmFaceSet;
} }
); );

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class dictionary; class dictionary;
location "system/wallFilmRegion"; location "system/wallFilm";
object fvSchemes; object fvSchemes;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class dictionary; class dictionary;
location "system/wallFilmRegion"; location "system/wallFilm";
object fvSolution; object fvSolution;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -14,7 +14,6 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
internalField uniform 0.0; internalField uniform 0.0;
@ -23,17 +22,24 @@ boundaryField
{ {
inlet inlet
{ {
type zeroGradient; type inletOutlet;
inletValue $internalField;
value $internalField;
} }
outlet outlet
{ {
type zeroGradient; type inletOutlet;
inletValue $internalField;
value $internalField;
} }
sides sides
{ {
type zeroGradient; type zeroGradient;
} }
region0_to_wallFilmRegion_wallFilmFaces
region0_to_wallFilm_wallFilmFaces
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -14,7 +14,6 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
internalField uniform 0.77; internalField uniform 0.77;
@ -23,17 +22,24 @@ boundaryField
{ {
inlet inlet
{ {
type zeroGradient; type inletOutlet;
inletValue $internalField;
value $internalField;
} }
outlet outlet
{ {
type zeroGradient; type inletOutlet;
inletValue $internalField;
value $internalField;
} }
sides sides
{ {
type zeroGradient; type zeroGradient;
} }
region0_to_wallFilmRegion_wallFilmFaces
region0_to_wallFilm_wallFilmFaces
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -12,7 +12,6 @@ FoamFile
location "0"; location "0";
object O2; object O2;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
@ -23,17 +22,24 @@ boundaryField
{ {
inlet inlet
{ {
type zeroGradient; type inletOutlet;
inletValue $internalField;
value $internalField;
} }
outlet outlet
{ {
type zeroGradient; type inletOutlet;
inletValue $internalField;
value $internalField;
} }
sides sides
{ {
type zeroGradient; type zeroGradient;
} }
region0_to_wallFilmRegion_wallFilmFaces
region0_to_wallFilm_wallFilmFaces
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -8,8 +8,8 @@
FoamFile FoamFile
{ {
format ascii; format ascii;
location "0";
class volScalarField; class volScalarField;
location "0";
object T; object T;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -22,23 +22,28 @@ boundaryField
{ {
inlet inlet
{ {
type fixedValue; type inletOutlet;
value uniform 300; inletValue $internalField;
value $internalField;
} }
outlet outlet
{ {
type fixedValue; type inletOutlet;
value uniform 300; inletValue $internalField;
value $internalField;
} }
sides sides
{ {
type fixedValue; type fixedValue;
value uniform 300; value $internalField;
} }
region0_to_wallFilmRegion_wallFilmFaces
region0_to_wallFilm_wallFilmFaces
{ {
type fixedValue; type fixedValue;
value uniform 300; value $internalField;
} }
} }

View File

@ -23,19 +23,21 @@ boundaryField
inlet inlet
{ {
type pressureInletOutletVelocity; type pressureInletOutletVelocity;
value uniform (0 0 0); value $internalField;
} }
outlet outlet
{ {
type pressureInletOutletVelocity; type pressureInletOutletVelocity;
value uniform (0 0 0); value $internalField;
} }
sides sides
{ {
type pressureInletOutletVelocity; type noSlip;
value uniform (0 0 0);
} }
region0_to_wallFilmRegion_wallFilmFaces
region0_to_wallFilm_wallFilmFaces
{ {
type noSlip; type noSlip;
} }

View File

@ -25,17 +25,20 @@ boundaryField
type calculated; type calculated;
value $internalField; value $internalField;
} }
outlet outlet
{ {
type calculated; type calculated;
value $internalField; value $internalField;
} }
sides sides
{ {
type calculated; type calculated;
value $internalField; value $internalField;
} }
region0_to_wallFilmRegion_wallFilmFaces
region0_to_wallFilm_wallFilmFaces
{ {
type calculated; type calculated;
value $internalField; value $internalField;

View File

@ -22,17 +22,22 @@ boundaryField
{ {
inlet inlet
{ {
type fixedFluxPressure; type prghTotalPressure;
p0 $internalField;
} }
outlet outlet
{ {
type fixedFluxPressure; type prghTotalPressure;
p0 $internalField;
} }
sides sides
{ {
type fixedFluxPressure; type fixedFluxPressure;
} }
region0_to_wallFilmRegion_wallFilmFaces
region0_to_wallFilm_wallFilmFaces
{ {
type fixedFluxPressure; type fixedFluxPressure;
} }

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class volScalarField; class volScalarField;
location "0/wallFilmRegion"; location "0/wallFilm";
object T; object T;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -20,16 +20,6 @@ internalField uniform 300;
boundaryField boundaryField
{ {
wallFilmFaces_top
{
type zeroGradient;
}
region0_to_wallFilmRegion_wallFilmFaces
{
type zeroGradient;
}
inlet inlet
{ {
type fixedValue; type fixedValue;
@ -45,6 +35,16 @@ boundaryField
{ {
type zeroGradient; type zeroGradient;
} }
wallFilmFaces_top
{
type zeroGradient;
}
wallFilm_to_region0_wallFilmFaces
{
type zeroGradient;
}
} }

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class volVectorField; class volVectorField;
location "0/wallFilmRegion"; location "0/wallFilm";
object U; object U;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -20,16 +20,6 @@ internalField uniform (0 0 0);
boundaryField boundaryField
{ {
wallFilmFaces_top
{
type slip;
}
region0_to_wallFilmRegion_wallFilmFaces
{
type noSlip;
}
inlet inlet
{ {
type fixedValue; type fixedValue;
@ -45,6 +35,16 @@ boundaryField
{ {
type noSlip; type noSlip;
} }
wallFilmFaces_top
{
type slip;
}
wallFilm_to_region0_wallFilmFaces
{
type noSlip;
}
} }

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class volScalarField; class volScalarField;
location "0/wallFilmRegion"; location "0/wallFilm";
object delta; object delta;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -20,16 +20,6 @@ internalField uniform 0;
boundaryField boundaryField
{ {
wallFilmFaces_top
{
type zeroGradient;
}
region0_to_wallFilmRegion_wallFilmFaces
{
type zeroGradient;
}
inlet inlet
{ {
type fixedValue; type fixedValue;
@ -45,6 +35,16 @@ boundaryField
{ {
type zeroGradient; type zeroGradient;
} }
wallFilmFaces_top
{
type zeroGradient;
}
wallFilm_to_region0_wallFilmFaces
{
type zeroGradient;
}
} }

View File

@ -6,6 +6,6 @@ cd ${0%/*} || exit 1 # Run from this directory
cleanCase cleanCase
rm -rf constant/wallFilmRegion/polyMesh rm -rf constant/wallFilm/polyMesh
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -1,11 +0,0 @@
#!/bin/sh
. $WM_PROJECT_DIR/bin/tools/RunFunctions
runApplication blockMesh
runApplication topoSet -dict wallFilmRegion.topoSet
runApplication extrudeToRegionMesh -overwrite
paraFoam -touch
paraFoam -touch -region wallFilmRegion
#------------------------------------------------------------------------------

View File

@ -3,10 +3,12 @@ cd ${0%/*} || exit 1 # Run from this directory
. $WM_PROJECT_DIR/bin/tools/RunFunctions . $WM_PROJECT_DIR/bin/tools/RunFunctions
./Allmesh runApplication blockMesh
runApplication topoSet
runApplication extrudeToRegionMesh -overwrite
application=$(getApplication) paraFoam -touchAll
runApplication $application runApplication $(getApplication)
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -14,7 +14,7 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
regionName wallFilmRegion; regionName wallFilm;
viscosity viscosity
{ {

View File

@ -13,14 +13,10 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
region wallFilmRegion; region wallFilm;
faceZones (wallFilmFaces); faceZones (wallFilmFaces);
oneD false;
sampleMode nearestPatchFace;
extrudeModel linearNormal; extrudeModel linearNormal;
nLayers 1; nLayers 1;

View File

@ -33,8 +33,8 @@ solvers
"(U|h)" "(U|h)"
{ {
solver smoothSolver; solver PBiCGStab;
smoother symGaussSeidel; preconditioner DILU;
tolerance 0; tolerance 0;
relTol 0.1; relTol 0.1;
} }

View File

@ -11,7 +11,6 @@ FoamFile
class dictionary; class dictionary;
object topoSetDict; object topoSetDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
actions actions

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class dictionary; class dictionary;
location "system/wallFilmRegion"; location "system/wallFilm";
object fvSchemes; object fvSchemes;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -9,7 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class dictionary; class dictionary;
location "system/wallFilmRegion"; location "system/wallFilm";
object fvSolution; object fvSolution;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -18,16 +18,16 @@ solvers
{ {
"alpha.*" "alpha.*"
{ {
solver smoothSolver; solver PBiCGStab;
smoother symGaussSeidel; preconditioner DILU;
tolerance 1e-10; tolerance 1e-10;
relTol 0; relTol 0;
} }
"(U|e).*" "(U|e).*"
{ {
solver smoothSolver; solver PBiCGStab;
smoother symGaussSeidel; preconditioner DILU;
tolerance 1e-10; tolerance 1e-10;
relTol 0; relTol 0;
} }

View File

@ -28,6 +28,7 @@ boundaryField
inletValue $internalField; inletValue $internalField;
value $internalField; value $internalField;
} }
region0_to_wallFilm_walls region0_to_wallFilm_walls
{ {
type zeroGradient; type zeroGradient;

View File

@ -28,6 +28,7 @@ boundaryField
inletValue $internalField; inletValue $internalField;
value $internalField; value $internalField;
} }
region0_to_wallFilm_walls region0_to_wallFilm_walls
{ {
type zeroGradient; type zeroGradient;

View File

@ -28,6 +28,7 @@ boundaryField
inletValue $internalField; inletValue $internalField;
value $internalField; value $internalField;
} }
region0_to_wallFilm_walls region0_to_wallFilm_walls
{ {
type zeroGradient; type zeroGradient;

View File

@ -8,8 +8,8 @@
FoamFile FoamFile
{ {
format ascii; format ascii;
location "0";
class volScalarField; class volScalarField;
location "0";
object T; object T;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -28,6 +28,7 @@ boundaryField
inletValue $internalField; inletValue $internalField;
value $internalField; value $internalField;
} }
region0_to_wallFilm_walls region0_to_wallFilm_walls
{ {
type fixedValue; type fixedValue;

View File

@ -27,6 +27,7 @@ boundaryField
type pressureInletOutletVelocity; type pressureInletOutletVelocity;
value $internalField; value $internalField;
} }
region0_to_wallFilm_walls region0_to_wallFilm_walls
{ {
type noSlip; type noSlip;

View File

@ -27,6 +27,7 @@ boundaryField
type calculated; type calculated;
value $internalField; value $internalField;
} }
region0_to_wallFilm_walls region0_to_wallFilm_walls
{ {
type calculated; type calculated;

View File

@ -27,7 +27,7 @@ boundaryField
type zeroGradient; type zeroGradient;
} }
region0_to_wallFilm_walls wallFilm_to_region0_walls
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -27,7 +27,7 @@ boundaryField
type slip; type slip;
} }
region0_to_wallFilm_walls wallFilm_to_region0_walls
{ {
type noSlip; type noSlip;
} }

View File

@ -27,7 +27,7 @@ boundaryField
type zeroGradient; type zeroGradient;
} }
region0_to_wallFilm_walls wallFilm_to_region0_walls
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -17,10 +17,6 @@ region wallFilm;
faceZones (walls); faceZones (walls);
oneD false;
sampleMode nearestPatchFace;
extrudeModel linearNormal; extrudeModel linearNormal;
nLayers 1; nLayers 1;

View File

@ -8,8 +8,8 @@
FoamFile FoamFile
{ {
format ascii; format ascii;
location "0";
class volScalarField; class volScalarField;
location "0";
object T; object T;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -32,7 +32,7 @@ boundaryField
inletValue $internalField; inletValue $internalField;
} }
region0_to_wallFilmRegion_wallFilmFaces "region0_to_wallFilm_.*"
{ {
type fixedValue; type fixedValue;
value uniform 300; value uniform 300;

View File

@ -31,7 +31,7 @@ boundaryField
value $internalField; value $internalField;
} }
region0_to_wallFilmRegion_wallFilmFaces "region0_to_wallFilm_.*"
{ {
type noSlip; type noSlip;
} }

View File

@ -9,6 +9,7 @@ FoamFile
{ {
format ascii; format ascii;
class volScalarField; class volScalarField;
location "0";
object alpha.liquid; object alpha.liquid;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -29,7 +30,7 @@ boundaryField
type zeroGradient; type zeroGradient;
} }
region0_to_wallFilmRegion_wallFilmFaces "region0_to_wallFilm_.*"
{ {
type zeroGradient; type zeroGradient;
} }

View File

@ -32,7 +32,7 @@ boundaryField
value $internalField; value $internalField;
} }
region0_to_wallFilmRegion_wallFilmFaces "region0_to_wallFilm_.*"
{ {
type calculated; type calculated;
value $internalField; value $internalField;

Some files were not shown because too many files have changed in this diff Show More