Difference between revisions of "Parameter Definitions - dynamicRefineFvMesh"

From OpenFOAMWiki
(Buffer Layers)
(UnRefine Level)
 
Line 43: Line 43:
 
== UnRefine Level ==
 
== UnRefine Level ==
  
   unrefineLevel 10;
+
   unrefineLevel 0.0005;
  
This specifies the max number of times the cells can be coarsened.  This works on the same principle of snappyHexMesh.  The level you specify is really a power of 2.  So in this case, the unrefineLevel states that cells can increase by a maximum factor of 2^10 = 1024 times their original size.  This gets to specify a maximum coarsening limit.  You typically want this to be a large number of levels.
+
When the value of the desired quantity in a cell falls below this value, the cell will be coarsened. Note that the mesh cannot be coarser than the original mesh you supply.
 
+
They do not specify the level of refinement.  The coarsening level is the opposite of the mesh refinement levels specified in snappyHexMesh.  Higher numbers here mean more layers of coarsening.
+
  
 
== Max Refinement ==
 
== Max Refinement ==

Latest revision as of 20:03, 8 December 2020

dynamicRefineFvMesh does not morph the mesh shape. Instead, it performs topological refinements to the mesh, based on the value of specified fields. This is useful for cases like sonic shockwaves. Situations where you have a large region with relatively little change in field variables, and a small section with rapid and extreme change in field variables.

If this small section is stationary, don't use the dynamicRefineFvMesh. It is far more efficient to manually specify a mesh refinement. But if that segment of high field gradients travels, then dynamicRefineFvMesh may be the tool you need. It will automatically refine the mesh to adapt to the high gradient region, and then coarsen the mesh again then the high gradient region passes. Be warned, this can be computationally intensive. It may not always be the best way to speedup your runs.

1 Example Interface

   dynamicFvMesh dynamicRefineFvMesh;
   dynamicRefineFvMeshCoeffs
   {
       refineInterval 1;
       field alpha1;
       lowerRefineLevel 0.001;
       upperRefineLevel 0.999;
       unrefineLevel 10;
       nBufferLayers 1;
       maxRefinement 2;
       maxCells 200000;
       correctFluxes (( phi none) (nHatf none) (rhoPhi none) (ghf none) );
       dumpLevel true;
   }

2 Coefficient Definitions

2.1 Refine Interval

 refineInterval 1;

This specifies how often mesh refinement should be performed. The interval is the number of outer iterations between mesh refinements. You can also think of this as the number of timesteps between refinements.

2.2 Field

 field alpha1;

The field specifies which field the dictionary shall use to determine mesh refinements. Fields can be scalar or vector. If a vector field is used, the dictionary will utilize the vector magnitude of that field. Only one field can be specified for mesh refinement.

2.3 Lower and Upper Refine Level

 lowerRefineLevel 0.001;
 upperRefineLevel 0.999;

These specify the limits of when to trigger mesh refinement or coarsening. The limits you specify here match values of the field variable you specified. Any field values below the lowerRefineLevel will trigger mesh refinement. Any field values above the upperRefineLevel will trigger mesh coarsening.

2.4 UnRefine Level

 unrefineLevel 0.0005;

When the value of the desired quantity in a cell falls below this value, the cell will be coarsened. Note that the mesh cannot be coarser than the original mesh you supply.

2.5 Max Refinement

 maxRefinement 3;

The maximum number of layers of refinement that a cell can experience. This is similar to the unrefineLevel, only now we are considering refinement, not coarsening. Again, the refinement level specifies a power of 2. So a max refinement of 3 is 2^-3 = 0.125 times the original cell size. This refinement is relative to whatever the current cell size is. Use this to prevent cells from getting ridiculously small. Typical values are in the range of 2 - 4. Be wary of going to higher refinement levels as it can quickly escalate to tiny mesh sizes.

2.6 Buffer Layers

 nBufferLayers 1;

The number of buffer layers between levels around a refined cell. This specifies how many layers the mesh must hold a cell size before proceeding to the next level of refinement (or coarsening). Typical ranges are between 1 - 4. A good starting value is 1.0. Use this control to smooth out the transitions between cell sizes and eliminate any artificial pressure waves due to drastic changes in cell size.

2.7 Max Cells

 maxCells 150000000;

Use this to control the total number of cells in your mesh. The dynamic refinement will not exceed this maximum number of cells in your domain.

2.8 Correct Fluxes

 correctFluxes
 (
   (phi none) (phie Urel) (phi U)
   (alpha none)
   (rho*phi none)
 );

This is a list of fields that require flux correction. In this field, include any entries that need flux correction. Refinement will split cells that already have field definitions within them. This entry specifies which fields need fluxes correct for the new cell faces. The correctFluxes parameter is a list of field definitions and matched velocity field. For each pair, specify a flux field and corresponding velocity field. Fluxes changed on faces get recalculated by interpolating the velocity. Use 'none' on surfaceScalarFields that do not need to be reinterpolated.

2.9 Dump Level

 dumpLevel true;

This writes the refinement level for each cell as a volScalarField. This is useful for debugging to visualize the distribution of mesh refinements on your simulation.

3 User Notes

Add your own tips and tricks from using this dictionary. Any bugs we should know about?