File: snappyHexMeshDict

package info (click to toggle)
openfoam 1812%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 220,284 kB
  • sloc: cpp: 1,038,902; sh: 14,536; ansic: 8,240; lex: 657; xml: 387; python: 300; awk: 212; makefile: 94; sed: 88; csh: 3
file content (796 lines) | stat: -rw-r--r-- 29,554 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v1812                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      snappyHexMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// Which of the steps to run
castellatedMesh true;
snap            true;
addLayers       false;


// Optional: single region surfaces get patch names according to
//           surface only. Multi-region surfaces get patch name
//           surface "_ "region. Default is true
// singleRegionName false;

// Optional: avoid patch-face merging. Allows mesh to be used for
//           refinement/unrefinement
// mergePatchFaces    false; // default true

// Optional: preserve all generated patches. Default is to remove
//          zero-sized patches.
// keepPatches true;


// Geometry. Definition of all surfaces. All surfaces are of class
// searchableSurface.
// Surfaces are used
// - to specify refinement for any mesh cell intersecting it
// - to specify refinement for any mesh cell inside/outside/near
// - to 'snap' the mesh boundary to the surface
geometry
{
    box1x1x1
    {
        type searchableBox;
        min (1.5 1 -0.5);
        max (3.5 2 0.5);
    }

    // Shell for directional refinement
    wakeBox
    {
        type searchableBox;
        min (1.5 1 -0.5);
        max (3.5 2 0.5);
    }

    sphere.stl
    {
        type triSurfaceMesh;

        //tolerance   1E-5;   // optional:non-default tolerance on intersections
        //maxTreeDepth 10;    // optional:depth of octree. Decrease only in case
                              // of memory limitations.

        // Per region the patchname. If not provided will be <surface>_<region>.
        // Note: this name cannot be used to identity this region in any
        //       other part of this dictionary; it is only a name
        //       for the combination of surface+region (which is only used
        //       when creating patches)
        regions
        {
            secondSolid
            {
                name mySecondPatch;
            }
        }
    }

    sphere2
    {
        type searchableSphere;
        centre  (1.5 1.5 1.5);
        radius  1.03;
    }
};


