Assume I start with an 8x8 coarse mesh (see Fig 1) where the vertices (except boundary vertices) represent the unknown variable.

Figure 1 - coarsest mesh

After iterative approximation - I find 2 vertices (unknowns) where the error exceeds a certain bound (see Figure 2 red dots).

Red dots show high error vertices

Now I further refine the red dots (high error points) (see Figure 3 - only 1 red dot refinement shown).

Green X's - new unknowns, red X's - hanging nodes

My questions are:

  1. Can I interpolate/prolongate the red X's (hanging nodes) from black X's of the coarser grid ? i.e. I don't need to solve PDE there.
  2. Do the black X's and red X's become boundaries for green X's ? (I want to apply Finite Difference at green X's).
  3. I believe refinement can be done to any level but generally a 2:1 balance is maintained to have a single hanging node per edge (in 2-D). Do we refine multiple times before updating or just once ?
  4. I will be using a quad tree with each tree node containing 4 vertices (with ownership status) - for a vertex centred finite difference implementation but it will require querying adjacent neighbours (H. Samet, 1982 paper) which looks in-efficient. Any suggestions on this ?

Discretizations of partial differential equations "enjoy" a property called error pollution that means that if you don't exactly satisfy the equation at one location (such as the points you identified on the first mesh) as evidenced by the fact that your residual is nonzero there, then that will produce an error elsewhere as well.

As a consequence, it is not enough to just solve again on the patch of smaller cells in the vicinity of the point you identified where the error is large. This is so because you may make the error smaller on the patch that way, but you're not going to make the error smaller in the rest of the domain unless you solve a global problem, i.e., including the rest of the mesh. Consequently, the approach is not to interpolate from the black X's to the red X's and then to solve on the green X's, but to solve the whole problem on the entire mesh.

For your question 3: You can refine multiple times. In your case, I'd refine around both of the points where you know that the error is large, and only then solve again.

  • $\begingroup$ Many thanks. What I inferred from your answer is that even the hanging nodes are treated as unknowns and that the PDE should be solved on them as well as all the other points. I further suppose that I'll need to use non-uniform mesh finite differences at some points. $\endgroup$ Jan 30 '16 at 16:03
  • $\begingroup$ Yes, you need a non-uniform mesh finite difference stencil at some points. The hanging nodes can be treated in different ways, but most frequently we simply assume that their values are linear combinations of the values of adjacent vertices (where the linear combinations are computed based on the geometry, not on the equations). $\endgroup$ Jan 31 '16 at 18:03
  • $\begingroup$ Many thanks Prof. Bangerth. You're answers are very helpful. $\endgroup$ Feb 1 '16 at 13:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.