OOF2: The Manual


Refine (Refine) — Subdivide elements.




  • Base class: SkeletonModifier
  • Parameters:

    Target elements to be refined. Type: An object of the RefinementTarget class.
    Exclude certain elements. Type: An object of the RefinementCriterion class.
    Preferred way of subdividing a side. Type: An object of the RefinementDegree class.
    alpha controls the relative importance of element shape and homogeneity. alpha=0 emphasizes shape and ignores homogeneity. alpha=1 emphasizes homogeneity and ignores shape. Type: A real number in the range [0, 1].


Refine is a SkeletonModifier that chops its target elements and their neighbors into smaller pieces. This adds more degrees of freedom to the Skeleton, which allows it to adapt better to the Microstructure. Refinement by itself is rarely sufficient to create an acceptable Skeleton -- it must be combined with other modifiers that move nodes, such as SnapNodes or Anneal.

The steps involved in refining a Skeleton are:

  1. Find the element edges (Segments) that need to be refined. These are specified by the targets parameter, whose value is a RefinementTarget object. Different kinds of RefinementTarget objects pick segments in different ways, for example, by choosing all edges of heterogeneous elements or the long edges of skinny elements. See RefinementTarget for the details.

    The criterion parameter is used to exclude certain elements and segments from the marking process. Setting it to Unconditional means that all elements and segments are possible candidates for refinement.

    Figure "Refining a Skeleton" (a) shows a Skeleton that needs to have its heterogeneous elements refined. Setting targets to CheckHomogeneity(threshold=1) marks the edges of all elements whose homogeneity is less than 100%, as shown in Figure "Refining a Skeleton" (b).

  2. Sometimes the way in which the elements will be subdivided (determined by the degree parameter) requires extra segments to be marked. In these cases a second pass is made through the Skeleton, marking additional segments.

  3. After the segments are marked, each element is replaced by a suitable collection of smaller elements, such that each marked segment of the old Skeleton turns into a set number of segments of the new Skeleton. Exactly how this is done depends on the setting of the degree parameter, which determines both how many new edges replace each old edge, and how the new elements are arranged within the old element. (For details, see the descriptions of RefinementDegree and RuleSet.) The rules sometimes allow more than one way of subdividing an element. In those cases, the total effective energy of the new elements is computed, and the configuration with the lowest energy is used. The parameter alpha determines the relative contributions of shape and homogeneity to the effective energy, as discussed in Section

    Figure "Refining a Skeleton" (c) shows the result of refining a mesh using degree=Bisection(rule_set='liberal') and alpha=1.

Figure 6.92. Refining a Skeleton

Refining a Skeleton

a) A Skeleton ripe for refinement.

Refining a Skeleton

b) The CheckHomogeneity(threshold=1) RefinementTarget operator marks the edges of the heterogeneous elements. The marked edges are drawn in bold. (In actual OOF2 operation, the marked edges are not shown.)

Refining a Skeleton

c) The final result of refining the marked edges with degree set to Bisection(rule_set='liberal').

[Caution] Caution

One should not abuse Refinement to the point where elements become too small. Figure 6.93 shows a part of Skeleton that has been refined to the pixel resolution -- each element represents a pixel. This is not only unphysical (the jagged pixel boundaries are an artifact of the digitization of the micrograph) but can introduce unnecessary numerical anomalies, such as stress concentrations, at corner nodes.

Instead of abusing refinement, it is better to employ other modification strategies. Figure 6.94 shows the same portion of the Skeleton shown in Figure 6.93 but with different modification tools applied. This Skeleton has been refined less, but the elements have been adapted to the Microstructure with Anneal and SnapNodes.

Figure 6.93. Excessive Refinement

Excessive Refinement

A part of a Skeleton that has been refined to the pixel resolution.

Figure 6.94. Appropriate Refinement

Appropriate Refinement

Instead of excessive refinement, other tools have been applied.

As seen, refining too much does not necessarily yield an optimal result. One can, however, prevent this over-refinement by adjusting the refinement criterion. Setting it to MinimumArea causes OOF2 to reject any refinement that results in an element whose area is smaller than a specified value.