// 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
    // <= minRefinementCells cells are selected for refinement. Note: it will
    // at least do one iteration unless
    //  a: the number of cells to refine is 0
    //  b: minRefinementCells = -1. This is a special value indicating
    //     no refinement.
    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
    (
        //{
        //    file "someLine.eMesh";
        //    //level 2;        // Have level 2 for all cells intersected
        //                      // by feature.
        //    levels ((0.1 2)); // Have level 2 for all cells within
        //                      // 0.1 of feature.
        //}
    );


    // 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
    {
        sphere.stl
        {
            // Surface-wise min and max refinement level
            level (2 2);

            // Optional region-wise level specification
            regions
            {
                secondSolid
                {
                    level (3 3);
                }
            }

            // Optional specification of patch type (default is wall). No
            // constraint types (cyclic, symmetry) etc. are allowed.
            patchInfo
            {
                type patch;
                inGroups (meshedPatches);
            }


            //- Optional increment (on top of max level) in small gaps
            //gapLevelIncrement 2;

            //- Optional angle to detect small-large cell situation
            //  perpendicular to the surface. Is the angle of face w.r.t.
            //  the local surface normal. Use on flat(ish) surfaces only.
            //  Otherwise leave out or set to negative number.
            //perpendicularAngle 10;

            //- Optional faceZone and (for closed surface) cellZone with
            //  how to select the cells that are in the cellZone
            //  (inside / outside / specified insidePoint)
            //  The orientation of the faceZone is
            //  - if on cellZone(s) : point out of (minimum) cellZone
            //  - if freestanding   : oriented according to surface

            //faceZone sphere;
            //cellZone sphere;
            //cellZoneInside inside;    // outside/insidePoint
            //insidePoint    (1 1 1);   // if (cellZoneInside == insidePoint)

            //- Optional specification of what to do with faceZone faces:
            //      internal : keep them as internal faces (default)
            //      baffle   : create baffles from them. This gives more
            //                 freedom in mesh motion
            //      boundary : create free-standing boundary faces (baffles
            //                 but without the shared points)
            //faceType baffle;
        }
    }

    // Feature angle:
    // - used if min and max refinement level of a surface differ
    // - used if feature snapping (see snapControls below) is used
    resolveFeatureAngle 30;

    //- Optional increment (on top of max level) in small gaps
    //gapLevelIncrement 2;


    // Planar angle:
    // - used to determine if surface normals
    //   are roughly the same or opposite. Used
    //      - in proximity refinement
    //      - to decide when to merge free-standing baffles
    //        (if e.g. running in surfaceSimplify mode set this to 180 to
    //         merge all baffles)
    //      - in snapping to avoid snapping to nearest on 'wrong' side
    //        of thin gap
    //
    // If not specified same as resolveFeatureAngle
    planarAngle 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
    {
        box1x1x1
        {
            mode inside;
            levels ((1.0 4));
        }
        //sphere.stl
        //{
        //    mode inside;
        //    levels ((1.0 4));
        //    // Optional override of uniform refinement level such
        //    // that in small gaps we're getting more cells.
        //    // The specification is
        //    //  - numGapCells : minimum number of cells in the gap
        //    //                  (usually >3; lower than this might not
        //    //                   resolve correctly)
        //    //  - minLevel    : min refinement level at which to kick in
        //    //  - maxLevel    : upper refinement level (to avoid refinement
        //    //                  continuing on a single extraneous feature)
        //    // All three settings can be overridden on a surface by
        //    // surface basis in the refinementSurfaces section.
        //    gapLevel (<numGapCells> <minLevel> <maxlevel>);
        //    // Optional: when doing the gapLevel refinement directly remove
        //    //           based on orientation w.r.t. gap. This limits the
        //    //           amount of cells before doing the 'locationInMesh'
        //    //           cell selection. Default is 'mixed' i.e. keep cells
        //    //           whilst doing the gap-level refinement.
        //    //gapMode inside;  // inside/outside/mixed
        //}

        //wakeBox
        //{
        //    mode        inside;
        //    // Dummy base level
        //    levels      ((10000 0));
        //
        //    // Optional directional refinement (after all other refinement)
        //    // Directional refinement
        //    // for all cells according to 'mode' ('inside' or 'outside';
        //    // 'distance' not supported) and within certain range. E.g.
        //    //  - for all cells with level 2-5
        //    //  - do one split in x direction
        //    levelIncrement  (2 5 (1 0 0));
        //
        //    // Note
        //    // - ignores 'levels' and gap* settings.
        //    // - the cellLevel/pointLevels files are no longer consistent
        //    //   with the mesh, the resulting mesh is no longer compatible
        //    //   with e.g. dynamic refinement/unrefinement.
        //    // - cellLevel will include any directional refinement
        //    //   (i.e. it will be the maximum of all three directions)
        //}

        //wakeBox
        //{
        //    mode        inside;
        //    // Dummy base level
        //    levels      ((10000 0));
        //
        //    // Optional directional refinement (after all other refinement)
        //    // Directional refinement
        //    // for all cells according to 'mode' ('inside' or 'outside';
        //    // 'distance' not supported) and within certain range. E.g.
        //    //  - for all cells with level 2-5
        //    //  - do one split in x direction
        //    levelIncrement  (2 5 (1 0 0));
        //
        //    // Note
        //    // - ignores 'levels' and gap* settings.
        //    // - the cellLevel/pointLevels files are no longer consistent
        //    //   with the mesh, the resulting mesh is no longer compatible
        //    //   with e.g. dynamic refinement/unrefinement.
        //    // - cellLevel will include any directional refinement
        //    //   (i.e. it will be the maximum of all three directions)
        //
        //    // Optional directional expansion-ratio smoothing (after all
        //    // refinement). This will try to smooth out edge/cell size jumps
        //    // Specify smoothing direction and number of iterations
        //    smoothDirection     (1 0 0);
        //    // Smoothing of expansion ratio
        //    nSmoothExpansion    100;
        //    // Smoothing of positions
        //    nSmoothPosition     100;
        //}
    }



    // Optionally limit refinement in geometric region. This limits all
    // refinement (from features, refinementSurfaces, refinementRegions)
    // in a given geometric region. The syntax is exactly the same as for the
    // refinementRegions; the cell level now specifies the upper limit
    // for any cell. (a special setting is cell level -1 which will remove
    // any cells inside the region). Note that it does not override the
    // refinement constraints given by the nCellsBetweenLevels setting.
    limitRegions
    {
    }


    // 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. This is the unzoned part of the mesh.
    //    All the 'zoned' surfaces are marked as such
    //    in the refinementSurfaces with the faceZone and cellZone keywords.
    //    It is illegal to have the locationInMesh inside a surface for which
    //    a cellZone is specified.
    //
    // 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. The special name 'none' is
    //    used to indicate the unzoned/background part of the mesh.


        // 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.
        // Not used if there are no faceZones. The behaviour has changed
        // with respect to previous versions:
        //  true  : all intersections with surface are put in faceZone
        //          (same behaviour as before)
        //  false : depending on the type of surface intersected:
        //      - if intersecting surface has faceZone only (so no cellZone)
        //        leave in faceZone (so behave as if set to true) (= changed
        //        behaviour)
        //      - if intersecting surface has faceZone and cellZone
        //        remove if inbetween same cellZone or if on boundary
        //        (same behaviour as before)
        allowFreeStandingZoneFaces true;



        // 2. Specify multiple locations with optional cellZones for the
        //    regions (use cellZone "none" to specify the unzoned cells)
        //    FaceZones are automatically constructed from the
        //    names of the cellZones: <cellZoneA> _to_ <cellZoneB>
        //    where the cellZoneA is the lowest numbered cellZone (non-cellZone
        //    cells are in a special region called "none" which is always
        //    last).

        locationsInMesh
        (
            ((-0.09 -0.039 -0.049)  bottomAir)  // cellZone 0
            ((-0.09 0.009 -0.049)   topAir)     // cellZone 1
            ((-0.09 0.001 -0.049)   leftSolid)  // cellZone 2
            ((0.02  0.001 -0.049)   rightSolid) // cellZone 3
            ((-0.001 -0.039 0.0015) heater)     // cellZone 4
        );

        // Per synthesised faceZone name the faceType and type of baffles to
        // create
        faceZoneControls
        {
            bottomAir_to_heater
            {
                // Optional specification of patch type (default is wall). No
                // constraint types (cyclic, symmetry) etc. are allowed.
                patchInfo
                {
                    type patch;
                    inGroups (patchPatches);
                }
                faceType baffle;
            }
        }



    // Optional locations that should not be reachable from
    // location(s)InMesh
    locationsOutsideMesh ((100 100 100));

    // Optional: do not remove cells likely to give snapping problems
    // handleSnapProblems false;

    // Optional: switch off topological test for cells to-be-squashed
    //           and use geometric test instead
    //useTopologicalSnapDetection false;

    // Optional: do not refine surface cells with opposite faces of
    //           differing refinement levels
    //interfaceRefine false;

    // Optional: use an erosion instead of region assignment to allocate
    //           left-over cells to the background region (i.e. make cellZones
    //           consistent with the intersections of the surface).
    //           Erosion is specified as a number of erosion iterations.
    //           Erosion has less chance of bleeding and changing the zone
    //           for a complete region.
    //nCellZoneErodeIter 2;
}

