Each edge is tested separately to see if it should be tagged for refinement or derefinement.
c = a user supplied tolerance
f(i) = value of the field variable f at node i
L = length of the edge
For the edge between nodes 1 and 2, we have
1) Junction: Refine if the edge field values straddle c.
Tag for refinement if f(1) > c and f(2) < c or f(1) < c and f(2) > c
example: For c = 0, refine if f changes sign across the edge.
2) Constant: Refine if the edgeís field values exceed c.
Tag for refinement if f(1) > c or f(2) > c
3) Maxsize: Refine if the edge length exceeds c.
Tag if l > c
4) Delta: Refine if the magnitude of the difference of the field values at the edge ends exceeds c.
Tag if f(1) - f(2) > c
5) Lambda Refine: Refine if lambda/dx < c. Where dx is a scale length (here taken to be the edge length).
Generally lambda/dx is a quality measure of the discretization. A larger value of usually indicates a better grid discretization. There are some special cases. If one of the field values is zero as could happen on a boundary, then lambda/dx 1/2. If f(1) is equal to f(2) then lambda/dx is divergent but the algorithm uses a small number e = .000001 added to the denominator lambda/dx to give a large but finite value of lambda/dx thus indicating a good discretization.