mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge commit 'OpenCFD/master' into olesenm
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@ -55,7 +55,7 @@ doc/[Dd]oxygen/man
|
|||||||
# ignore .timeStamp in the main directory
|
# ignore .timeStamp in the main directory
|
||||||
/.timeStamp
|
/.timeStamp
|
||||||
|
|
||||||
# ignore .ebrowse in the main directory
|
# ignore .tags in the main directory
|
||||||
/.ebrowse
|
/.tags
|
||||||
|
|
||||||
# end-of-file
|
# end-of-file
|
||||||
|
|||||||
@ -8,5 +8,4 @@ EXE_INC = \
|
|||||||
EXE_LIBS = \
|
EXE_LIBS = \
|
||||||
-lincompressibleRASModels \
|
-lincompressibleRASModels \
|
||||||
-lincompressibleTransportModels \
|
-lincompressibleTransportModels \
|
||||||
-lfiniteVolume \
|
-lfiniteVolume
|
||||||
-lmeshTools
|
|
||||||
|
|||||||
@ -27,26 +27,27 @@
|
|||||||
# foamEbrowse
|
# foamEbrowse
|
||||||
#
|
#
|
||||||
# Description
|
# Description
|
||||||
# Build the Ebrowse database for all the .C and .H files
|
# Build the Ebrowse database for all the .H and .C files
|
||||||
#
|
#
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
headersFile=${TMPDIR:-/tmp}/headersFile.$$
|
|
||||||
sourcesFile=${TMPDIR:-/tmp}/sourcesFile.$$
|
sourcesFile=${TMPDIR:-/tmp}/sourcesFile.$$
|
||||||
|
|
||||||
if [ $# -ne 0 ]; then
|
if [ $# -ne 0 ]; then
|
||||||
echo "Usage : ${0##*/}"
|
echo "Usage : ${0##*/}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Build the Ebrowse dadbase for all the .C and .H files"
|
echo "Build the Ebrowse dadbase for all the .H and .C files"
|
||||||
echo ""
|
echo ""
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clean up on termination and on Ctrl-C
|
# Clean up on termination and on Ctrl-C
|
||||||
trap 'rm -f $headersFile $sourcesFile 2>/dev/null; exit 0' EXIT TERM INT
|
trap 'rm -f $sourcesFile 2>/dev/null; exit 0' EXIT TERM INT
|
||||||
|
|
||||||
cd $WM_PROJECT_DIR
|
cd $WM_PROJECT_DIR
|
||||||
find -H . -name "*.H" | fgrep -v lnInclude > $headersFile
|
mkdir .tags 2>/dev/null
|
||||||
find -H . -name "*.C" | fgrep -v lnInclude > $sourcesFile
|
cd .tags
|
||||||
ebrowse --files=$headersFile --files=$sourcesFile --output-file=.ebrowse
|
|
||||||
|
find -H .. \( -name "*.[HC]" -not -name "lnInclude" -not -name "Doxygen" \) -print > $sourcesFile
|
||||||
|
ebrowse --files=$sourcesFile --output-file=ebrowse
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|||||||
56
bin/foamTags
Executable file
56
bin/foamTags
Executable file
@ -0,0 +1,56 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# ========= |
|
||||||
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
# \\ / O peration |
|
||||||
|
# \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||||
|
# \\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
#
|
||||||
|
# Script
|
||||||
|
# foamTags
|
||||||
|
#
|
||||||
|
# Description
|
||||||
|
# Build the tags files for all the .C and .H files
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if [ $# -ne 0 ]; then
|
||||||
|
echo "Usage : ${0##*/}"
|
||||||
|
echo ""
|
||||||
|
echo "Build the tags files for all the .C and .H files"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd $WM_PROJECT_DIR
|
||||||
|
mkdir .tags 2>/dev/null
|
||||||
|
|
||||||
|
find -H . \( -name "*.[HC]" -not -name "lnInclude" -not -name "Doxygen" \) | \
|
||||||
|
etags --declarations -l c++ -o .tags/etags -
|
||||||
|
find -H . \( -name "*.[HC]" -not -name "lnInclude" -not -name "Doxygen" \) | \
|
||||||
|
etags -l c++ -o .tags/etagsDef -
|
||||||
|
find -H . \( -name "*.H" -not -name "lnInclude" -not -name "Doxygen" \) | \
|
||||||
|
etags --declarations -l c++ -o .tags/etagsDec -
|
||||||
|
|
||||||
|
gtags -i --gtagsconf bin/tools/gtagsrc .tags
|
||||||
|
|
||||||
|
foamEbrowse
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
63
bin/tools/gtagsrc
Normal file
63
bin/tools/gtagsrc
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# ========= |
|
||||||
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
# \\ / O peration |
|
||||||
|
# \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||||
|
# \\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
#
|
||||||
|
# Canfiguration file
|
||||||
|
# gtagsrc
|
||||||
|
#
|
||||||
|
# Description
|
||||||
|
# Configuration file for gtags(1).
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
default:\
|
||||||
|
:tc=gtags:tc=htags:
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Configuration for gtags(1)
|
||||||
|
# See gtags(1).
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
common:\
|
||||||
|
:skip=GPATH,GTAGS,GRTAGS,GSYMS,HTML/,HTML.pub/,html/,tags,TAGS,ID,.ebrowse,.etags,.etagsDef,.etagsDec,y.tab.c,y.tab.h,.notfunction,cscope.out,cscope.po.out,cscope.in.out,.gdbinit,SCCS/,RCS/,CVS/,CVSROOT/,{arch}/,.svn/,.git/,.cvsrc,.cvsignore,.gitignore,.cvspass,.cvswrappers,.deps/,autom4te.cache/,.snprj/:\
|
||||||
|
:langmap=c\:.c.h,yacc\:.y,asm\:.s.S,java\:.java,cpp\:.c++.cc.cpp.cxx.hxx.hpp.C.H,php\:.php.php3.phtml:
|
||||||
|
gtags:\
|
||||||
|
:tc=common:\
|
||||||
|
:GTAGS=gtags-parser %s:\
|
||||||
|
:GRTAGS=gtags-parser -r %s:\
|
||||||
|
:GSYMS=gtags-parser -s %s:\
|
||||||
|
:skip=lnInclude/,tutorials/,wmake/,doc/,lib/,etc/:
|
||||||
|
#
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Configuration for htags(1)
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
htags:\
|
||||||
|
:body_begin=<body text='#191970' bgcolor='#f5f5dc' vlink='gray'>:body_end=</body>:\
|
||||||
|
:table_begin=<table>:table_end=</table>:\
|
||||||
|
:title_begin=<h1><font color='#cc0000'>:title_end=</font></h1>:\
|
||||||
|
:comment_begin=<i><font color='green'>:comment_end=</font></i>:\
|
||||||
|
:sharp_begin=<font color='darkred'>:sharp_end=</font>:\
|
||||||
|
:brace_begin=<font color='red'>:brace_end=</font>:\
|
||||||
|
:warned_line_begin=<span style='background-color\:yellow'>:warned_line_end=</span>:\
|
||||||
|
:reserved_begin=<b>:reserved_end=</b>:script_alias=/cgi-bin/:\
|
||||||
|
:ncol#4:tabs#8:normal_suffix=html:gzipped_suffix=ghtml:\
|
||||||
|
:definition_header=no:
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
@ -5,8 +5,8 @@ set -x
|
|||||||
# update OpenFOAM version strings if required
|
# update OpenFOAM version strings if required
|
||||||
wmakePrintBuild -check || /bin/rm -f OpenFOAM/Make/$WM_OPTIONS/global.? 2>/dev/null
|
wmakePrintBuild -check || /bin/rm -f OpenFOAM/Make/$WM_OPTIONS/global.? 2>/dev/null
|
||||||
|
|
||||||
wmakeLnInclude -f OpenFOAM
|
wmakeLnInclude -f OpenFOAM -sf
|
||||||
wmakeLnInclude -f OSspecific/$WM_OS
|
wmakeLnInclude -f OSspecific/$WM_OS -sf
|
||||||
Pstream/Allwmake
|
Pstream/Allwmake
|
||||||
|
|
||||||
wmake libo OSspecific/$WM_OS
|
wmake libo OSspecific/$WM_OS
|
||||||
|
|||||||
@ -60,7 +60,7 @@ void Foam::lduMatrix::Amul
|
|||||||
interfaceBouCoeffs,
|
interfaceBouCoeffs,
|
||||||
interfaces,
|
interfaces,
|
||||||
psi,
|
psi,
|
||||||
Apsi,
|
Apsi,
|
||||||
cmpt
|
cmpt
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ void Foam::lduMatrix::Amul
|
|||||||
|
|
||||||
register const label nFaces = upper().size();
|
register const label nFaces = upper().size();
|
||||||
#ifdef ICC_IA64_PREFETCH
|
#ifdef ICC_IA64_PREFETCH
|
||||||
#pragma swp
|
#pragma swp
|
||||||
#endif
|
#endif
|
||||||
for (register label face=0; face<nFaces; face++)
|
for (register label face=0; face<nFaces; face++)
|
||||||
{
|
{
|
||||||
@ -227,7 +227,7 @@ void Foam::lduMatrix::sumA
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ICC_IA64_PREFETCH
|
#ifdef ICC_IA64_PREFETCH
|
||||||
#pragma swp
|
#pragma swp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (register label face=0; face<nFaces; face++)
|
for (register label face=0; face<nFaces; face++)
|
||||||
@ -316,7 +316,7 @@ void Foam::lduMatrix::residual
|
|||||||
mBouCoeffs,
|
mBouCoeffs,
|
||||||
interfaces,
|
interfaces,
|
||||||
psi,
|
psi,
|
||||||
rA,
|
rA,
|
||||||
cmpt
|
cmpt
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -336,7 +336,7 @@ void Foam::lduMatrix::residual
|
|||||||
|
|
||||||
register const label nFaces = upper().size();
|
register const label nFaces = upper().size();
|
||||||
#ifdef ICC_IA64_PREFETCH
|
#ifdef ICC_IA64_PREFETCH
|
||||||
#pragma swp
|
#pragma swp
|
||||||
#endif
|
#endif
|
||||||
for (register label face=0; face<nFaces; face++)
|
for (register label face=0; face<nFaces; face++)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -29,6 +29,10 @@ License
|
|||||||
#include "volFields.H"
|
#include "volFields.H"
|
||||||
#include "surfaceFields.H"
|
#include "surfaceFields.H"
|
||||||
#include "fvMatrices.H"
|
#include "fvMatrices.H"
|
||||||
|
#include "PackedList.H"
|
||||||
|
#include "syncTools.H"
|
||||||
|
|
||||||
|
#include "faceSet.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -39,12 +43,15 @@ Foam::MRFZone::MRFZone(const fvMesh& mesh, Istream& is)
|
|||||||
dict_(is),
|
dict_(is),
|
||||||
cellZoneID_(mesh_.cellZones().findZoneID(name_)),
|
cellZoneID_(mesh_.cellZones().findZoneID(name_)),
|
||||||
faceZoneID_(mesh_.faceZones().findZoneID(name_)),
|
faceZoneID_(mesh_.faceZones().findZoneID(name_)),
|
||||||
|
outsideFaces_(0),
|
||||||
patchNames_(dict_.lookup("patches")),
|
patchNames_(dict_.lookup("patches")),
|
||||||
origin_(dict_.lookup("origin")),
|
origin_(dict_.lookup("origin")),
|
||||||
axis_(dict_.lookup("axis")),
|
axis_(dict_.lookup("axis")),
|
||||||
omega_(dict_.lookup("omega")),
|
omega_(dict_.lookup("omega")),
|
||||||
Omega_("Omega", omega_*axis_)
|
Omega_("Omega", omega_*axis_)
|
||||||
{
|
{
|
||||||
|
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
||||||
|
|
||||||
axis_ = axis_/mag(axis_);
|
axis_ = axis_/mag(axis_);
|
||||||
Omega_ = omega_*axis_;
|
Omega_ = omega_*axis_;
|
||||||
|
|
||||||
@ -65,18 +72,71 @@ Foam::MRFZone::MRFZone(const fvMesh& mesh, Istream& is)
|
|||||||
|
|
||||||
if (!faceZoneFound)
|
if (!faceZoneFound)
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
// Determine faces in cell zone
|
||||||
(
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
"Foam::MRFZone::MRFZone(const fvMesh& , const dictionary&)"
|
// (does not construct cells)
|
||||||
) << "cannot find MRF faceZone " << name_
|
|
||||||
<< exit(FatalError);
|
const labelList& own = mesh_.faceOwner();
|
||||||
|
const labelList& nei = mesh_.faceNeighbour();
|
||||||
|
|
||||||
|
// Cells in zone
|
||||||
|
PackedBoolList zoneCell(mesh_.nCells());
|
||||||
|
|
||||||
|
if (cellZoneID_ != -1)
|
||||||
|
{
|
||||||
|
const labelList& cellLabels = mesh_.cellZones()[cellZoneID_];
|
||||||
|
forAll(cellLabels, i)
|
||||||
|
{
|
||||||
|
zoneCell[cellLabels[i]] = 1u;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Faces in zone
|
||||||
|
PackedBoolList zoneFacesSet(mesh_.nFaces());
|
||||||
|
|
||||||
|
for (label faceI = 0; faceI < mesh_.nInternalFaces(); faceI++)
|
||||||
|
{
|
||||||
|
if
|
||||||
|
(
|
||||||
|
zoneCell.get(own[faceI]) == 1u
|
||||||
|
|| zoneCell.get(nei[faceI]) == 1u
|
||||||
|
)
|
||||||
|
{
|
||||||
|
zoneFacesSet[faceI] = 1u;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
syncTools::syncFaceList(mesh_, zoneFacesSet, orEqOp<unsigned int>());
|
||||||
|
|
||||||
|
|
||||||
|
// Transfer to labelList
|
||||||
|
label n = zoneFacesSet.count();
|
||||||
|
outsideFaces_.setSize(n);
|
||||||
|
n = 0;
|
||||||
|
forAll(zoneFacesSet, faceI)
|
||||||
|
{
|
||||||
|
if (zoneFacesSet.get(faceI) == 1u)
|
||||||
|
{
|
||||||
|
outsideFaces_[n++] = faceI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< nl
|
||||||
|
<< "MRFZone " << name_ << " : did not find a faceZone; using "
|
||||||
|
<< returnReduce(outsideFaces_.size(), sumOp<label>())
|
||||||
|
<< " faces internal to cellZone instead." << endl;
|
||||||
|
|
||||||
|
|
||||||
|
// Flag use of outsideFaces
|
||||||
|
faceZoneID_ = -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
patchLabels_.setSize(patchNames_.size());
|
patchLabels_.setSize(patchNames_.size());
|
||||||
|
|
||||||
forAll(patchNames_, i)
|
forAll(patchNames_, i)
|
||||||
{
|
{
|
||||||
patchLabels_[i] = mesh_.boundaryMesh().findPatchID(patchNames_[i]);
|
patchLabels_[i] = patches.findPatchID(patchNames_[i]);
|
||||||
|
|
||||||
if (patchLabels_[i] == -1)
|
if (patchLabels_[i] == -1)
|
||||||
{
|
{
|
||||||
@ -125,7 +185,13 @@ void Foam::MRFZone::relativeFlux(surfaceScalarField& phi) const
|
|||||||
const vector& origin = origin_.value();
|
const vector& origin = origin_.value();
|
||||||
const vector& Omega = Omega_.value();
|
const vector& Omega = Omega_.value();
|
||||||
|
|
||||||
const labelList& faces = mesh_.faceZones()[faceZoneID_];
|
// Use either zone faces or outsideFaces_
|
||||||
|
const labelList& faces =
|
||||||
|
(
|
||||||
|
faceZoneID_ == -2
|
||||||
|
? outsideFaces_
|
||||||
|
: mesh_.faceZones()[faceZoneID_]
|
||||||
|
);
|
||||||
|
|
||||||
forAll(faces, i)
|
forAll(faces, i)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -26,7 +26,7 @@ Class
|
|||||||
Foam::MRFZone
|
Foam::MRFZone
|
||||||
|
|
||||||
Description
|
Description
|
||||||
MRF zone definition based on both cell and face zones and parameters
|
MRF zone definition based on cell zone and optional face zone and parameters
|
||||||
obtained from a control dictionary constructed from the given stream.
|
obtained from a control dictionary constructed from the given stream.
|
||||||
|
|
||||||
The rotation of the MRF region is defined by an origin and axis of
|
The rotation of the MRF region is defined by an origin and axis of
|
||||||
@ -68,18 +68,26 @@ class MRFZone
|
|||||||
|
|
||||||
const fvMesh& mesh_;
|
const fvMesh& mesh_;
|
||||||
|
|
||||||
word name_;
|
const word name_;
|
||||||
|
|
||||||
dictionary dict_;
|
const dictionary dict_;
|
||||||
|
|
||||||
label cellZoneID_;
|
label cellZoneID_;
|
||||||
|
|
||||||
|
//- label of face zone with faces on outside of cell zone.
|
||||||
|
// If -2 determines outside faces itself
|
||||||
label faceZoneID_;
|
label faceZoneID_;
|
||||||
wordList patchNames_;
|
|
||||||
|
//- outside faces (only if faceZoneID = -2)
|
||||||
|
labelList outsideFaces_;
|
||||||
|
|
||||||
|
|
||||||
|
const wordList patchNames_;
|
||||||
labelList patchLabels_;
|
labelList patchLabels_;
|
||||||
|
|
||||||
dimensionedVector origin_;
|
const dimensionedVector origin_;
|
||||||
dimensionedVector axis_;
|
dimensionedVector axis_;
|
||||||
dimensionedScalar omega_;
|
const dimensionedScalar omega_;
|
||||||
dimensionedVector Omega_;
|
dimensionedVector Omega_;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -51,6 +51,12 @@ namespace Foam
|
|||||||
// Forward declaration of classes
|
// Forward declaration of classes
|
||||||
class polyPatch;
|
class polyPatch;
|
||||||
class polyMesh;
|
class polyMesh;
|
||||||
|
class wallPoint;
|
||||||
|
|
||||||
|
// Forward declaration of friend functions and operators
|
||||||
|
Ostream& operator<<(Ostream&, const wallPoint&);
|
||||||
|
Istream& operator>>(Istream&, wallPoint&);
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class wallPoint Declaration
|
Class wallPoint Declaration
|
||||||
@ -78,12 +84,15 @@ class wallPoint
|
|||||||
const scalar tol
|
const scalar tol
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Static data members
|
// Static data members
|
||||||
|
|
||||||
//- initial point far away.
|
//- initial point far away.
|
||||||
static point greatPoint;
|
static point greatPoint;
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct null
|
//- Construct null
|
||||||
@ -102,6 +111,7 @@ public:
|
|||||||
const wallPoint&
|
const wallPoint&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
// Access
|
// Access
|
||||||
@ -184,11 +194,11 @@ public:
|
|||||||
const scalar tol
|
const scalar tol
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Member Operators
|
// Member Operators
|
||||||
|
|
||||||
// Needed for List IO
|
// Needed for List IO
|
||||||
inline bool operator==(const wallPoint&) const;
|
inline bool operator==(const wallPoint&) const;
|
||||||
|
|
||||||
inline bool operator!=(const wallPoint&) const;
|
inline bool operator!=(const wallPoint&) const;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -76,10 +76,8 @@ bool Foam::distributedTriSurfaceMesh::read()
|
|||||||
// Distribution type
|
// Distribution type
|
||||||
distType_ = distributionTypeNames_.read(dict_.lookup("distributionType"));
|
distType_ = distributionTypeNames_.read(dict_.lookup("distributionType"));
|
||||||
|
|
||||||
if (dict_.found("mergeDistance"))
|
// Merge distance
|
||||||
{
|
mergeDist_ = readScalar(dict_.lookup("mergeDistance"));
|
||||||
dict_.lookup("mergeDistance") >> mergeDist_;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1341,12 +1339,44 @@ Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh
|
|||||||
dict_(io, dict)
|
dict_(io, dict)
|
||||||
{
|
{
|
||||||
read();
|
read();
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "Constructed from triSurface:" << endl;
|
||||||
|
writeStats(Info);
|
||||||
|
|
||||||
|
labelList nTris(Pstream::nProcs());
|
||||||
|
nTris[Pstream::myProcNo()] = triSurface::size();
|
||||||
|
Pstream::gatherList(nTris);
|
||||||
|
Pstream::scatterList(nTris);
|
||||||
|
|
||||||
|
Info<< endl<< "\tproc\ttris\tbb" << endl;
|
||||||
|
forAll(nTris, procI)
|
||||||
|
{
|
||||||
|
Info<< '\t' << procI << '\t' << nTris[procI]
|
||||||
|
<< '\t' << procBb_[procI] << endl;
|
||||||
|
}
|
||||||
|
Info<< endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh(const IOobject& io)
|
Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh(const IOobject& io)
|
||||||
:
|
:
|
||||||
triSurfaceMesh(io),
|
//triSurfaceMesh(io),
|
||||||
|
triSurfaceMesh
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
io.name(),
|
||||||
|
io.time().findInstance(io.local(), word::null),
|
||||||
|
io.local(),
|
||||||
|
io.db(),
|
||||||
|
io.readOpt(),
|
||||||
|
io.writeOpt(),
|
||||||
|
io.registerObject()
|
||||||
|
)
|
||||||
|
),
|
||||||
dict_
|
dict_
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
@ -1362,6 +1392,26 @@ Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh(const IOobject& io)
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
read();
|
read();
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "Read distributedTriSurface from " << io.objectPath()
|
||||||
|
<< ':' << endl;
|
||||||
|
writeStats(Info);
|
||||||
|
|
||||||
|
labelList nTris(Pstream::nProcs());
|
||||||
|
nTris[Pstream::myProcNo()] = triSurface::size();
|
||||||
|
Pstream::gatherList(nTris);
|
||||||
|
Pstream::scatterList(nTris);
|
||||||
|
|
||||||
|
Info<< endl<< "\tproc\ttris\tbb" << endl;
|
||||||
|
forAll(nTris, procI)
|
||||||
|
{
|
||||||
|
Info<< '\t' << procI << '\t' << nTris[procI]
|
||||||
|
<< '\t' << procBb_[procI] << endl;
|
||||||
|
}
|
||||||
|
Info<< endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1371,7 +1421,21 @@ Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh
|
|||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
triSurfaceMesh(io, dict),
|
//triSurfaceMesh(io, dict),
|
||||||
|
triSurfaceMesh
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
io.name(),
|
||||||
|
io.time().findInstance(io.local(), word::null),
|
||||||
|
io.local(),
|
||||||
|
io.db(),
|
||||||
|
io.readOpt(),
|
||||||
|
io.writeOpt(),
|
||||||
|
io.registerObject()
|
||||||
|
),
|
||||||
|
dict
|
||||||
|
),
|
||||||
dict_
|
dict_
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
@ -1387,6 +1451,26 @@ Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
read();
|
read();
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "Read distributedTriSurface from " << io.objectPath()
|
||||||
|
<< " and dictionary:" << endl;
|
||||||
|
writeStats(Info);
|
||||||
|
|
||||||
|
labelList nTris(Pstream::nProcs());
|
||||||
|
nTris[Pstream::myProcNo()] = triSurface::size();
|
||||||
|
Pstream::gatherList(nTris);
|
||||||
|
Pstream::scatterList(nTris);
|
||||||
|
|
||||||
|
Info<< endl<< "\tproc\ttris\tbb" << endl;
|
||||||
|
forAll(nTris, procI)
|
||||||
|
{
|
||||||
|
Info<< '\t' << procI << '\t' << nTris[procI]
|
||||||
|
<< '\t' << procBb_[procI] << endl;
|
||||||
|
}
|
||||||
|
Info<< endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2389,6 +2473,8 @@ void Foam::distributedTriSurfaceMesh::writeStats(Ostream& os) const
|
|||||||
boundBox bb;
|
boundBox bb;
|
||||||
label nPoints;
|
label nPoints;
|
||||||
calcBounds(bb, nPoints);
|
calcBounds(bb, nPoints);
|
||||||
|
reduce(bb.min(), minOp<point>());
|
||||||
|
reduce(bb.max(), maxOp<point>());
|
||||||
|
|
||||||
os << "Triangles : " << returnReduce(triSurface::size(), sumOp<label>())
|
os << "Triangles : " << returnReduce(triSurface::size(), sumOp<label>())
|
||||||
<< endl
|
<< endl
|
||||||
|
|||||||
@ -91,15 +91,14 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
// Private member data
|
||||||
|
|
||||||
//- Merging distance
|
//- Merging distance
|
||||||
scalar mergeDist_;
|
scalar mergeDist_;
|
||||||
|
|
||||||
//- Decomposition used when independently decomposing surface.
|
//- Decomposition used when independently decomposing surface.
|
||||||
autoPtr<decompositionMethod> decomposer_;
|
autoPtr<decompositionMethod> decomposer_;
|
||||||
|
|
||||||
|
|
||||||
// Private member data
|
|
||||||
|
|
||||||
//- Bounding box settings
|
//- Bounding box settings
|
||||||
IOdictionary dict_;
|
IOdictionary dict_;
|
||||||
|
|
||||||
@ -317,10 +316,11 @@ public:
|
|||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct read
|
//- Construct read. Does findInstance to find io.local().
|
||||||
distributedTriSurfaceMesh(const IOobject& io);
|
distributedTriSurfaceMesh(const IOobject& io);
|
||||||
|
|
||||||
//- Construct from dictionary (used by searchableSurface)
|
//- Construct from dictionary (used by searchableSurface).
|
||||||
|
// Does read. Does findInstance to find io.local().
|
||||||
distributedTriSurfaceMesh
|
distributedTriSurfaceMesh
|
||||||
(
|
(
|
||||||
const IOobject& io,
|
const IOobject& io,
|
||||||
|
|||||||
@ -53,7 +53,14 @@ Foam::pointIndexHit Foam::searchableSphere::findNearest
|
|||||||
|
|
||||||
if (nearestDistSqr > sqr(magN-radius_))
|
if (nearestDistSqr > sqr(magN-radius_))
|
||||||
{
|
{
|
||||||
info.rawPoint() = centre_ + n/magN*radius_;
|
if (magN < ROOTVSMALL)
|
||||||
|
{
|
||||||
|
info.rawPoint() = centre_ + vector(1,0,0)/magN*radius_;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
info.rawPoint() = centre_ + n/magN*radius_;
|
||||||
|
}
|
||||||
info.setHit();
|
info.setHit();
|
||||||
info.setIndex(0);
|
info.setIndex(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,43 +59,44 @@ void Foam::searchableSurfaceCollection::findNearest
|
|||||||
|
|
||||||
List<pointIndexHit> hitInfo(samples.size());
|
List<pointIndexHit> hitInfo(samples.size());
|
||||||
|
|
||||||
|
const scalarField localMinDistSqr(samples.size(), GREAT);
|
||||||
|
|
||||||
forAll(subGeom_, surfI)
|
forAll(subGeom_, surfI)
|
||||||
{
|
{
|
||||||
// Transform then divide
|
// Transform then divide
|
||||||
tmp<pointField> localSamples = cmptDivide
|
tmp<pointField> localSamples = cmptDivide
|
||||||
(
|
(
|
||||||
transform_[surfI].localPosition
|
transform_[surfI].localPosition(samples),
|
||||||
(
|
|
||||||
samples
|
|
||||||
),
|
|
||||||
scale_[surfI]
|
scale_[surfI]
|
||||||
);
|
);
|
||||||
|
|
||||||
subGeom_[surfI].findNearest(localSamples, minDistSqr, hitInfo);
|
subGeom_[surfI].findNearest(localSamples, localMinDistSqr, hitInfo);
|
||||||
|
|
||||||
forAll(hitInfo, pointI)
|
forAll(hitInfo, pointI)
|
||||||
{
|
{
|
||||||
if (hitInfo[pointI].hit())
|
if (hitInfo[pointI].hit())
|
||||||
{
|
{
|
||||||
minDistSqr[pointI] = magSqr
|
|
||||||
(
|
|
||||||
hitInfo[pointI].hitPoint()
|
|
||||||
- localSamples()[pointI]
|
|
||||||
);
|
|
||||||
|
|
||||||
// Rework back into global coordinate sys. Multiply then
|
// Rework back into global coordinate sys. Multiply then
|
||||||
// transform
|
// transform
|
||||||
nearestInfo[pointI] = hitInfo[pointI];
|
point globalPt = transform_[surfI].globalPosition
|
||||||
nearestInfo[pointI].rawPoint() =
|
(
|
||||||
transform_[surfI].globalPosition
|
cmptMultiply
|
||||||
(
|
(
|
||||||
cmptMultiply
|
hitInfo[pointI].rawPoint(),
|
||||||
(
|
scale_[surfI]
|
||||||
nearestInfo[pointI].rawPoint(),
|
)
|
||||||
scale_[surfI]
|
);
|
||||||
)
|
|
||||||
);
|
scalar distSqr = magSqr(globalPt - samples[pointI]);
|
||||||
nearestSurf[pointI] = surfI;
|
|
||||||
|
if (distSqr < minDistSqr[pointI])
|
||||||
|
{
|
||||||
|
minDistSqr[pointI] = distSqr;
|
||||||
|
nearestInfo[pointI].setPoint(globalPt);
|
||||||
|
nearestInfo[pointI].setHit();
|
||||||
|
nearestInfo[pointI].setIndex(hitInfo[pointI].index());
|
||||||
|
nearestSurf[pointI] = surfI;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -228,19 +228,19 @@ Foam::triSurfaceMesh::triSurfaceMesh(const IOobject& io, const triSurface& s)
|
|||||||
Foam::triSurfaceMesh::triSurfaceMesh(const IOobject& io)
|
Foam::triSurfaceMesh::triSurfaceMesh(const IOobject& io)
|
||||||
:
|
:
|
||||||
// Find instance for triSurfaceMesh
|
// Find instance for triSurfaceMesh
|
||||||
searchableSurface
|
searchableSurface(io),
|
||||||
(
|
//(
|
||||||
IOobject
|
// IOobject
|
||||||
(
|
// (
|
||||||
io.name(),
|
// io.name(),
|
||||||
io.time().findInstance(io.local(), word::null),
|
// io.time().findInstance(io.local(), word::null),
|
||||||
io.local(),
|
// io.local(),
|
||||||
io.db(),
|
// io.db(),
|
||||||
io.readOpt(),
|
// io.readOpt(),
|
||||||
io.writeOpt(),
|
// io.writeOpt(),
|
||||||
io.registerObject()
|
// io.registerObject()
|
||||||
)
|
// )
|
||||||
),
|
//),
|
||||||
// Reused found instance in objectRegistry
|
// Reused found instance in objectRegistry
|
||||||
objectRegistry
|
objectRegistry
|
||||||
(
|
(
|
||||||
@ -273,19 +273,19 @@ Foam::triSurfaceMesh::triSurfaceMesh
|
|||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
searchableSurface
|
searchableSurface(io),
|
||||||
(
|
//(
|
||||||
IOobject
|
// IOobject
|
||||||
(
|
// (
|
||||||
io.name(),
|
// io.name(),
|
||||||
io.time().findInstance(io.local(), word::null),
|
// io.time().findInstance(io.local(), word::null),
|
||||||
io.local(),
|
// io.local(),
|
||||||
io.db(),
|
// io.db(),
|
||||||
io.readOpt(),
|
// io.readOpt(),
|
||||||
io.writeOpt(),
|
// io.writeOpt(),
|
||||||
io.registerObject()
|
// io.registerObject()
|
||||||
)
|
// )
|
||||||
),
|
//),
|
||||||
// Reused found instance in objectRegistry
|
// Reused found instance in objectRegistry
|
||||||
objectRegistry
|
objectRegistry
|
||||||
(
|
(
|
||||||
|
|||||||
@ -113,11 +113,10 @@ public:
|
|||||||
//- Construct from triSurface
|
//- Construct from triSurface
|
||||||
triSurfaceMesh(const IOobject&, const triSurface&);
|
triSurfaceMesh(const IOobject&, const triSurface&);
|
||||||
|
|
||||||
//- Construct read. Does timeInstance search.
|
//- Construct read.
|
||||||
triSurfaceMesh(const IOobject& io);
|
triSurfaceMesh(const IOobject& io);
|
||||||
|
|
||||||
//- Construct from IO and dictionary (used by searchableSurface).
|
//- Construct from IO and dictionary (used by searchableSurface).
|
||||||
// Does timeInstance search.
|
|
||||||
// Dictionary may contain a 'scale' entry (eg, 0.001: mm -> m)
|
// Dictionary may contain a 'scale' entry (eg, 0.001: mm -> m)
|
||||||
triSurfaceMesh
|
triSurfaceMesh
|
||||||
(
|
(
|
||||||
|
|||||||
@ -199,81 +199,47 @@ void Foam::isoSurface::calcCutTypes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
forAll(patches, patchI)
|
forAll(patches, patchI)
|
||||||
{
|
{
|
||||||
const polyPatch& pp = patches[patchI];
|
const polyPatch& pp = patches[patchI];
|
||||||
|
|
||||||
label faceI = pp.start();
|
label faceI = pp.start();
|
||||||
|
|
||||||
if (isA<emptyPolyPatch>(pp))
|
forAll(pp, i)
|
||||||
{
|
{
|
||||||
// Still needs special treatment?
|
bool ownLower = (cVals[own[faceI]] < iso_);
|
||||||
|
|
||||||
forAll(pp, i)
|
scalar nbrValue;
|
||||||
|
point nbrPoint;
|
||||||
|
getNeighbour
|
||||||
|
(
|
||||||
|
boundaryRegion,
|
||||||
|
cVals,
|
||||||
|
own[faceI],
|
||||||
|
faceI,
|
||||||
|
nbrValue,
|
||||||
|
nbrPoint
|
||||||
|
);
|
||||||
|
|
||||||
|
bool neiLower = (nbrValue < iso_);
|
||||||
|
|
||||||
|
if (ownLower != neiLower)
|
||||||
{
|
{
|
||||||
bool ownLower = (cVals[own[faceI]] < iso_);
|
faceCutType_[faceI] = CUT;
|
||||||
|
}
|
||||||
scalar nbrValue;
|
else
|
||||||
point nbrPoint;
|
{
|
||||||
getNeighbour
|
// Mesh edge.
|
||||||
(
|
|
||||||
boundaryRegion,
|
|
||||||
cVals,
|
|
||||||
own[faceI],
|
|
||||||
faceI,
|
|
||||||
nbrValue,
|
|
||||||
nbrPoint
|
|
||||||
);
|
|
||||||
|
|
||||||
bool neiLower = (nbrValue < iso_);
|
|
||||||
|
|
||||||
const face f = mesh_.faces()[faceI];
|
const face f = mesh_.faces()[faceI];
|
||||||
|
|
||||||
if (isEdgeOfFaceCut(pVals, f, ownLower, neiLower))
|
if (isEdgeOfFaceCut(pVals, f, ownLower, neiLower))
|
||||||
{
|
{
|
||||||
faceCutType_[faceI] = CUT;
|
faceCutType_[faceI] = CUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
faceI++;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
forAll(pp, i)
|
|
||||||
{
|
|
||||||
bool ownLower = (cVals[own[faceI]] < iso_);
|
|
||||||
|
|
||||||
scalar nbrValue;
|
faceI++;
|
||||||
point nbrPoint;
|
|
||||||
getNeighbour
|
|
||||||
(
|
|
||||||
boundaryRegion,
|
|
||||||
cVals,
|
|
||||||
own[faceI],
|
|
||||||
faceI,
|
|
||||||
nbrValue,
|
|
||||||
nbrPoint
|
|
||||||
);
|
|
||||||
|
|
||||||
bool neiLower = (nbrValue < iso_);
|
|
||||||
|
|
||||||
if (ownLower != neiLower)
|
|
||||||
{
|
|
||||||
faceCutType_[faceI] = CUT;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Mesh edge.
|
|
||||||
const face f = mesh_.faces()[faceI];
|
|
||||||
|
|
||||||
if (isEdgeOfFaceCut(pVals, f, ownLower, neiLower))
|
|
||||||
{
|
|
||||||
faceCutType_[faceI] = CUT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
faceI++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1589,26 +1555,6 @@ Foam::isoSurface::isoSurface
|
|||||||
|
|
||||||
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
||||||
|
|
||||||
// Check
|
|
||||||
forAll(patches, patchI)
|
|
||||||
{
|
|
||||||
if (isA<emptyPolyPatch>(patches[patchI]))
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"isoSurface::isoSurface\n"
|
|
||||||
"(\n"
|
|
||||||
" const volScalarField& cVals,\n"
|
|
||||||
" const scalarField& pVals,\n"
|
|
||||||
" const scalar iso,\n"
|
|
||||||
" const bool regularise,\n"
|
|
||||||
" const scalar mergeTol\n"
|
|
||||||
")\n"
|
|
||||||
) << "Iso surfaces not supported on case with empty patches."
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pre-calculate patch-per-face to avoid whichPatch call.
|
// Pre-calculate patch-per-face to avoid whichPatch call.
|
||||||
labelList boundaryRegion(mesh_.nFaces()-mesh_.nInternalFaces());
|
labelList boundaryRegion(mesh_.nFaces()-mesh_.nInternalFaces());
|
||||||
|
|
||||||
@ -1724,7 +1670,7 @@ Foam::isoSurface::isoSurface
|
|||||||
|
|
||||||
|
|
||||||
// Generate field to interpolate. This is identical to the mesh.C()
|
// Generate field to interpolate. This is identical to the mesh.C()
|
||||||
// except on separated coupled patches.
|
// except on separated coupled patches and on empty patches.
|
||||||
slicedVolVectorField meshC
|
slicedVolVectorField meshC
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
@ -1746,10 +1692,12 @@ Foam::isoSurface::isoSurface
|
|||||||
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
||||||
forAll(patches, patchI)
|
forAll(patches, patchI)
|
||||||
{
|
{
|
||||||
|
const polyPatch& pp = patches[patchI];
|
||||||
|
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
patches[patchI].coupled()
|
pp.coupled()
|
||||||
&& refCast<const coupledPolyPatch>(patches[patchI]).separated()
|
&& refCast<const coupledPolyPatch>(pp).separated()
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
fvPatchVectorField& pfld = const_cast<fvPatchVectorField&>
|
fvPatchVectorField& pfld = const_cast<fvPatchVectorField&>
|
||||||
@ -1758,9 +1706,32 @@ Foam::isoSurface::isoSurface
|
|||||||
);
|
);
|
||||||
pfld.operator==
|
pfld.operator==
|
||||||
(
|
(
|
||||||
patches[patchI].patchSlice(mesh_.faceCentres())
|
pp.patchSlice(mesh_.faceCentres())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
else if (isA<emptyPolyPatch>(pp))
|
||||||
|
{
|
||||||
|
typedef slicedVolVectorField::GeometricBoundaryField bType;
|
||||||
|
|
||||||
|
bType& bfld = const_cast<bType&>(meshC.boundaryField());
|
||||||
|
|
||||||
|
// Clear old value. Cannot resize it since slice.
|
||||||
|
bfld.set(patchI, NULL);
|
||||||
|
|
||||||
|
// Set new value we can change
|
||||||
|
bfld.set
|
||||||
|
(
|
||||||
|
patchI,
|
||||||
|
new calculatedFvPatchField<vector>
|
||||||
|
(
|
||||||
|
mesh_.boundary()[patchI],
|
||||||
|
meshC
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Change to face centres
|
||||||
|
bfld[patchI] = pp.patchSlice(mesh_.faceCentres());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1885,6 +1856,14 @@ Foam::isoSurface::isoSurface
|
|||||||
|
|
||||||
orientSurface(*this, faceEdges, edgeFace0, edgeFace1, edgeFacesRest);
|
orientSurface(*this, faceEdges, edgeFace0, edgeFace1, edgeFacesRest);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
fileName stlFile = mesh_.time().path() + ".stl";
|
||||||
|
Pout<< "Dumping surface to " << stlFile << endl;
|
||||||
|
triSurface::write(stlFile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -31,9 +31,6 @@ Description
|
|||||||
G.M. Treece, R.W. Prager and A.H. Gee.
|
G.M. Treece, R.W. Prager and A.H. Gee.
|
||||||
|
|
||||||
Note:
|
Note:
|
||||||
- not possible on patches of type 'empty'. There are no values on
|
|
||||||
'empty' patch fields so even the api would have to change
|
|
||||||
(no volScalarField as argument). Too messy.
|
|
||||||
- in parallel the regularisation (coarsening) always takes place
|
- in parallel the regularisation (coarsening) always takes place
|
||||||
and slightly different surfaces will be created compared to non-parallel.
|
and slightly different surfaces will be created compared to non-parallel.
|
||||||
The surface will still be continuous though!
|
The surface will still be continuous though!
|
||||||
@ -43,6 +40,7 @@ Description
|
|||||||
- uses geometric merge with fraction of bounding box as distance.
|
- uses geometric merge with fraction of bounding box as distance.
|
||||||
- triangles can be between two cell centres so constant sampling
|
- triangles can be between two cell centres so constant sampling
|
||||||
does not make sense.
|
does not make sense.
|
||||||
|
- on empty patches behaves like zero gradient.
|
||||||
- does not do 2D correctly, creates non-flat iso surface.
|
- does not do 2D correctly, creates non-flat iso surface.
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
|
|||||||
@ -514,9 +514,53 @@ void Foam::isoSurface::generateTriPoints
|
|||||||
}
|
}
|
||||||
else if (isA<emptyPolyPatch>(pp))
|
else if (isA<emptyPolyPatch>(pp))
|
||||||
{
|
{
|
||||||
// Assume zero-gradient. But what about coordinates?
|
// Check if field is there (when generating geometry the
|
||||||
|
// empty patches have been rewritten to be the face centres),
|
||||||
|
// otherwise use zero-gradient.
|
||||||
|
|
||||||
label faceI = pp.start();
|
label faceI = pp.start();
|
||||||
|
|
||||||
|
|
||||||
|
const fvPatchScalarField& fvp = cVals.boundaryField()[patchI];
|
||||||
|
|
||||||
|
// Owner value of cVals
|
||||||
|
scalarField internalVals;
|
||||||
|
if (fvp.size() == 0)
|
||||||
|
{
|
||||||
|
internalVals.setSize(pp.size());
|
||||||
|
forAll(pp, i)
|
||||||
|
{
|
||||||
|
internalVals[i] = cVals[own[pp.start()+i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const scalarField& bVals =
|
||||||
|
(
|
||||||
|
fvp.size() > 0
|
||||||
|
? static_cast<const scalarField&>(fvp)
|
||||||
|
: internalVals
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
const fvPatchField<Type>& pc = cCoords.boundaryField()[patchI];
|
||||||
|
|
||||||
|
// Owner value of cCoords
|
||||||
|
Field<Type> internalCoords;
|
||||||
|
if (pc.size() == 0)
|
||||||
|
{
|
||||||
|
internalCoords.setSize(pp.size());
|
||||||
|
forAll(pp, i)
|
||||||
|
{
|
||||||
|
internalCoords[i] = cCoords[own[pp.start()+i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const Field<Type>& bCoords =
|
||||||
|
(
|
||||||
|
pc.size() > 0
|
||||||
|
? static_cast<const Field<Type>&>(pc)
|
||||||
|
: internalCoords
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
forAll(pp, i)
|
forAll(pp, i)
|
||||||
{
|
{
|
||||||
if (faceCutType_[faceI] != NOTCUT)
|
if (faceCutType_[faceI] != NOTCUT)
|
||||||
@ -534,8 +578,8 @@ void Foam::isoSurface::generateTriPoints
|
|||||||
snappedPoint,
|
snappedPoint,
|
||||||
faceI,
|
faceI,
|
||||||
|
|
||||||
cVals[own[faceI]],
|
bVals[i],
|
||||||
cCoords.boundaryField()[patchI][i],
|
bCoords[i],
|
||||||
false, // fc not snapped
|
false, // fc not snapped
|
||||||
pTraits<Type>::zero,
|
pTraits<Type>::zero,
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
cd ${0%/*} || exit 1 # run from this directory
|
cd ${0%/*} || exit 1 # run from this directory
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
wmakeLnInclude -f ../incompressible/LES
|
wmakeLnInclude -f ../incompressible/LES -sf
|
||||||
|
|
||||||
wmake libso LESfilters
|
wmake libso LESfilters
|
||||||
wmake libso LESdeltas
|
wmake libso LESdeltas
|
||||||
|
|||||||
@ -32,8 +32,8 @@ Description
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "fvCFD.H"
|
#include "fvCFD.H"
|
||||||
#include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H"
|
#include "singlePhaseTransportModel.H"
|
||||||
#include "incompressible/RASModel/RASModel.H"
|
#include "RASModel.H"
|
||||||
#include "MRFZones.H"
|
#include "MRFZones.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/turbulenceModels \
|
||||||
-I$(LIB_SRC)/turbulenceModels/RAS \
|
-I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \
|
||||||
-I$(LIB_SRC)/transportModels
|
-I$(LIB_SRC)/transportModels \
|
||||||
|
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
|
||||||
|
-I$(LIB_SRC)/finiteVolume/lnInclude
|
||||||
|
|
||||||
EXE_LIBS = \
|
EXE_LIBS = \
|
||||||
-lincompressibleRASModels \
|
-lincompressibleRASModels \
|
||||||
|
|||||||
@ -3,8 +3,9 @@
|
|||||||
m4 < constant/polyMesh/blockMeshDict.m4 > constant/polyMesh/blockMeshDict
|
m4 < constant/polyMesh/blockMeshDict.m4 > constant/polyMesh/blockMeshDict
|
||||||
blockMesh
|
blockMesh
|
||||||
cellSet
|
cellSet
|
||||||
cp system/faceSetDict_rotorFaces system/faceSetDict
|
#- MRF determines its own faceZone if not supplied
|
||||||
faceSet
|
#cp system/faceSetDict_rotorFaces system/faceSetDict
|
||||||
cp system/faceSetDict_noBoundaryFaces system/faceSetDict
|
#faceSet
|
||||||
faceSet
|
#cp system/faceSetDict_noBoundaryFaces system/faceSetDict
|
||||||
|
#faceSet
|
||||||
setsToZones -noFlipMap
|
setsToZones -noFlipMap
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
| ========= | |
|
| ========= | |
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
| \\ / O peration | Version: 1.5 |
|
| \\ / O peration | Version: 1.5 |
|
||||||
| \\ / A nd | Web: www.OpenFOAM.org |
|
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||||
| \\/ M anipulation | |
|
| \\/ M anipulation | |
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
FoamFile
|
FoamFile
|
||||||
@ -10,9 +10,9 @@ FoamFile
|
|||||||
version 2.0;
|
version 2.0;
|
||||||
format ascii;
|
format ascii;
|
||||||
class dictionary;
|
class dictionary;
|
||||||
location "system";
|
object autoHexMeshDict;
|
||||||
object snappyHexMeshDict;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
// Which of the steps to run
|
// Which of the steps to run
|
||||||
@ -29,27 +29,78 @@ addLayers true;
|
|||||||
// - to 'snap' the mesh boundary to the surface
|
// - to 'snap' the mesh boundary to the surface
|
||||||
geometry
|
geometry
|
||||||
{
|
{
|
||||||
fridgeA
|
|
||||||
{
|
|
||||||
type searchableBox;
|
|
||||||
min ( 2 2 0 );
|
|
||||||
max ( 3 3 2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
fridgeB
|
|
||||||
{
|
|
||||||
type searchableBox;
|
|
||||||
min ( 3.5 3 0 );
|
|
||||||
max ( 4.3 3.8 1.8 );
|
|
||||||
}
|
|
||||||
|
|
||||||
igloo
|
igloo
|
||||||
{
|
{
|
||||||
type searchableSphere;
|
type searchableSphere;
|
||||||
centre ( 3 3 0 );
|
centre (3 3 0);
|
||||||
radius 4;
|
radius 4;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
box1
|
||||||
|
{
|
||||||
|
type searchableBox;
|
||||||
|
min (0 0 0);
|
||||||
|
max (1 1 1);
|
||||||
|
}
|
||||||
|
fridgeFreezer
|
||||||
|
{
|
||||||
|
type searchableSurfaceCollection;
|
||||||
|
|
||||||
|
freezer
|
||||||
|
{
|
||||||
|
surface box1;
|
||||||
|
scale (1 1 1);
|
||||||
|
transform
|
||||||
|
{
|
||||||
|
type cartesian;
|
||||||
|
origin (0 0 0);
|
||||||
|
e1 (1 0 0);
|
||||||
|
e3 (0 0 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fridge
|
||||||
|
{
|
||||||
|
surface box1;
|
||||||
|
scale (1 1 1.1);
|
||||||
|
transform
|
||||||
|
{
|
||||||
|
type cartesian;
|
||||||
|
origin (0 0 1);
|
||||||
|
e1 (1 0 0);
|
||||||
|
e3 (0 0 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
twoFridgeFreezers
|
||||||
|
{
|
||||||
|
type searchableSurfaceCollection;
|
||||||
|
|
||||||
|
seal
|
||||||
|
{
|
||||||
|
surface fridgeFreezer;
|
||||||
|
scale (1.0 1.0 1.0);
|
||||||
|
transform
|
||||||
|
{
|
||||||
|
type cartesian;
|
||||||
|
origin (2 2 0);
|
||||||
|
e1 (1 0 0);
|
||||||
|
e3 (0 0 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
herring
|
||||||
|
{
|
||||||
|
surface fridgeFreezer;
|
||||||
|
scale (1.0 1.0 1.0);
|
||||||
|
transform
|
||||||
|
{
|
||||||
|
type cartesian;
|
||||||
|
origin (3.5 3 0);
|
||||||
|
e1 (1 0 0);
|
||||||
|
e3 (0 0 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -63,20 +114,20 @@ castellatedMeshControls
|
|||||||
// While refining maximum number of cells per processor. This is basically
|
// While refining maximum number of cells per processor. This is basically
|
||||||
// the number of cells that fit on a processor. If you choose this too small
|
// the number of cells that fit on a processor. If you choose this too small
|
||||||
// it will do just more refinement iterations to obtain a similar mesh.
|
// it will do just more refinement iterations to obtain a similar mesh.
|
||||||
maxLocalCells 1000000;
|
maxLocalCells 1000000;
|
||||||
|
|
||||||
// Overall cell limit (approximately). Refinement will stop immediately
|
// Overall cell limit (approximately). Refinement will stop immediately
|
||||||
// upon reaching this number so a refinement level might not complete.
|
// upon reaching this number so a refinement level might not complete.
|
||||||
// Note that this is the number of cells before removing the part which
|
// Note that this is the number of cells before removing the part which
|
||||||
// is not 'visible' from the keepPoint. The final number of cells might
|
// is not 'visible' from the keepPoint. The final number of cells might
|
||||||
// actually be a lot less.
|
// actually be a lot less.
|
||||||
maxGlobalCells 2000000;
|
maxGlobalCells 2000000;
|
||||||
|
|
||||||
// The surface refinement loop might spend lots of iterations refining just a
|
// The surface refinement loop might spend lots of iterations refining just a
|
||||||
// few cells. This setting will cause refinement to stop if <= minimumRefine
|
// few cells. This setting will cause refinement to stop if <= minimumRefine
|
||||||
// are selected for refinement. Note: it will at least do one iteration
|
// are selected for refinement. Note: it will at least do one iteration
|
||||||
// (unless the number of cells to refine is 0)
|
// (unless the number of cells to refine is 0)
|
||||||
minRefinementCells 0;
|
minRefinementCells 100;
|
||||||
|
|
||||||
// Number of buffer layers between different levels.
|
// Number of buffer layers between different levels.
|
||||||
// 1 means normal 2:1 refinement restriction, larger means slower
|
// 1 means normal 2:1 refinement restriction, larger means slower
|
||||||
@ -92,10 +143,10 @@ castellatedMeshControls
|
|||||||
// This is a featureEdgeMesh, read from constant/triSurface for now.
|
// This is a featureEdgeMesh, read from constant/triSurface for now.
|
||||||
features
|
features
|
||||||
(
|
(
|
||||||
//{
|
// {
|
||||||
// file "someLine.eMesh";
|
// file "fridgeA.eMesh";
|
||||||
// level 2;
|
// level 3;
|
||||||
//}
|
// }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -108,27 +159,35 @@ castellatedMeshControls
|
|||||||
// The second level is the maximum level. Cells that 'see' multiple
|
// The second level is the maximum level. Cells that 'see' multiple
|
||||||
// intersections where the intersections make an
|
// intersections where the intersections make an
|
||||||
// angle > resolveFeatureAngle get refined up to the maximum level.
|
// angle > resolveFeatureAngle get refined up to the maximum level.
|
||||||
|
|
||||||
refinementSurfaces
|
refinementSurfaces
|
||||||
{
|
{
|
||||||
fridgeA
|
twoFridgeFreezers
|
||||||
{
|
{
|
||||||
// Surface-wise min and max refinement level
|
// Surface-wise min and max refinement level
|
||||||
level ( 2 2 );
|
level (2 2);
|
||||||
|
|
||||||
|
regions
|
||||||
|
{
|
||||||
|
// Region-wise override
|
||||||
|
"cook.*"
|
||||||
|
{
|
||||||
|
level (3 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fridgeB
|
"iglo.*"
|
||||||
{
|
{
|
||||||
level ( 2 2 );
|
// Surface-wise min and max refinement level
|
||||||
}
|
level (1 1);
|
||||||
|
|
||||||
igloo
|
|
||||||
{
|
|
||||||
level ( 1 1 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Resolve sharp angles on fridges
|
||||||
resolveFeatureAngle 60;
|
resolveFeatureAngle 60;
|
||||||
|
|
||||||
|
|
||||||
// Region-wise refinement
|
// Region-wise refinement
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~
|
// ~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@ -155,7 +214,7 @@ castellatedMeshControls
|
|||||||
// section reachable from the locationInMesh is kept.
|
// section reachable from the locationInMesh is kept.
|
||||||
// NOTE: This point should never be on a face, always inside a cell, even
|
// NOTE: This point should never be on a face, always inside a cell, even
|
||||||
// after refinement.
|
// after refinement.
|
||||||
locationInMesh ( 3 0.28 0.43 );
|
locationInMesh (3 0.28 0.43);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -165,19 +224,19 @@ snapControls
|
|||||||
{
|
{
|
||||||
//- Number of patch smoothing iterations before finding correspondence
|
//- Number of patch smoothing iterations before finding correspondence
|
||||||
// to surface
|
// to surface
|
||||||
nSmoothPatch 3;
|
nSmoothPatch 3;
|
||||||
|
|
||||||
//- Relative distance for points to be attracted by surface feature point
|
//- Relative distance for points to be attracted by surface feature point
|
||||||
// or edge. True distance is this factor times local
|
// or edge. True distance is this factor times local
|
||||||
// maximum edge length.
|
// maximum edge length.
|
||||||
tolerance 4;
|
tolerance 4.0;
|
||||||
|
|
||||||
//- Number of mesh displacement relaxation iterations.
|
//- Number of mesh displacement relaxation iterations.
|
||||||
nSolveIter 30;
|
nSolveIter 30;
|
||||||
|
|
||||||
//- Maximum number of snapping relaxation iterations. Should stop
|
//- Maximum number of snapping relaxation iterations. Should stop
|
||||||
// before upon reaching a correct mesh.
|
// before upon reaching a correct mesh.
|
||||||
nRelaxIter 5;
|
nRelaxIter 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -188,25 +247,18 @@ addLayersControls
|
|||||||
// Per final patch (so not geometry!) the layer information
|
// Per final patch (so not geometry!) the layer information
|
||||||
layers
|
layers
|
||||||
{
|
{
|
||||||
fridgeA_region0
|
"two.*"
|
||||||
{
|
{
|
||||||
nSurfaceLayers 1;
|
nSurfaceLayers 3;
|
||||||
}
|
}
|
||||||
|
"igloo_.*"
|
||||||
fridgeB_region0
|
|
||||||
{
|
{
|
||||||
nSurfaceLayers 1;
|
nSurfaceLayers 1;
|
||||||
}
|
|
||||||
|
|
||||||
igloo_region0
|
|
||||||
{
|
|
||||||
nSurfaceLayers 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Expansion factor for layer mesh
|
// Expansion factor for layer mesh
|
||||||
expansionRatio 1;
|
expansionRatio 1.0;
|
||||||
|
|
||||||
//- Wanted thickness of final added cell layer. If multiple layers
|
//- Wanted thickness of final added cell layer. If multiple layers
|
||||||
// is the
|
// is the
|
||||||
@ -217,29 +269,29 @@ addLayersControls
|
|||||||
//- Minimum thickness of cell layer. If for any reason layer
|
//- Minimum thickness of cell layer. If for any reason layer
|
||||||
// cannot be above minThickness do not add layer.
|
// cannot be above minThickness do not add layer.
|
||||||
// Relative to undistorted size of cell outside layer.
|
// Relative to undistorted size of cell outside layer.
|
||||||
minThickness 0.25;
|
minThickness 0.25;
|
||||||
|
|
||||||
//- If points get not extruded do nGrow layers of connected faces that are
|
//- If points get not extruded do nGrow layers of connected faces that are
|
||||||
// also not grown. This helps convergence of the layer addition process
|
// also not grown. This helps convergence of the layer addition process
|
||||||
// close to features.
|
// close to features.
|
||||||
nGrow 0;
|
nGrow 0;
|
||||||
|
|
||||||
|
|
||||||
// Advanced settings
|
// Advanced settings
|
||||||
|
|
||||||
//- When not to extrude surface. 0 is flat surface, 90 is when two faces
|
//- When not to extrude surface. 0 is flat surface, 90 is when two faces
|
||||||
// make straight angle.
|
// make straight angle.
|
||||||
featureAngle 60;
|
featureAngle 60;
|
||||||
|
|
||||||
//- Maximum number of snapping relaxation iterations. Should stop
|
//- Maximum number of snapping relaxation iterations. Should stop
|
||||||
// before upon reaching a correct mesh.
|
// before upon reaching a correct mesh.
|
||||||
nRelaxIter 5;
|
nRelaxIter 5;
|
||||||
|
|
||||||
// Number of smoothing iterations of surface normals
|
// Number of smoothing iterations of surface normals
|
||||||
nSmoothSurfaceNormals 1;
|
nSmoothSurfaceNormals 1;
|
||||||
|
|
||||||
// Number of smoothing iterations of interior mesh movement direction
|
// Number of smoothing iterations of interior mesh movement direction
|
||||||
nSmoothNormals 3;
|
nSmoothNormals 3;
|
||||||
|
|
||||||
// Smooth layer thickness over surface patches
|
// Smooth layer thickness over surface patches
|
||||||
nSmoothThickness 10;
|
nSmoothThickness 10;
|
||||||
@ -265,7 +317,7 @@ addLayersControls
|
|||||||
meshQualityControls
|
meshQualityControls
|
||||||
{
|
{
|
||||||
//- Maximum non-orthogonality allowed. Set to 180 to disable.
|
//- Maximum non-orthogonality allowed. Set to 180 to disable.
|
||||||
maxNonOrtho 65;
|
maxNonOrtho 65;
|
||||||
|
|
||||||
//- Max skewness allowed. Set to <0 to disable.
|
//- Max skewness allowed. Set to <0 to disable.
|
||||||
maxBoundarySkewness 20;
|
maxBoundarySkewness 20;
|
||||||
@ -274,32 +326,31 @@ meshQualityControls
|
|||||||
//- Max concaveness allowed. Is angle (in degrees) below which concavity
|
//- Max concaveness allowed. Is angle (in degrees) below which concavity
|
||||||
// is allowed. 0 is straight face, <0 would be convex face.
|
// is allowed. 0 is straight face, <0 would be convex face.
|
||||||
// Set to 180 to disable.
|
// Set to 180 to disable.
|
||||||
maxConcave 80;
|
maxConcave 80;
|
||||||
|
|
||||||
//- Minimum projected area v.s. actual area. Set to -1 to disable.
|
//- Minimum projected area v.s. actual area. Set to -1 to disable.
|
||||||
minFlatness 0.5;
|
minFlatness 0.5;
|
||||||
|
|
||||||
//- Minimum pyramid volume. Is absolute volume of cell pyramid.
|
//- Minimum pyramid volume. Is absolute volume of cell pyramid.
|
||||||
// Set to a sensible fraction of the smallest cell volume expected.
|
|
||||||
// Set to very negative number (e.g. -1E30) to disable.
|
// Set to very negative number (e.g. -1E30) to disable.
|
||||||
minVol 1e-13;
|
minVol 1e-13;
|
||||||
|
|
||||||
//- Minimum face area. Set to <0 to disable.
|
//- Minimum face area. Set to <0 to disable.
|
||||||
minArea -1;
|
minArea -1;
|
||||||
|
|
||||||
//- Minimum face twist. Set to <-1 to disable. dot product of face normal
|
//- Minimum face twist. Set to <-1 to disable. dot product of face normal
|
||||||
//- and face centre triangles normal
|
//- and face centre triangles normal
|
||||||
minTwist 0.05;
|
minTwist 0.05;
|
||||||
|
|
||||||
//- minimum normalised cell determinant
|
//- minimum normalised cell determinant
|
||||||
//- 1 = hex, <= 0 = folded or flattened illegal cell
|
//- 1 = hex, <= 0 = folded or flattened illegal cell
|
||||||
minDeterminant 0.001;
|
minDeterminant 0.001;
|
||||||
|
|
||||||
//- minFaceWeight (0 -> 0.5)
|
//- minFaceWeight (0 -> 0.5)
|
||||||
minFaceWeight 0.05;
|
minFaceWeight 0.05;
|
||||||
|
|
||||||
//- minVolRatio (0 -> 1)
|
//- minVolRatio (0 -> 1)
|
||||||
minVolRatio 0.01;
|
minVolRatio 0.01;
|
||||||
|
|
||||||
//must be >0 for Fluent compatibility
|
//must be >0 for Fluent compatibility
|
||||||
minTriangleTwist -1;
|
minTriangleTwist -1;
|
||||||
@ -308,13 +359,12 @@ meshQualityControls
|
|||||||
// Advanced
|
// Advanced
|
||||||
|
|
||||||
//- Number of error distribution iterations
|
//- Number of error distribution iterations
|
||||||
nSmoothScale 4;
|
nSmoothScale 4;
|
||||||
//- amount to scale back displacement at error points
|
//- amount to scale back displacement at error points
|
||||||
errorReduction 0.75;
|
errorReduction 0.75;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Advanced
|
// Advanced
|
||||||
|
|
||||||
// Flags for optional output
|
// Flags for optional output
|
||||||
@ -322,12 +372,11 @@ meshQualityControls
|
|||||||
// 1 : write intermediate meshes
|
// 1 : write intermediate meshes
|
||||||
// 2 : write volScalarField with cellLevel for postprocessing
|
// 2 : write volScalarField with cellLevel for postprocessing
|
||||||
// 4 : write current intersections as .obj files
|
// 4 : write current intersections as .obj files
|
||||||
debug 0;
|
debug 0;
|
||||||
|
|
||||||
|
|
||||||
// Merge tolerance. Is fraction of overall bounding box of initial mesh.
|
// Merge tolerance. Is fraction of overall bounding box of initial mesh.
|
||||||
// Note: the write tolerance needs to be higher than this.
|
// Note: the write tolerance needs to be higher than this.
|
||||||
mergeTolerance 1e-06;
|
mergeTolerance 1E-6;
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -145,16 +145,6 @@ find -L . -type l -exec rm \{\} \;
|
|||||||
find .. $findOpt \
|
find .. $findOpt \
|
||||||
\( -name lnInclude -o -name Make -o -name config -o -name noLink \) -prune \
|
\( -name lnInclude -o -name Make -o -name config -o -name noLink \) -prune \
|
||||||
-o \( -name '*.[CHh]' -o -name '*.[ch]xx' -o -name '*.[ch]pp' -o -name '*.type' \) \
|
-o \( -name '*.[CHh]' -o -name '*.[ch]xx' -o -name '*.[ch]pp' -o -name '*.type' \) \
|
||||||
-a ! -name ".#*" \
|
-exec ln $lnOpt {} . \;
|
||||||
-print | \
|
|
||||||
while read src
|
|
||||||
do
|
|
||||||
link=$(readlink ${src##*/})
|
|
||||||
if [ "$link" != "$src" ]
|
|
||||||
then
|
|
||||||
rm $link 2>/dev/null
|
|
||||||
ln $lnOpt $src .
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user