// Settings for the snapping.
snapControls
{
    // Number of patch smoothing iterations before finding correspondence
    // to surface
    nSmoothPatch 3;

    // Optional: number of smoothing iterations for internal points on
    // refinement interfaces. This will reduce non-orthogonality on
    // refinement interfaces.
    //nSmoothInternal $nSmoothPatch;

    // Maximum relative distance for points to be attracted by surface.
    // True distance is this factor times local maximum edge length.
    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;

    // (wip) disable snapping to opposite near surfaces (revert to 22x
    //  behaviour)
    // detectNearSurfacesSnap false;


    // Feature snapping

        // Number of feature edge snapping iterations.
        // Leave out altogether to disable.
        nFeatureSnapIter 10;

        // Detect (geometric only) features by sampling the surface
        // (default=false).
        implicitFeatureSnap false;

        // Use castellatedMeshControls::features (default = true)
        explicitFeatureSnap true;

        // Detect features between multiple surfaces
        // (only for explicitFeatureSnap, default = false)
        multiRegionFeatureSnap false;


        //- When to run face splitting (never at first iteration, always
        //  at last iteration). Is interval. Default -1 (disabled)
        //nFaceSplitInterval 5;


        // (wip) Optional for explicit feature snapping:
        //- Detect baffle edges. Default is true.
        //detectBaffles false;
        //- On any faces where points are on multiple regions (see
        //  multiRegionFeatureSnap) have the other points follow these points
        //  instead of having their own independent movement, i.e. have snapping
        //  to multi-region edges/points take priority. This might aid snapping
        //  to sharp edges that are also region edges. The default is false.
        //releasePoints true;
        //- Walk along feature edges, adding missing ones. Default is true.
        //stringFeatures false;
        //- If diagonal attraction also attract other face points. Default is
        //  false
        //avoidDiagonal true;
        //- When splitting what concave faces to leave intact. Default is 45
        //  degrees.
        //concaveAngle 30;
        //- When splitting the minimum area ratio of faces. If face split
        //  causes ratio of area less than this do not split. Default is 0.3
        //minAreaRatio 0.3;
        //- Attract points only to the surface they originate from. Default
        //  false. This can improve snapping of intersecting surfaces.
        //  strictRegionSnap true;
}

