Fixing tutorials

This commit is contained in:
Henrik Rusche 2014-06-01 18:29:30 +02:00
parent 6618e8483a
commit cb4c606882
27 changed files with 1063 additions and 762 deletions

View file

@ -120,60 +120,7 @@ bool Foam::blockMesh::readPatches
// Split old style cyclics // Split old style cyclics
// HR 1.6.2014: New style cyclics unsupported for the moment
if (patchTypes[nPatches-1] == cyclicPolyPatch::typeName)
{
word halfA = patchNames[nPatches-1] + "_half0";
word halfB = patchNames[nPatches-1] + "_half1";
WarningIn("blockMesh::createTopology(IOdictionary&)")
<< "Old-style cyclic definition."
<< " Splitting patch "
<< patchNames[nPatches-1] << " into two halves "
<< halfA << " and " << halfB << endl
<< " Alternatively use new 'boundary' dictionary syntax."
<< endl;
// Add extra patch
if (tmpBlocksPatches.size() <= nPatches)
{
tmpBlocksPatches.setSize(nPatches + 1);
patchNames.setSize(nPatches + 1);
patchTypes.setSize(nPatches + 1);
nbrPatchNames.setSize(nPatches + 1);
}
// Update halfA info
patchNames[nPatches-1] = halfA;
nbrPatchNames[nPatches-1] = halfB;
// Update halfB info
patchTypes[nPatches] = patchTypes[nPatches-1];
patchNames[nPatches] = halfB;
nbrPatchNames[nPatches] = halfA;
// Split faces
if ((tmpBlocksPatches[nPatches-1].size() % 2) != 0)
{
FatalErrorIn
(
"blockMesh::createTopology(IOdictionary&)"
) << "Size of cyclic faces is not a multiple of 2 :"
<< tmpBlocksPatches[nPatches-1]
<< exit(FatalError);
}
label sz = tmpBlocksPatches[nPatches-1].size()/2;
faceList unsplitFaces(tmpBlocksPatches[nPatches-1], true);
tmpBlocksPatches[nPatches-1] = faceList
(
SubList<face>(unsplitFaces, sz)
);
tmpBlocksPatches[nPatches] = faceList
(
SubList<face>(unsplitFaces, sz, sz)
);
nPatches++;
}
patchStream >> lastToken; patchStream >> lastToken;
} }

View file

@ -39,57 +39,30 @@ edges
boundary boundary
( (
patch0_half0 patch0
{ {
type cyclic; type cyclic;
neighbourPatch patch0_half1;
faces faces
( (
(0 3 2 1) (0 3 2 1)
);
}
patch0_half1
{
type cyclic;
neighbourPatch patch0_half0;
faces
(
(4 5 6 7) (4 5 6 7)
); );
} }
patch1_half0 patch1
{ {
type cyclic; type cyclic;
neighbourPatch patch1_half1;
faces faces
( (
(0 4 7 3) (0 4 7 3)
);
}
patch1_half1
{
type cyclic;
neighbourPatch patch1_half0;
faces
(
(2 6 5 1) (2 6 5 1)
); );
} }
patch2_half0 patch2
{ {
type cyclic; type cyclic;
neighbourPatch patch2_half1;
faces faces
( (
(3 7 6 2) (3 7 6 2)
);
}
patch2_half1
{
type cyclic;
neighbourPatch patch2_half0;
faces
(
(1 5 4 0) (1 5 4 0)
); );
} }

View file

@ -10,6 +10,7 @@ FoamFile
version 2.0; version 2.0;
format ascii; format ascii;
class polyBoundaryMesh; class polyBoundaryMesh;
location "constant/polyMesh";
object boundary; object boundary;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View file

@ -66,9 +66,9 @@ boundary
(1 2 8 7) (1 2 8 7)
); );
} }
frontAndBack periodic
{ {
type empty; type cyclic;
faces faces
( (
(0 3 4 1) (0 3 4 1)

View file

@ -1,18 +0,0 @@
#!/bin/sh
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
application="mdEquilibrationFoam"
cd periodicCubeArgon
runApplication blockMesh
runApplication mdInitialise
runApplication $application
cd ..
cd periodicCubeWater
runApplication blockMesh
runApplication mdInitialise
runApplication $application
cd ..

View file

@ -0,0 +1,10 @@
#!/bin/sh
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
application="mdEquilibrationFoam"
runApplication blockMesh
runApplication mdInitialise
runApplication $application

View file

@ -42,7 +42,7 @@ boundary
( (
(1 2 6 5) (1 2 6 5)
(0 4 7 3) (0 4 7 3)
) );
} }
periodicY periodicY
@ -52,7 +52,7 @@ boundary
( (
(2 3 7 6) (2 3 7 6)
(0 1 5 4) (0 1 5 4)
) );
} }
periodicZ periodicZ
@ -62,7 +62,7 @@ boundary
( (
(0 3 2 1) (0 3 2 1)
(4 5 6 7) (4 5 6 7)
) );
} }
) )

View file

