From e36bc3c22b945ef8a143e6d5852f7fc63e7ec9e3 Mon Sep 17 00:00:00 2001 From: mattijs Date: Wed, 12 Mar 2014 14:47:17 +0000 Subject: [PATCH] ENH: addLayersToFaceZone: testcase for snappyHexMesh layers on faceZones --- tutorials/mesh/snappyHexMesh/Allrun | 5 + .../snappyHexMesh/addLayersToFaceZone/Allrun | 16 + .../constant/polyMesh/blockMeshDict | 89 +++++ .../addLayersToFaceZone/system/controlDict | 49 +++ .../system/decomposeParDict | 143 ++++++++ .../addLayersToFaceZone/system/fvSchemes | 57 ++++ .../addLayersToFaceZone/system/fvSolution | 46 +++ .../system/meshQualityDict | 21 ++ .../system/snappyHexMeshDict | 315 ++++++++++++++++++ .../addLayersToFaceZone/system/topoSetDict | 88 +++++ 10 files changed, 829 insertions(+) create mode 100755 tutorials/mesh/snappyHexMesh/addLayersToFaceZone/Allrun create mode 100644 tutorials/mesh/snappyHexMesh/addLayersToFaceZone/constant/polyMesh/blockMeshDict create mode 100644 tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/controlDict create mode 100644 tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/decomposeParDict create mode 100644 tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/fvSchemes create mode 100644 tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/fvSolution create mode 100644 tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/meshQualityDict create mode 100644 tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/snappyHexMeshDict create mode 100644 tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/topoSetDict diff --git a/tutorials/mesh/snappyHexMesh/Allrun b/tutorials/mesh/snappyHexMesh/Allrun index 6d1366f448..be37b50514 100755 --- a/tutorials/mesh/snappyHexMesh/Allrun +++ b/tutorials/mesh/snappyHexMesh/Allrun @@ -7,6 +7,11 @@ cd ${0%/*} || exit 1 # run from this directory ./Allrun ) +( + cd addLayersToFaceZone || exit + ./Allrun +) + exit 0 # These cases are links to solver test cases and are run when the Allrun diff --git a/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/Allrun b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/Allrun new file mode 100755 index 0000000000..cecfd7dda2 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/Allrun @@ -0,0 +1,16 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # run from this directory + +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + + +runApplication blockMesh + +runApplication topoSet + +runApplication snappyHexMesh + +runApplication checkMesh + +# ----------------------------------------------------------------- end-of-file diff --git a/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/constant/polyMesh/blockMeshDict b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000..33bfc23bf1 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/constant/polyMesh/blockMeshDict @@ -0,0 +1,89 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1; + +vertices +( + ( 0 0 0) + (10 0 0) + (10 6 0) + ( 0 6 0) + ( 0 0 1) + (10 0 1) + (10 6 1) + ( 0 6 1) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (10 6 1) simpleGrading (1 1 1) +); + +edges +( +); + +boundary +( + maxY + { + type patch; + faces + ( + (3 7 6 2) + ); + } + minY + { + type patch; + faces + ( + (1 5 4 0) + ); + } + minX + { + type patch; + faces + ( + (0 4 7 3) + ); + } + maxX + { + type patch; + faces + ( + (2 6 5 1) + ); + } + frontAndBack + { + type patch; + faces + ( + (0 3 2 1) + (4 5 6 7) + ); + } +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/controlDict b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/controlDict new file mode 100644 index 0000000000..383b55ce76 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/controlDict @@ -0,0 +1,49 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application icoFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 11111; + +deltaT 1; + +writeControl timeStep; + +writeInterval 20; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression off; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable true; + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/decomposeParDict b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/decomposeParDict new file mode 100644 index 0000000000..39483a01e3 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/decomposeParDict @@ -0,0 +1,143 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + object decomposeParDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 2; + +//- Keep owner and neighbour on same processor for faces in zones: +// preserveFaceZones (heater solid1 solid3); + +//- Keep owner and neighbour on same processor for faces in patches: +// (makes sense only for cyclic patches) +//preservePatches (cyclic_half0 cyclic_half1); + +//- Keep all of faceSet on a single processor. This puts all cells +// connected with a point, edge or face on the same processor. +// (just having face connected cells might not guarantee a balanced +// decomposition) +// The processor can be -1 (the decompositionMethod chooses the processor +// for a good load balance) or explicitly provided (upsets balance). +//singleProcessorFaceSets ((f0 -1)); + + +//- Keep owner and neighbour of baffles on same processor (i.e. keep it +// detectable as a baffle). Baffles are two boundary face sharing the +// same points. +//preserveBaffles true; + +//- Use the volScalarField named here as a weight for each cell in the +// decomposition. For example, use a particle population field to decompose +// for a balanced number of particles in a lagrangian simulation. +// weightField dsmcRhoNMean; + +method scotch; +//method hierarchical; +// method simple; +// method metis; +// method manual; +// method multiLevel; +// method structured; // does 2D decomposition of structured mesh + +multiLevelCoeffs +{ + // Decomposition methods to apply in turn. This is like hierarchical but + // fully general - every method can be used at every level. + + level0 + { + numberOfSubdomains 64; + //method simple; + //simpleCoeffs + //{ + // n (2 1 1); + // delta 0.001; + //} + method scotch; + } + level1 + { + numberOfSubdomains 4; + method scotch; + } +} + +// Desired output + +simpleCoeffs +{ + n (2 1 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (1 2 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +scotchCoeffs +{ + //processorWeights + //( + // 1 + // 1 + // 1 + // 1 + //); + //writeGraph true; + //strategy "b"; +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + +structuredCoeffs +{ + // Patches to do 2D decomposition on. Structured mesh only; cells have + // to be in 'columns' on top of patches. + patches (movingWall); + + // Method to use on the 2D subset + method scotch; +} + +//// Is the case distributed? Note: command-line argument -roots takes +//// precedence +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/fvSchemes b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/fvSchemes new file mode 100644 index 0000000000..dede0a6cba --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/fvSchemes @@ -0,0 +1,57 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; + grad(p) Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss linear; +} + +laplacianSchemes +{ + default Gauss linear orthogonal; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default orthogonal; +} + +fluxRequired +{ + default no; + p ; +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/fvSolution b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/fvSolution new file mode 100644 index 0000000000..f9e556f155 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/fvSolution @@ -0,0 +1,46 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + p + { + solver PCG; + preconditioner DIC; + tolerance 1e-06; + relTol 0; + } + + U + { + solver smoothSolver; + smoother symGaussSeidel; + tolerance 1e-05; + relTol 0; + } +} + +PISO +{ + nCorrectors 2; + nNonOrthogonalCorrectors 0; + pRefCell 0; + pRefValue 0; +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/meshQualityDict b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/meshQualityDict new file mode 100644 index 0000000000..fd0701a01c --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/meshQualityDict @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object meshQualityDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Include defaults parameters from master dictionary +#include "$WM_PROJECT_DIR/etc/caseDicts/meshQualityDict" + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/snappyHexMeshDict b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/snappyHexMeshDict new file mode 100644 index 0000000000..4bc6d987c8 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/snappyHexMeshDict @@ -0,0 +1,315 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object snappyHexMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Which of the steps to run +castellatedMesh false; +snap false; +addLayers true; + + +// Geometry. Definition of all surfaces. All surfaces are of class +// searchableSurface. +geometry +{}; + + + +// Settings for the castellatedMesh generation. +castellatedMeshControls +{ + + // Refinement parameters + // ~~~~~~~~~~~~~~~~~~~~~ + + // If local number of cells is >= maxLocalCells on any processor + // switches from from refinement followed by balancing + // (current method) to (weighted) balancing before refinement. + maxLocalCells 100000; + + // Overall cell limit (approximately). Refinement will stop immediately + // upon reaching this number so a refinement level might not complete. + // 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 + // actually be a lot less. + maxGlobalCells 2000000; + + // The surface refinement loop might spend lots of iterations refining just a + // few cells. This setting will cause refinement to stop if <= minimumRefine + // are selected for refinement. Note: it will at least do one iteration + // (unless the number of cells to refine is 0) + minRefinementCells 0; + + // Allow a certain level of imbalance during refining + // (since balancing is quite expensive) + // Expressed as fraction of perfect balance (= overall number of cells / + // nProcs). 0=balance always. + maxLoadUnbalance 0.10; + + // Number of buffer layers between different levels. + // 1 means normal 2:1 refinement restriction, larger means slower + // refinement. + nCellsBetweenLevels 1; + + + // Explicit feature edge refinement + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + // Specifies a level for any cell intersected by explicitly provided + // edges. + // This is a featureEdgeMesh, read from constant/triSurface for now. + // Specify 'levels' in the same way as the 'distance' mode in the + // refinementRegions (see below). The old specification + // level 2; + // is equivalent to + // levels ((0 2)); + + features + (); + + + // Surface based refinement + // ~~~~~~~~~~~~~~~~~~~~~~~~ + + // Specifies two levels for every surface. The first is the minimum level, + // every cell intersecting a surface gets refined up to the minimum level. + // The second level is the maximum level. Cells that 'see' multiple + // intersections where the intersections make an + // angle > resolveFeatureAngle get refined up to the maximum level. + + refinementSurfaces + {} + + // Feature angle: + // - used if min and max refinement level of a surface differ + // - used if feature snapping (see snapControls below) is used + resolveFeatureAngle 30; + + + // Region-wise refinement + // ~~~~~~~~~~~~~~~~~~~~~~ + + // Specifies refinement level for cells in relation to a surface. One of + // three modes + // - distance. 'levels' specifies per distance to the surface the + // wanted refinement level. The distances need to be specified in + // increasing order. + // - inside. 'levels' is only one entry and only the level is used. All + // cells inside the surface get refined up to the level. The surface + // needs to be closed for this to be possible. + // - outside. Same but cells outside. + + refinementRegions + {} + + // Mesh selection + // ~~~~~~~~~~~~~~ + + // After refinement patches get added for all refinementSurfaces and + // all cells intersecting the surfaces get put into these patches. The + // section reachable from the location(s)InMesh is kept. + // NOTE: This point should never be on a face, always inside a cell, even + // after refinement. + // + // There are two different ways of specifying the regions to keep: + // 1. a single locationInMesh. All the 'zoned' surfaces are marked as such + // in the refinementSurfaces with the faceZone and cellZone keywords. + // + // or + // + // 2. multiple locationsInMesh, with per location the name of the cellZone. + // This uses walking to determine zones and automatically creates + // faceZones on the outside of cellZones. + + + // Ad 1. Specify a single location and how to treat faces inbetween + // cellZones + locationInMesh (5 0.28 0.43); + + // Whether any faceZones (as specified in the refinementSurfaces) + // are only on the boundary of corresponding cellZones or also allow + // free-standing zone faces. Not used if there are no faceZones. + allowFreeStandingZoneFaces true; +} + + +// Settings for the snapping. +snapControls +{ + // Number of patch smoothing iterations before finding correspondence + // to surface + nSmoothPatch 3; + + // Maximum relative distance for points to be attracted by surface. + // True distance is this factor times local maximum edge length. + // Note: changed(corrected) w.r.t 17x! (17x used 2* tolerance) + tolerance 2.0; + + // Number of mesh displacement relaxation iterations. + nSolveIter 30; + + // Maximum number of snapping relaxation iterations. Should stop + // before upon reaching a correct mesh. + nRelaxIter 5; + +} + + +// Settings for the layer addition. +addLayersControls +{ + // Are the thickness parameters below relative to the undistorted + // size of the refined cell outside layer (true) or absolute sizes (false). + relativeSizes false; + + // Expansion factor for layer mesh + expansionRatio 1.0; + + // Wanted thickness of the layer furthest away from the wall. + // If relativeSizes this is relative to undistorted size of cell + // outside layer. + finalLayerThickness 0.3; + + // Minimum overall thickness of total layers. If for any reason layer + // cannot be above minThickness do not add layer. + // If relativeSizes this is relative to undistorted size of cell + // outside layer.. + minThickness 0.1; + + + // Per final patch (so not geometry!) the layer information + layers + { + maxY + { + nSurfaceLayers 2; + } + minY + { + nSurfaceLayers 1; + } + A + { + nSurfaceLayers 2; + } + } + + // If points get not extruded do nGrow layers of connected faces that are + // also not grown. This helps convergence of the layer addition process + // close to features. + // Note: changed(corrected) w.r.t 17x! (didn't do anything in 17x) + nGrow 0; + + // Advanced settings + + + // Static analysis of starting mesh + + // When not to extrude surface. 0 is flat surface, 90 is when two faces + // are perpendicular + featureAngle 130; + + // When to merge patch faces. Default is 0.5*featureAngle + //mergePatchFacesAngle 45; + + // Do not extrude around sharp edge if not both faces are extruded. + // Default is 0.5*featureAngle. Set to -180 always attempt extrusion + layerTerminationAngle -180; + + // Stop layer growth on highly warped cells + maxFaceThicknessRatio 0.5; + + + // Patch displacement + + // Number of smoothing iterations of surface normals + nSmoothSurfaceNormals 1; + + // Smooth layer thickness over surface patches + nSmoothThickness 10; + + + + // Medial axis analysis + + // Angle used to pick up medial axis points + // Note: changed(corrected) w.r.t 17x! 90 degrees corresponds to 130 + // in 17x. + minMedialAxisAngle 90; + + // Reduce layer growth where ratio thickness to medial + // distance is large + maxThicknessToMedialRatio 0.3; + + // Number of smoothing iterations of interior mesh movement direction + nSmoothNormals 3; + + + // Mesh shrinking + + // Optional: at non-patched sides allow mesh to slip if extrusion + // direction makes angle larger than slipFeatureAngle. Default is + // 0.5*featureAngle. + slipFeatureAngle 30; + + // Maximum number of snapping relaxation iterations. Should stop + // before upon reaching a correct mesh. + nRelaxIter 5; + + // Create buffer region for new layer terminations + nBufferCellsNoExtrude 0; + + // Overall max number of layer addition iterations. The mesher will + // exit if it reaches this number of iterations; possibly with an + // illegal mesh. + nLayerIter 50; +// +// // Max number of iterations after which relaxed meshQuality controls +// // get used. Up to nRelaxedIter it uses the settings in +// // meshQualityControls, +// // after nRelaxedIter it uses the values in +// // meshQualityControls::relaxed. +// nRelaxedIter 20; +// +// // Additional reporting: if there are just a few faces where there +// // are mesh errors (after adding the layers) print their face centres. +// // This helps in tracking down problematic mesh areas. +// //additionalReporting true; +} + +// Generic mesh quality settings. At any undoable phase these determine +// where to undo. +meshQualityControls +{ + // Specify mesh quality constraints in separate dictionary so can + // be reused (e.g. checkMesh -meshQuality) + #include "meshQualityDict" + + // Advanced + + // Number of error distribution iterations + nSmoothScale 4; + // amount to scale back displacement at error points + errorReduction 0.75; +} + + +// Advanced + +// Merge tolerance. Is fraction of overall bounding box of initial mesh. +// Note: the write tolerance needs to be higher than this. +mergeTolerance 1e-6; + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/topoSetDict b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/topoSetDict new file mode 100644 index 0000000000..201e6ff996 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/addLayersToFaceZone/system/topoSetDict @@ -0,0 +1,88 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object topoSetDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +actions +( + // FaceZone A + { + name leftA; + type cellSet; + action new; + source boxToCell; + sourceInfo + { + box (-100 -100 -100) (2 100 100); + } + } + { + name A; + type faceSet; + action new; + source boxToFace; + sourceInfo + { + box (1.999 -100 -100) (2.001 100 100); + } + } + { + name A; + type faceZoneSet; + action new; + source setsToFaceZone; + sourceInfo + { + faceSet A; // name of faceSet + cellSet leftA; // name of cellSet of slave side + } + } + + + // FaceZone B + { + name leftB; + type cellSet; + action new; + source boxToCell; + sourceInfo + { + box (-100 -100 -100) (8 100 100); + } + } + { + name B; + type faceSet; + action new; + source boxToFace; + sourceInfo + { + box (7.999 -100 -100) (8.001 100 100); + } + } + { + name B; + type faceZoneSet; + action new; + source setsToFaceZone; + sourceInfo + { + faceSet B; // name of faceSet + cellSet leftB; // name of cellSet of slave side + } + } +); + +// ************************************************************************* //