It seems reasonable that the mesh needs to be very fine only near the boundary, where the initial datum is discontinuous. You may try the option MeshRefinementFunction
.
The purpose to make the input exact instead of floating-point is good. In your case it could be done more easily by giving exact parameters at the start. Instead of floating point values, as in
\[Eta] = 5.;
\[Kappa] = .75;
Tmax = 5.;
I would suggest
\[Eta] = 5;
\[Kappa] = 3/4;
Tmax = 5;
This way there is no need for Rationalize
. Even more: with your original floating-point \[Eta] = 5.
the triangle definition
\[CapitalOmega] =
Polygon[Rationalize[{{0, 0}, {\[Eta],
0}, {\[Eta]/2, (\[Eta] Sqrt[3])/2}},
0]]
actually decreases the precision, because \[Eta] Sqrt[3])/2
becomes first floating-point, and then Rationalize
freezes the approximation instead of the exact value.