@ -0,0 +1,22 @@
#!/bin/sh
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cd periodicCubeArgon
rm -rf 0/*
rm -f Ar-Ar
rm -f electrostatic
rm -f constant/idList
rm -rf constant/polyMesh/sets
cleanCase
cd ..
cd periodicCubeWater
rm -rf 0/*
rm -f O-O
rm -f electrostatic
rm -f constant/idList
rm -rf constant/polyMesh/sets
cleanCase
cd ..

View file

@ -0,0 +1,10 @@
#!/bin/sh
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
application="mdEquilibrationFoam"
runApplication blockMesh
runApplication mdInitialise
runApplication $application

View file

@ -33,7 +33,7 @@ blocks
hex (0 1 2 3 4 5 6 7) liquid (12 12 11) simpleGrading (1 1 1) hex (0 1 2 3 4 5 6 7) liquid (12 12 11) simpleGrading (1 1 1)
); );
patches boundary
( (
periodicX periodicX
{ {
@ -42,7 +42,7 @@ patches
( (
(1 2 6 5) (1 2 6 5)
(0 4 7 3) (0 4 7 3)
) );
} }
periodicY periodicY
@ -52,7 +52,7 @@ patches
( (
(2 3 7 6) (2 3 7 6)
(0 1 5 4) (0 1 5 4)
) );
} }
periodicZ periodicZ
@ -62,7 +62,7 @@ patches
( (
(0 3 2 1) (0 3 2 1)
(4 5 6 7) (4 5 6 7)
) );
} }
) )

View file

@ -41,7 +41,7 @@ boundary
( (
maxY maxY
{ {
type symmetryPlane; type empty;
faces faces
( (
(3 7 6 2) (3 7 6 2)
@ -50,7 +50,7 @@ boundary
minX minX
{ {
type symmetryPlane; type empty;
faces faces
( (
(0 4 7 3) (0 4 7 3)
@ -59,7 +59,7 @@ boundary
maxX maxX
{ {
type symmetryPlane; type empty;
faces faces
( (
(2 6 5 1) (2 6 5 1)
@ -68,7 +68,7 @@ boundary
minY minY
{ {
type symmetryPlane; type empty;
faces faces
( (
(1 5 4 0) (1 5 4 0)
@ -86,7 +86,7 @@ boundary
maxZ maxZ
{ {
type symmetryPlane; type empty;
faces faces
( (
(4 5 6 7) (4 5 6 7)

View file

@ -15,61 +15,43 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
9 6
( (
maxY maxY
{ {
type empty; type empty;
nFaces 0; nFaces 400;
startFace 60456; startFace 22800;
} }
minX minX
{ {
type empty; type empty;
nFaces 0; nFaces 400;
startFace 60456; startFace 23200;
} }
maxX maxX
{ {
type empty; type empty;
nFaces 0; nFaces 400;
startFace 60456; startFace 23600;
} }
minY minY
{ {
type empty; type empty;
nFaces 0; nFaces 400;
startFace 60456; startFace 24000;
} }
ground ground
{ {
type wall; type wall;
nFaces 590; nFaces 400;
startFace 60456; startFace 24400;
} }
maxZ maxZ
{ {
type empty; type empty;
nFaces 0; nFaces 400;
startFace 61046; startFace 24800;
}
igloo_region0
{
type wall;
nFaces 2260;
startFace 61046;
}
twoFridgeFreezers_seal_0
{
type wall;
nFaces 1344;
startFace 63306;
}
twoFridgeFreezers_herring_1
{
type wall;
nFaces 1116;
startFace 64650;
} }
) )

View file

@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
( cd constant/polyMesh && \rm -rf boundary* blockMeshDict *Zones* faces* neighbour* owner* points* sets ) ( cd constant/polyMesh && \rm -rf boundary* blockMeshDict *Zones* faces* neighbour* owner* points* sets )
( cd system && \rm -f changeDictionaryDict fvSolution ) ( cd system && \rm -f fvSolution )
\rm -rf 0 [1-9]* VTK log* processor* \rm -rf 0 [1-9]* VTK log* processor*

View file

@ -7,17 +7,15 @@ application="MRFSimpleFoam"
#application="simpleFoam" #application="simpleFoam"
#Create the mesh: #Create the mesh:
./makeMesh m4 < constant/polyMesh/blockMeshDict.m4 > constant/polyMesh/blockMeshDict
blockMesh
transformPoints -cylToCart "((0 0 0) (0 0 1) (1 0 0))"
# Set 0-directory and create GGI set: # Set 0-directory and create GGI set:
cp -r 0_orig 0 cp -r 0_orig 0
setSet -batch setBatchGgi setSet -batch setBatchGgi
setsToZones -noFlipMap setsToZones -noFlipMap
#Fix constant/boundary:
cp system/changeDictionaryDict_ggi system/changeDictionaryDict
changeDictionary
#Pick settings: #Pick settings:
cp system/fvSolution_ggi system/fvSolution cp system/fvSolution_ggi system/fvSolution

View file

@ -1,24 +0,0 @@
#!/bin/sh
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
application="MRFSimpleFoam"
#application="simpleFoam"
#Create the mesh:
./makeMesh
# Set 0-directory and create GGI set:
cp -r 0_orig 0
setSet -batch setBatchGgi
setsToZones -noFlipMap
#Fix constant/boundary:
cp system/changeDictionaryDict_ggi system/changeDictionaryDict
changeDictionary
#Pick settings:
cp system/fvSolution_ggi system/fvSolution
runApplication $application

View file

@ -7,7 +7,9 @@ application="MRFSimpleFoam"
#application="simpleFoam" #application="simpleFoam"
#Create the mesh: #Create the mesh:
./makeMesh m4 < constant/polyMesh/blockMeshDict_mixingPlane.m4 > constant/polyMesh/blockMeshDict
blockMesh
transformPoints -cylToCart "((0 0 0) (0 0 1) (1 0 0))"
# Set 0-directory and create GGI set: # Set 0-directory and create GGI set:
cp -r 0_orig 0 cp -r 0_orig 0
@ -15,7 +17,6 @@ setSet -batch setBatchGgi
setsToZones -noFlipMap setsToZones -noFlipMap
#Fix constant/boundary: #Fix constant/boundary:
cp system/changeDictionaryDict_mixingPlane system/changeDictionaryDict
changeDictionary changeDictionary
#Pick settings: #Pick settings:

View file

@ -267,144 +267,283 @@ edges // Inappropriate with arc due to coordinate conversion
) )
); );
patches boundary
( (
patch GVINLET GVINLET
{
type patch;
faces
( (
quad2D(GV3r, GV3l) quad2D(GV3r, GV3l)
) );
}
ggi GVOUTLET GVOUTLET
{
type ggi;
shadowPatch RUINLET;
zone GVOUTLETZone;
bridgeOverlap false;
faces
( (
quad2D(GV0l, GV0r) quad2D(GV0l, GV0r)
) );
}
cyclicGgi GVCYCLIC1 GVCYCLIC1
{
type cyclicGgi;
shadowPatch GVCYCLIC2;
zone GVCYCLIC1Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle 72;
separationOffset (0 0 0);
faces
( (
quad2D(GV1l, GV0l) quad2D(GV1l, GV0l)
quad2D(GV3l, GV2l) quad2D(GV3l, GV2l)
) );
}
cyclicGgi GVCYCLIC2 GVCYCLIC2
{
type cyclicGgi;
shadowPatch GVCYCLIC1;
zone GVCYCLIC2Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle -72;
separationOffset (0 0 0);
faces
( (
quad2D(GV0r, GV1r) quad2D(GV0r, GV1r)
quad2D(GV2r, GV3r) quad2D(GV2r, GV3r)
) );
}
//cyclic GVCYCLIC //GVCYCLIC
//( //{
// type cyclic;
// faces
// (
// quad2D(GV1l, GV0l) // quad2D(GV1l, GV0l)
// quad2D(GV3l, GV2l) // quad2D(GV3l, GV2l)
// quad2D(GV0r, GV1r) // quad2D(GV0r, GV1r)
// quad2D(GV2r, GV3r) // quad2D(GV2r, GV3r)
//) // );
//}
wall GVBLADE GVBLADE
{
type wall;
faces
( (
quad2D(GV2l, GV1l) quad2D(GV2l, GV1l)
quad2D(GV1r, GV2r) quad2D(GV1r, GV2r)
) );
}
wall GVHUB GVHUB
{
type wall;
faces
( (
backQuad(GV0l, GV0r, GV1r, GV1l) backQuad(GV0l, GV0r, GV1r, GV1l)
backQuad(GV1l, GV1r, GV2r, GV2l) backQuad(GV1l, GV1r, GV2r, GV2l)
backQuad(GV2l, GV2r, GV3r, GV3l) backQuad(GV2l, GV2r, GV3r, GV3l)
) );
}
wall GVSHROUD GVSHROUD
{
type wall;
faces
( (
frontQuad(GV0l, GV0r, GV1r, GV1l) frontQuad(GV0l, GV0r, GV1r, GV1l)
frontQuad(GV1l, GV1r, GV2r, GV2l) frontQuad(GV1l, GV1r, GV2r, GV2l)
frontQuad(GV2l, GV2r, GV3r, GV3l) frontQuad(GV2l, GV2r, GV3r, GV3l)
) );
}
ggi RUINLET RUINLET
{
type ggi;
shadowPatch GVOUTLET;
zone RUINLETZone;
bridgeOverlap false;
faces
( (
quad2D(RU3r, RU3l) quad2D(RU3r, RU3l)
) );
}
ggi RUOUTLET RUOUTLET
{
type ggi;
shadowPatch DTINLET;
zone RUOUTLETZone;
bridgeOverlap false;
faces
( (
quad2D(RU0l, RU0r) quad2D(RU0l, RU0r)
) );
}
cyclicGgi RUCYCLIC1 RUCYCLIC1
{
type cyclicGgi;
shadowPatch RUCYCLIC2;
zone RUCYCLIC1Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle 72;
separationOffset (0 0 0);
faces
( (
quad2D(RU1l, RU0l) quad2D(RU1l, RU0l)
quad2D(RU3l, RU2l) quad2D(RU3l, RU2l)
) );
}
cyclicGgi RUCYCLIC2 RUCYCLIC2
{
type cyclicGgi;
shadowPatch RUCYCLIC1;
zone RUCYCLIC2Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle -72;
separationOffset (0 0 0);
faces
( (
quad2D(RU0r, RU1r) quad2D(RU0r, RU1r)
quad2D(RU2r, RU3r) quad2D(RU2r, RU3r)
) );
}
//cyclic RUCYCLIC //RUCYCLIC
//( //{
// type cyclic;
// faces
// (
// quad2D(RU1l, RU0l) // quad2D(RU1l, RU0l)
// quad2D(RU3l, RU2l) // quad2D(RU3l, RU2l)
// quad2D(RU0r, RU1r) // quad2D(RU0r, RU1r)
// quad2D(RU2r, RU3r) // quad2D(RU2r, RU3r)
//) // )
//}
wall RUBLADE RUBLADE
{
type wall;
faces
( (
quad2D(RU2l, RU1l) quad2D(RU2l, RU1l)
quad2D(RU1r, RU2r) quad2D(RU1r, RU2r)
) );
}
wall RUHUB RUHUB
{
type wall;
faces
( (
backQuad(RU0l, RU0r, RU1r, RU1l) backQuad(RU0l, RU0r, RU1r, RU1l)
backQuad(RU1l, RU1r, RU2r, RU2l) backQuad(RU1l, RU1r, RU2r, RU2l)
backQuad(RU2l, RU2r, RU3r, RU3l) backQuad(RU2l, RU2r, RU3r, RU3l)
) );
}
wall RUSHROUD RUSHROUD
{
type wall;
faces
( (
frontQuad(RU0l, RU0r, RU1r, RU1l) frontQuad(RU0l, RU0r, RU1r, RU1l)
frontQuad(RU1l, RU1r, RU2r, RU2l) frontQuad(RU1l, RU1r, RU2r, RU2l)
frontQuad(RU2l, RU2r, RU3r, RU3l) frontQuad(RU2l, RU2r, RU3r, RU3l)
) );
}
ggi DTINLET DTINLET
{
type ggi;
shadowPatch RUOUTLET;
zone DTINLETZone;
bridgeOverlap false;
faces
( (
quad2D(DT1r, DT1l) quad2D(DT1r, DT1l)
) );
}
patch DTOUTLET DTOUTLET
{
type patch;
faces
( (
quad2D(DT0l, DT0r) quad2D(DT0l, DT0r)
) );
}
cyclicGgi DTCYCLIC1 DTCYCLIC1
{
type cyclicGgi;
shadowPatch DTCYCLIC2;
zone DTCYCLIC1Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle 72;
separationOffset (0 0 0);
faces
( (
quad2D(DT1l, DT0l) quad2D(DT1l, DT0l)
) );
}
cyclicGgi DTCYCLIC2 DTCYCLIC2
{
type cyclicGgi;
shadowPatch DTCYCLIC1;
zone DTCYCLIC2Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle -72;
separationOffset (0 0 0);
faces
( (
quad2D(DT0r, DT1r) quad2D(DT0r, DT1r)
) );
}
//cyclic DTCYCLIC //DTCYCLIC
//( //{
// type cyclic;
// faces
// (
// quad2D(DT1l, DT0l) // quad2D(DT1l, DT0l)
// quad2D(DT0r, DT1r) // quad2D(DT0r, DT1r)
//) // );
//}
wall DTHUB DTHUB
{
type wall;
faces
( (
backQuad(DT0l, DT0r, DT1r, DT1l) backQuad(DT0l, DT0r, DT1r, DT1l)
) );
}
wall DTSHROUD DTSHROUD
{
type wall;
faces
( (
frontQuad(DT0l, DT0r, DT1r, DT1l) frontQuad(DT0l, DT0r, DT1r, DT1l)
) );
}
); );
// ************************************************************************* // // ************************************************************************* //

View file

@ -0,0 +1,601 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | foam-extend: Open Source CFD |
| \\ / O peration | Version: 3.1 |
| \\ / A nd | Web: http://www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// General macros to create 2D/extruded-2D meshes
changecom(//)changequote([,])
define(calc, [esyscmd(perl -e 'printf ($1)')])
//define(calc, [esyscmd(echo $1 | bc | tr -d \\n)])
define(VCOUNT, 0)
define(vlabel, [[// ]Vertex $1 = VCOUNT define($1, VCOUNT)define([VCOUNT], incr(VCOUNT))])
define(pi, 3.14159265)
define(hex2D, hex ($1b $2b $3b $4b $1t $2t $3t $4t))
define(quad2D, ($1b $2b $2t $1t))
define(frontQuad, ($1t $2t $3t $4t))
define(backQuad, ($1b $4b $3b $2b))
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
convertToMeters 1;
// HUB AND SHROUD RADIUS
// Hub radius (m)
define(hr, 0.05)
// Shroud radius (m)
define(sr, 0.1)
// GUIDE VANE REGION GEOMETRY AND MESH PROPERTIES
// Guide vane inlet axial length (m)
define(GVial, 0.1)
// Guide vane axial length (m)
define(GVbal, 0.1)
// Guide vane outlet axial length (m)
define(GVoal, 0.02)
// Number of guide vanes per 360 degrees (integer!)
define(GVnb, 5)
// Number of cells in radial direction at guide vane
define(GVrc, 10)
// Number of cells in tangential direction between guide vanes
define(GVtc, 10)
// Number of cells in axial direction at guide vane inlet
define(GViac, 10)
// Number of cells in axial direction between guide vanes
define(GVbac, 10)
// Number of cells in axial direction at guide vane outlet
define(GVoac, 2)
// RUNNER REGION GEOMETRY AND MESH PROPERTIES
// Runner inlet axial length (m)
define(RUial, 0.02)
// Runner axial length (m)
define(RUal, 0.1)
// Runner outlet axial length (m)
define(RUoal, 0.02)
// Number of runner blades per 360 degrees (integer!)
define(RUnb, 5)
// Number of cells in radial direction in runner
define(RUrc, 10)
// Number of cells in tangential direction between runner blades
define(RUtc, 10)
// Number of cells in axial direction at runner inlet
define(RUiac, 2)
// Number of cells in axial direction between runner blades
define(RUbac, 10)
// Number of cells in axial direction at runner outlet
define(RUoac, 2)
// DRAFT TUBE REGION GEOMETRY AND MESH PROPERTIES
// "Draft tube" axial length (m)
define(DTal, 0.07)
// Number of sections per 360 degrees (integer!)
define(DTns, 5)
// Number of cells in radial direction in "draft tube"
define(DTrc, 10)
// Number of cells in tangential direction in "draft tube"
define(DTtc, 10)
// Number of cells in axial direction in "draft tube"
define(DTac, 7)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// TANGENTIAL PITCHES (RADIANS)
// Guide vane region
define(GVp, calc(2*pi/GVnb))
// Runner region
define(RUp, calc(2*pi/RUnb))
// Draft tube region
define(DTp, calc(2*pi/DTns))
// TANGENTIAL SHIFTS BETWEEN AXIAL LEVELS (BOTTOM-UP)
// Tangential shift from level DT0 to DT1
define(DTts01, calc(5*DTp))
// Runner region
// Tangential shift from level RU0 to RU1
define(RUts01, calc(-1/10*RUp))
// Tangential shift from level RU1 to RU2
define(RUts12, calc(-4/5*RUp))
// Tangential shift from level RU2 to RU3
define(RUts23, calc(-1/10*RUp))
// Guide vane region
// Tangential shift from level GV0 to GV1
define(GVts01, calc(1/10*GVp))
// Tangential shift from level GV1 to GV2
define(GVts12, calc(1/2*GVp))
// Tangential shift from level GV2 to GV3
define(GVts23, calc(0*GVp))
// AXIAL/TANGENTIAL BASE POINTS FOR EACH LEVEL (BOTTOM-UP):
// (CENTER OF RUNNER SET TO THETA=0, Z=0)
// Draft tube:
define(DTa0, calc(-RUoal-0.5*RUal-DTal)) //Center runner
define(DTt0, calc(-0.5*RUp-(0.5*RUts12)-(0*DTts01))) // Straight draft tube!
define(DTt1, calc(-0.5*RUp-(0.5*RUts12))) //Center runner
// Runner:
define(RUa0, calc(-RUoal-0.5*RUal)) //Center runner
define(RUt0, calc(-0.5*RUp-(0.5*RUts12))) //Center runner
define(RUt1, calc(RUt0+RUts01))
define(RUt2, calc(RUt1+RUts12))
define(RUt3, calc(RUt2+RUts23))
// Guide vane:
define(GVa0, calc(0.5*RUal+RUial)) //Center runner
define(GVt0, calc(-0.5*RUp-(0.5*RUts12)+RUts01+RUts12+RUts23)) //Center runner
define(GVt1, calc(GVt0+GVts01))
define(GVt2, calc(GVt1+GVts12))
define(GVt3, calc(GVt2+GVts23))
vertices //(radial [m], tangential [radians], axial [m])
(
//Guide vane hub:
(hr GVt0 GVa0) vlabel(GV0lb)
(hr calc(GVt0+GVp) GVa0) vlabel(GV0rb)
(hr GVt1 calc(GVa0+GVoal)) vlabel(GV1lb)
(hr calc(GVt1+GVp) calc(GVa0+GVoal)) vlabel(GV1rb)
(hr GVt2 calc(GVa0+GVoal+GVbal)) vlabel(GV2lb)
(hr calc(GVt2+GVp) calc(GVa0+GVoal+GVbal)) vlabel(GV2rb)
(hr GVt3 calc(GVa0+GVoal+GVbal+GVial)) vlabel(GV3lb)
(hr calc(GVt3+GVp) calc(GVa0+GVoal+GVbal+GVial)) vlabel(GV3rb)
//Guide vane shroud:
(sr GVt0 GVa0) vlabel(GV0lt)
(sr calc(GVt0+GVp) GVa0) vlabel(GV0rt)
(sr GVt1 calc(GVa0+GVoal)) vlabel(GV1lt)
(sr calc(GVt1+GVp) calc(GVa0+GVoal)) vlabel(GV1rt)
(sr GVt2 calc(GVa0+GVoal+GVbal)) vlabel(GV2lt)
(sr calc(GVt2+GVp) calc(GVa0+GVoal+GVbal)) vlabel(GV2rt)
(sr GVt3 calc(GVa0+GVoal+GVbal+GVial)) vlabel(GV3lt)
(sr calc(GVt3+GVp) calc(GVa0+GVoal+GVbal+GVial)) vlabel(GV3rt)
//Runner hub:
(hr RUt0 RUa0) vlabel(RU0lb)
(hr calc(RUt0+RUp) RUa0) vlabel(RU0rb)
(hr RUt1 calc(RUa0+RUoal)) vlabel(RU1lb)
(hr calc(RUt1+RUp) calc(RUa0+RUoal)) vlabel(RU1rb)
(hr RUt2 calc(RUa0+RUoal+RUal)) vlabel(RU2lb)
(hr calc(RUt2+RUp) calc(RUa0+RUoal+RUal)) vlabel(RU2rb)
(hr RUt3 calc(RUa0+RUoal+RUal+RUial)) vlabel(RU3lb)
(hr calc(RUt3+RUp) calc(RUa0+RUoal+RUal+RUial)) vlabel(RU3rb)
//Runner shroud:
(sr RUt0 RUa0) vlabel(RU0lt)
(sr calc(RUt0+RUp) RUa0) vlabel(RU0rt)
(sr RUt1 calc(RUa0+RUoal)) vlabel(RU1lt)
(sr calc(RUt1+RUp) calc(RUa0+RUoal)) vlabel(RU1rt)
(sr RUt2 calc(RUa0+RUoal+RUal)) vlabel(RU2lt)
(sr calc(RUt2+RUp) calc(RUa0+RUoal+RUal)) vlabel(RU2rt)
(sr RUt3 calc(RUa0+RUoal+RUal+RUial)) vlabel(RU3lt)
(sr calc(RUt3+RUp) calc(RUa0+RUoal+RUal+RUial)) vlabel(RU3rt)
//Draft tube hub:
(hr DTt0 DTa0) vlabel(DT0lb)
(hr calc(DTt0+DTp) DTa0) vlabel(DT0rb)
(hr DTt1 calc(DTa0+DTal)) vlabel(DT1lb)
(hr calc(DTt1+DTp) calc(DTa0+DTal)) vlabel(DT1rb)
//Draft tube shroud:
(sr DTt0 DTa0) vlabel(DT0lt)
(sr calc(DTt0+DTp) DTa0) vlabel(DT0rt)
(sr DTt1 calc(DTa0+DTal)) vlabel(DT1lt)
(sr calc(DTt1+DTp) calc(DTa0+DTal)) vlabel(DT1rt)
);
blocks
(
//Guide vane:
hex2D(GV0l, GV0r, GV1r, GV1l)
(GVtc GVoac GVrc)
simpleGrading (1 1 1)
hex2D(GV1l, GV1r, GV2r, GV2l)
(GVtc GVbac GVrc)
simpleGrading (1 0.2 1)
hex2D(GV2l, GV2r, GV3r, GV3l)
(GVtc GViac GVrc)
simpleGrading (1 1 1)
//Runner:
hex2D(RU0l, RU0r, RU1r, RU1l)
rotor
(RUtc RUoac RUrc)
simpleGrading (1 1 1)
hex2D(RU1l, RU1r, RU2r, RU2l)
rotor
(RUtc RUbac RUrc)
simpleGrading (1 0.4 1)
hex2D(RU2l, RU2r, RU3r, RU3l)
rotor
(RUtc RUiac RUrc)
simpleGrading (1 1 1)
//Draft tube:
hex2D(DT0l, DT0r, DT1r, DT1l)
(DTtc DTac DTrc)
simpleGrading (1 1 1)
);
edges // Inappropriate with arc due to coordinate conversion
(
//Runner
spline RU1lt RU2lt
(
(sr calc(RUt1+0.65*(RUt2-(RUt1))) calc(RUa0+RUoal+0.5*RUal))
)
spline RU1lb RU2lb
(
(hr calc(RUt1+0.65*(RUt2-(RUt1))) calc(RUa0+RUoal+0.5*RUal))
)
spline RU1rt RU2rt
(
(sr calc(RUt1+RUp+0.75*(RUt2-(RUt1))) calc(RUa0+RUoal+0.5*RUal))
)
spline RU1rb RU2rb
(
(hr calc(RUt1+RUp+0.75*(RUt2-(RUt1))) calc(RUa0+RUoal+0.5*RUal))
)
//Guide vane
spline GV1lt GV2lt
(
(sr calc(GVt1+0.75*(GVt2-(GVt1))) calc(GVa0+GVoal+0.5*GVbal))
)
spline GV1lb GV2lb
(
(hr calc(GVt1+0.75*(GVt2-(GVt1))) calc(GVa0+GVoal+0.5*GVbal))
)
spline GV1rt GV2rt
(
(sr calc(GVt1+GVp+0.65*(GVt2-(GVt1))) calc(GVa0+GVoal+0.5*GVbal))
)
spline GV1rb GV2rb
(
(hr calc(GVt1+GVp+0.65*(GVt2-(GVt1))) calc(GVa0+GVoal+0.5*GVbal))
)
);
boundary
(
GVINLET
{
type patch;
faces
(
quad2D(GV3r, GV3l)
);
}
GVOUTLET
{
type mixingPlane;
shadowPatch RUINLET;
zone GVOUTLETZone;
coordinateSystem
{
type cylindrical;
//name mixingCS;
origin (0 0 0);
e1 (1 0 0);
e3 (0 0 1);
}
ribbonPatch
{
sweepAxis Theta;
stackAxis R;
discretisation bothPatches;
}
faces
(
quad2D(GV0l, GV0r)
);
}
GVCYCLIC1
{
type cyclicGgi;
shadowPatch GVCYCLIC2;
zone GVCYCLIC1Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle 72;
separationOffset (0 0 0);
faces
(
quad2D(GV1l, GV0l)
quad2D(GV3l, GV2l)
);
}
GVCYCLIC2
{
type cyclicGgi;
shadowPatch GVCYCLIC1;
zone GVCYCLIC2Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle -72;
separationOffset (0 0 0);
faces
(
quad2D(GV0r, GV1r)
quad2D(GV2r, GV3r)
);
}
//GVCYCLIC
//{
// type cyclic;
// faces
// (
// quad2D(GV1l, GV0l)
// quad2D(GV3l, GV2l)
// quad2D(GV0r, GV1r)
// quad2D(GV2r, GV3r)
// );
//}
GVBLADE
{
type wall;
faces
(
quad2D(GV2l, GV1l)
quad2D(GV1r, GV2r)
);
}
GVHUB
{
type wall;
faces
(
backQuad(GV0l, GV0r, GV1r, GV1l)
backQuad(GV1l, GV1r, GV2r, GV2l)
backQuad(GV2l, GV2r, GV3r, GV3l)
);
}
GVSHROUD
{
type wall;
faces
(
frontQuad(GV0l, GV0r, GV1r, GV1l)
frontQuad(GV1l, GV1r, GV2r, GV2l)
frontQuad(GV2l, GV2r, GV3r, GV3l)
);
}
RUINLET
{
type mixingPlane;
shadowPatch GVOUTLET;
zone RUINLETZone;
coordinateSystem
{
type cylindrical;
//name mixingCS;
origin (0 0 0);
e1 (1 0 0);
e3 (0 0 1);
}
ribbonPatch
{
sweepAxis Theta;
stackAxis R;
discretisation bothPatches;
}
faces
(
quad2D(RU3r, RU3l)
);
}
RUOUTLET
{
type mixingPlane;
shadowPatch DTINLET;
zone RUOUTLETZone;
coordinateSystem
{
type cylindrical;
//name mixingCS;
origin (0 0 0);
e1 (1 0 0);
e3 (0 0 1);
}
ribbonPatch
{
sweepAxis Theta;
stackAxis R;
discretisation bothPatches;
}
faces
(
quad2D(RU0l, RU0r)
);
}
RUCYCLIC1
{
type cyclicGgi;
shadowPatch RUCYCLIC2;
zone RUCYCLIC1Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle 72;
separationOffset (0 0 0);
faces
(
quad2D(RU1l, RU0l)
quad2D(RU3l, RU2l)
);
}
RUCYCLIC2
{
type cyclicGgi;
shadowPatch RUCYCLIC1;
zone RUCYCLIC2Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle -72;
separationOffset (0 0 0);
faces
(
quad2D(RU0r, RU1r)
quad2D(RU2r, RU3r)
);
}
//RUCYCLIC
//{
// type cyclic;
// faces
// (
// quad2D(RU1l, RU0l)
// quad2D(RU3l, RU2l)
// quad2D(RU0r, RU1r)
// quad2D(RU2r, RU3r)
// )
//}
RUBLADE
{
type wall;
faces
(
quad2D(RU2l, RU1l)
quad2D(RU1r, RU2r)
);
}
RUHUB
{
type wall;
faces
(
backQuad(RU0l, RU0r, RU1r, RU1l)
backQuad(RU1l, RU1r, RU2r, RU2l)
backQuad(RU2l, RU2r, RU3r, RU3l)
);
}
RUSHROUD
{
type wall;
faces
(
frontQuad(RU0l, RU0r, RU1r, RU1l)
frontQuad(RU1l, RU1r, RU2r, RU2l)
frontQuad(RU2l, RU2r, RU3r, RU3l)
);
}
DTINLET
{
type mixingPlane;
shadowPatch RUOUTLET;
zone DTINLETZone;
coordinateSystem
{
type cylindrical;
//name mixingCS;
origin (0 0 0);
e1 (1 0 0);
e3 (0 0 1);
}
ribbonPatch
{
sweepAxis Theta;
stackAxis R;
discretisation bothPatches;
}
faces
(
quad2D(DT1r, DT1l)
);
}
DTOUTLET
{
type patch;
faces
(
quad2D(DT0l, DT0r)
);
}
DTCYCLIC1
{
type cyclicGgi;
shadowPatch DTCYCLIC2;
zone DTCYCLIC1Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle 72;
separationOffset (0 0 0);
faces
(
quad2D(DT1l, DT0l)
);
}
DTCYCLIC2
{
type cyclicGgi;
shadowPatch DTCYCLIC1;
zone DTCYCLIC2Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle -72;
separationOffset (0 0 0);
faces
(
quad2D(DT0r, DT1r)
);
}
//DTCYCLIC
//{
// type cyclic;
// faces
// (
// quad2D(DT1l, DT0l)
// quad2D(DT0r, DT1r)
// );
//}
DTHUB
{
type wall;
faces
(
backQuad(DT0l, DT0r, DT1r, DT1l)
);
}
DTSHROUD
{
type wall;
faces
(
frontQuad(DT0l, DT0r, DT1r, DT1l)
);
}
);
// ************************************************************************* //

View file

@ -1,5 +0,0 @@
#!/bin/sh
m4 < constant/polyMesh/blockMeshDict.m4 > constant/polyMesh/blockMeshDict
blockMesh
transformPoints -cylToCart "((0 0 0) (0 0 1) (1 0 0))"

View file

@ -0,0 +1,112 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | foam-extend: Open Source CFD |
| \\ / O peration | Version: 3.1 |
| \\ / A nd | Web: http://www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object changeDictionaryDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dictionaryReplacement
{
epsilon
{
boundaryField
{
GVOUTLET
{
type mixingPlane;
}
RUINLET
{
type mixingPlane;
}
RUOUTLET
{
type mixingPlane;
}
DTINLET
{
type mixingPlane;
}
}
}
k
{
boundaryField
{
GVOUTLET
{
type mixingPlane;
}
RUINLET
{
type mixingPlane;
}
RUOUTLET
{
type mixingPlane;
}
DTINLET
{
type mixingPlane;
}
}
}
U
{
boundaryField
{
GVOUTLET
{
type mixingPlane;
}
RUINLET
{
type mixingPlane;
}
RUOUTLET
{
type mixingPlane;
}
DTINLET
{
type mixingPlane;
}
}
}
p
{
boundaryField
{
GVOUTLET
{
type mixingPlane;
}
RUINLET
{
type mixingPlane;
}
RUOUTLET
{
type mixingPlane;
}
DTINLET
{
type mixingPlane;
}
}
}
}
// ************************************************************************* //

View file

@ -1,188 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | foam-extend: Open Source CFD |
| \\ / O peration | Version: 3.1 |
| \\ / A nd | Web: http://www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object changeDictionaryDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dictionaryReplacement
{
boundary
{
GVINLET
{
type patch;
}
GVCYCLIC1
{
type cyclicGgi;
shadowPatch GVCYCLIC2;
zone GVCYCLIC1Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle 72;
separationOffset (0 0 0);
}
GVCYCLIC2
{
type cyclicGgi;
shadowPatch GVCYCLIC1;
zone GVCYCLIC2Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle -72;
separationOffset (0 0 0);
}
RUCYCLIC1
{
type cyclicGgi;
shadowPatch RUCYCLIC2;
zone RUCYCLIC1Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle 72;
separationOffset (0 0 0);
}
RUCYCLIC2
{
type cyclicGgi;
shadowPatch RUCYCLIC1;
zone RUCYCLIC2Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle -72;
separationOffset (0 0 0);
}
DTCYCLIC1
{
type cyclicGgi;
shadowPatch DTCYCLIC2;
zone DTCYCLIC1Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle 72;
separationOffset (0 0 0);
}
DTCYCLIC2
{
type cyclicGgi;
shadowPatch DTCYCLIC1;
zone DTCYCLIC2Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle -72;
separationOffset (0 0 0);
}
GVOUTLET
{
type ggi;
shadowPatch RUINLET;
zone GVOUTLETZone;
bridgeOverlap false;
//type mixingPlane;
//shadowPatch RUINLET;
//zone GVOUTLETZone;
//coordinateSystem
//{
// type cylindrical;
// //name mixingCS;
// origin (0 0 0);
// e1 (1 0 0);
// e3 (0 0 1);
//}
//ribbonPatch
//{
// sweepAxis Theta;
// stackAxis R;
// discretisation bothPatches;
//}
}
RUINLET
{
type ggi;
shadowPatch GVOUTLET;
zone RUINLETZone;
bridgeOverlap false;
//type mixingPlane;
//shadowPatch GVOUTLET;
//zone RUINLETZone;
//coordinateSystem
//{
// type cylindrical;
// //name mixingCS;
// origin (0 0 0);
// e1 (1 0 0);
// e3 (0 0 1);
//}
//ribbonPatch
//{
// sweepAxis Theta;
// stackAxis R;
// discretisation bothPatches;
//}
}
RUOUTLET
{
type ggi;
shadowPatch DTINLET;
zone RUOUTLETZone;
bridgeOverlap false;
//type mixingPlane;
//shadowPatch DTINLET;
//zone RUOUTLETZone;
//coordinateSystem
//{
// type cylindrical;
// //name mixingCS;
// origin (0 0 0);
// e1 (1 0 0);
// e3 (0 0 1);
//}
//ribbonPatch
//{
// sweepAxis Theta;
// stackAxis R;
// discretisation bothPatches;
//}
}
DTINLET
{
type ggi;
shadowPatch RUOUTLET;
zone DTINLETZone;
bridgeOverlap false;
//type mixingPlane;
//shadowPatch RUOUTLET;
//zone DTINLETZone;
//coordinateSystem
//{
// type cylindrical;
// //name mixingCS;
// origin (0 0 0);
// e1 (1 0 0);
// e3 (0 0 1);
//}
//ribbonPatch
//{
// sweepAxis Theta;
// stackAxis R;
// discretisation bothPatches;
//}
}
DTOUTLET
{
type patch;
}
}
}
// ************************************************************************* //

View file

@ -1,260 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | foam-extend: Open Source CFD |
| \\ / O peration | Version: 3.1 |
| \\ / A nd | Web: http://www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object changeDictionaryDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dictionaryReplacement
{
epsilon
{
boundaryField
{
GVOUTLET
{
type mixingPlane;
}
RUINLET
{
type mixingPlane;
}
RUOUTLET
{
type mixingPlane;
}
DTINLET
{
type mixingPlane;
}
}
}
k
{
boundaryField
{
GVOUTLET
{
type mixingPlane;
}
RUINLET
{
type mixingPlane;
}
RUOUTLET
{
type mixingPlane;
}
DTINLET
{
type mixingPlane;
}
}
}
U
{
boundaryField
{
GVOUTLET
{
type mixingPlane;
}
RUINLET
{
type mixingPlane;
}
RUOUTLET
{
type mixingPlane;
}
DTINLET
{
type mixingPlane;
}
}
}
p
{
boundaryField
{
GVOUTLET
{
type mixingPlane;
}
RUINLET
{
type mixingPlane;
}
RUOUTLET
{
type mixingPlane;
}
DTINLET
{
type mixingPlane;
}
}
}
boundary
{
GVINLET
{
type patch;
}
GVCYCLIC1
{
type cyclicGgi;
shadowPatch GVCYCLIC2;
zone GVCYCLIC1Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle 72;
separationOffset (0 0 0);
}
GVCYCLIC2
{
type cyclicGgi;
shadowPatch GVCYCLIC1;
zone GVCYCLIC2Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle -72;
separationOffset (0 0 0);
}
RUCYCLIC1
{
type cyclicGgi;
shadowPatch RUCYCLIC2;
zone RUCYCLIC1Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle 72;
separationOffset (0 0 0);
}
RUCYCLIC2
{
type cyclicGgi;
shadowPatch RUCYCLIC1;
zone RUCYCLIC2Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle -72;
separationOffset (0 0 0);
}
DTCYCLIC1
{
type cyclicGgi;
shadowPatch DTCYCLIC2;
zone DTCYCLIC1Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle 72;
separationOffset (0 0 0);
}
DTCYCLIC2
{
type cyclicGgi;
shadowPatch DTCYCLIC1;
zone DTCYCLIC2Zone;
bridgeOverlap false;
rotationAxis (0 0 1);
rotationAngle -72;
separationOffset (0 0 0);
}
GVOUTLET
{
type mixingPlane;
shadowPatch RUINLET;
zone GVOUTLETZone;
coordinateSystem
{
type cylindrical;
//name mixingCS;
origin (0 0 0);
e1 (1 0 0);
e3 (0 0 1);
}
ribbonPatch
{
sweepAxis Theta;
stackAxis R;
discretisation bothPatches;
}
}
RUINLET
{
type mixingPlane;
shadowPatch GVOUTLET;
zone RUINLETZone;
coordinateSystem
{
type cylindrical;
//name mixingCS;
origin (0 0 0);
e1 (1 0 0);
e3 (0 0 1);
}
ribbonPatch
{
sweepAxis Theta;
stackAxis R;
discretisation bothPatches;
}
}
RUOUTLET
{
type mixingPlane;
shadowPatch DTINLET;
zone RUOUTLETZone;
coordinateSystem
{
type cylindrical;
//name mixingCS;
origin (0 0 0);
e1 (1 0 0);
e3 (0 0 1);
}
ribbonPatch
{
sweepAxis Theta;
stackAxis R;
discretisation bothPatches;
}
}
DTINLET
{
type mixingPlane;
shadowPatch RUOUTLET;
zone DTINLETZone;
coordinateSystem
{
type cylindrical;
//name mixingCS;
origin (0 0 0);
e1 (1 0 0);
e3 (0 0 1);
}
ribbonPatch
{
sweepAxis Theta;
stackAxis R;
discretisation bothPatches;
}
}
DTOUTLET
{
type patch;
}
}
}
// ************************************************************************* //

View file

@ -21,37 +21,37 @@ FoamFile
{ {
type patch; type patch;
nFaces 150; nFaces 150;
startFace 2098769; startFace 1654057;
} }
inlet inlet
{ {
type patch; type patch;
nFaces 48; nFaces 48;
startFace 2098919; startFace 1654207;
} }
outlet outlet
{ {
type patch; type patch;
nFaces 48; nFaces 48;
startFace 2098967; startFace 1654255;
} }
front symFront
{ {
type empty; type symmetryPlane;
nFaces 38129; nFaces 35801;
startFace 2099015; startFace 1654303;
} }
back symBack
{ {
type empty; type symmetryPlane;
nFaces 38120; nFaces 35792;
startFace 2137144; startFace 1690104;
} }
wing_5degrees.obj_WALL10 wing_5degrees.obj_WALL10
{ {
type wall; type wall;
nFaces 49792; nFaces 56064;
startFace 2175264; startFace 1725896;
} }
) )

View file

@ -66,7 +66,7 @@ boundary
(5 4 14 15) (5 4 14 15)
(2 3 13 12) (2 3 13 12)
(6 7 17 16) (6 7 17 16)
) );
} }
branchWalls branchWalls
{ {