The mesh refinements are done in a shape-regular manner. So each triangle is split into 4 smaller triangles, by adding edges between midpoints of the edges. So all the degrees of freedom from the P2 element get used.

Additionally, because the quadratic elements converge so fast, the mesh size h used for the P2 calculation was typically 8 times larger than that used for the P1 calculation (ie each triangle is subdivided into 64 smaller triangles). This varied, though – close to the equilateral triangle case the error criteria are harder to meet. This observation is heuristic.

]]>However, I am relying on the fact that as long as the extrema of both $u_h$ and the interpolations are *somewhere* inside the small triangles (in their appropriate tesselations) at the corner of PQR, then from previous results, the value must be at the boundary.

If the extreme values lay on nodes associated with other small triangles, we would indeed be in trouble, and would then have to look at the gradients, and subdivide further.

There’s a better way to do all of this, bypassing the interpolation step. This was described somewhere this earlier: since we have the coefficients in the local basis of $u_h$ on each small triangle, we can use these to find the location of the extrema on each little triangle quasi-analytically (analytic formula, value computed in finite precision).

My code for this was buggy, and I confess I stopped working on it while gearing up for the next term. I can devote some time to fixing this after next week. Or maybe someone else has code which already does this?

]]>My concern is as follows:

Suppose I have a 2nd order polynomial in a triangle and then I add one vertex to the center (dividing it into three sub-triangles) and then look at its projection onto the space of piecewise linear functions (interpolated from values assigned to the corners of the triangle and the new vertex in the center), It seems that wouldn’t give enough information to tell whether the maximum of was on the boundary. It seems that without knowing some details about the nature of the number of sub-triangles I need to accurately locate the maximum could be arbitrarily large.

]]>I refine the tesselations for the P2 approximation until the tolerance is met, or until the number of vertices in the tesselation exceeds a value $M$. This is chosen based on the memory limitations of the cluster I’m working on – the matrices associated with the P2 approximations get big! Once the discrete eigenfunction is computed (usually using far fewer than M vertices because of quadratic convergence), I tesselate so the number of vertices is F=2M, and interpolate by piecewise linears. I tried to put this into the algorithm in Section 3.1, but should add a clearer explanation.

At some point I tried to use an adaptive strategy to locate this F. Here is how it worked: I have a function $u_h$. I construct a tesselation with $L$ nodes, and interpolate $u_h$ onto it. I used a standard estimator to adapt the mesh so as to have the interpolant approximate $u_h$ well. However, since $u_h$ is only piecewise smooth, I wasn’t able to use rigorous theorems on the adaptive strategy. So, instead I stayed with a regular refinement as described above, for which I know the interpolation error estimates.

Clearly all of this could be done better! Ideally there would be some optimization software in interval arithmetic which one could use instead. But this is an area I’m not familiar with at all.

]]>The other approach I tried was using combinations of Bessel functions to achieve approximations globally, like Betcke+Trefethen. Unfortunately, there are no proofs of convergence for this method for the Neumann eigenvalue problem on polygonal domains. This would again be problematic from the point of view of validated numerics.

The FEM calculations, together with results on the smooth (not oscillating on a fast scale) nature of the eigenfunctions, show that the extremum is definitely near the the vertices (within the tiny triangles $\tau_h$ within 2 mesh lengths of the corners). Numerically, the difference between the max and min of the eigenfunctions is quite large, and the region in the middle of the triangle has values which are well away from the max and min values.

The subsampling strategies show numerically that the extrema are at the vertices.

So your suggestion of using a combination of the FEM approximation away from the corners, and the theoretical argument near the corners, is an excellent one.

]]>You mentioned at some previous point that you had considered using Bessel function expansions near the vertices instead of polynomial splines, but here it seems you are using exclusively polynomial splines for the finite element method. I guess the problem is that it is too hard to match up the Bessel pieces with the polynomial pieces?

One thing about the stability bounds in my notes (involving the quantity X) is that we’ll need bounds on X for all points in the parameter space, not just on a finite mesh, before we can compare an arbitrary eigenfunction with an eigenfunction from one of the points on the mesh. But perhaps we can get some theoretical bounds on the derivative of X with respect to the angle parameters that would take care of this. (This would require some rigorous bounds on the digamma function etc. In principle, everything in X is real analytic, so if the theoretical bounds on the first derivatives of X are inadequate, perhaps we can then move on to theoretical bounds on second or higher derivatives, and compute lower order derivatives on the mesh numerically and use Taylor expansion to put everything together.)

My guess is that we won’t need to precisely locate the extrema for the finite element approximations, but we just need to show that in regions sufficiently far from the vertices, these approximate eigenfunctions are significantly smaller than the values at the vertices. For regions near the vertices, I think we can use a theoretical argument instead (I started some work on this at http://michaelnielsen.org/polymath1/index.php?title=Stability_of_eigenfunctions#Another_Sobolev_bound but it is incomplete, I will start looking at this issue again.)

]]>