// 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 true;

    // Layer thickness specification. This can be specified in one of following
    // ways:
    // - expansionRatio and finalLayerThickness (cell nearest internal mesh)
    // - expansionRatio and firstLayerThickness (cell on surface)
    // - overall thickness and firstLayerThickness
    // - overall thickness and finalLayerThickness
    // - overall thickness and expansionRatio
    //
    // Note: the mode thus selected is global, i.e. one cannot override the
    //       mode on a per-patch basis (only the values can be overridden)

        // 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;

        // Wanted thickness of the layer next to the wall.
        // If relativeSizes this is relative to undistorted size of cell
        // outside layer.
        //firstLayerThickness 0.3;

        // Wanted overall thickness of layers.
        // If relativeSizes this is relative to undistorted size of cell
        // outside layer.
        //thickness 0.5


    // 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 or faceZone (so not geometry!) the layer information
    // Note: This behaviour changed after 21x. Any non-mentioned patches
    //       now slide unless:
    //          - nSurfaceLayers is explicitly mentioned to be 0.
    //          - angle to nearest surface < slipFeatureAngle (see below)
    layers
    {
        sphere.stl_firstSolid
        {
            nSurfaceLayers 1;

        }
        maxY
        {
            nSurfaceLayers 1;
            // Per patch layer data
            expansionRatio      1.3;
            finalLayerThickness 0.3;
            minThickness        0.1;
        }

        // Disable any mesh shrinking and layer addition on any point of
        // a patch by setting nSurfaceLayers to 0
        frozenPatches
        {
            nSurfaceLayers 0;
        }
    }

    // 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 1.7.x! (didn't do anything in 1.7.x)
    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. Note: was not working correctly < 1806
        featureAngle 120;

        // When to merge patch faces. Default is featureAngle. Useful when
        // featureAngle is large.
        //mergePatchFacesAngle 45;

        // 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;



    // Choice of mesh shrinking algorithm

        // Optional mesh shrinking algorithm (default is displacementMedialAxis)
        // The displacementMotionSolver is a wrapper around the displacement
        // motion solvers. It needs specification of the solver to use and
        // its control dictionary.
        //meshShrinker displacementMotionSolver;
        //solver displacementLaplacian;
        //displacementLaplacianCoeffs
        //{
        //    diffusivity quadratic inverseDistance
        //    (
        //        sphere.stl_firstSolid
        //        maxY
        //    );
        //}
        // Note that e.g. displacementLaplacian needs entries in
        // fvSchemes, fvSolution. Also specify a minIter > 1 when solving
        // cellDisplacement since otherwise solution might not be sufficiently
        // accurate on points.


    // Medial axis analysis (for use with default displacementMedialAxis)

        // Angle used to pick up medial axis points
        // Note: changed(corrected) w.r.t 1.7.x! 90 degrees corresponds to 130
        // in 1.7.x.
        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;

        // Optional: limit the number of steps walking away from the surface.
        // Default is unlimited.
        //nMedialAxisIter 10;

        // Optional: smooth displacement after medial axis determination.
        // default is 0.
        //nSmoothDisplacement 90;

        // (wip)Optional: do not extrude any point where
        //   (false) : all surrounding faces are not fully extruded
        //   (true)  : all surrounding points are not extruded
        // Default is false.
        //detectExtrusionIsland true;

        // Optional: do not extrude around sharp edges if both faces are not
        // fully extruded i.e. if one of the faces on either side would
        // become a wedge.
        // Default is 0.5*featureAngle. Set to -180 always attempt extrusion
        //layerTerminationAngle 25;

        // Optional: disable shrinking of edges that have one (or two) points
        // on an extruded patch.
        // Default is false to enable single/two cell thick channels to still
        // have layers. In <=1806 this was true by default. On larger gaps it
        // should have no effect.
        //disableWallEdges true;

        // 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;


    // Mesh shrinking

        // Create buffer region for new layer terminations, i.e. gradually
        // step down number of layers. Set to <0 to terminate layer in one go.
        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"


    // Optional : some meshing phases allow usage of relaxed rules.
    // See e.g. addLayersControls::nRelaxedIter.
    relaxed
    {
        // Maximum non-orthogonality allowed. Set to 180 to disable.
        maxNonOrtho 75;
    }


    // Advanced

        // Number of error distribution iterations
        nSmoothScale 4;
        // amount to scale back displacement at error points
        errorReduction 0.75;
}

// Advanced

//// Debug flags
//debugFlags
//(
//    mesh            // write intermediate meshes
//    intersections   // write current mesh intersections as .obj files
//    featureSeeds    // write information about explicit feature edge
//                    // refinement
//    attraction      // write attraction as .obj files
//    layerInfo       // write information about layers
//);
//
//// Write flags
//writeFlags
//(
//    scalarLevels    // write volScalarField with cellLevel for postprocessing
//    layerSets       // write cellSets, faceSets of faces in layer
//    layerFields     // write volScalarField for layer coverage
//);


//// Format for writing lines. E.g. leak path. Default is vtk format.
//setFormat ensight;

// Merge tolerance. Is fraction of overall bounding box of initial mesh.
// Note: the write tolerance needs to be higher than this.
mergeTolerance 1e-6;

// ************************************************************************* //