Extreme Vasicek is not Extreme Enough

Recently, in Extreme Vasicek, I showed some results, when the (absolute) volatility of a Vasicek model was by a factor 50 or so higher than it occurs in reality.

I confess: I was so satisfied with the quality of our results that I did not ask the correct question: Is this high volatility really a difficult case?

High volatility adds diffusion to the differential equation which should be then easy to be solved as long as you use implicit or semi-implicit schemes. Standard finite element or fintie difference schemes (with central differences used as approximation for the first order derivatives) might get into troubles, when convection gets dominant. In the Vasicek exmaple, this means that volatility should be low, reversion speed should be high for the test case.
 Therefore, we now try
(1)    a = 0.05,    b = 0.5,    sigma = 0.005

and

(2)    a = 0.05,    b = 0.5,    sigma = 0.0005

and calculate the prices V of the 10 years zero coupon bond for an initial short rate r = 0.

The analytic solution gives
(1)  V= 0.4489
and
(2) V = 0.4487.

We use Dirichlet conditions V=1 at r = -0.4 and at r = 0.4 and compare to numerical schemes
(a) fully implicit time-stepping, central differences for first derivatives
(b) fully implicit time-stepping, upwinding for first derivatives.

Here are the results.

Case (1)
Method (a):   V = 0.4489
Method (b):   V = 0.4492

Case (2)
Method (a):   V = -0.0509
Method (b):   V = 0.4491.

What happened here?
The bond prices for different initial spot rates calculated by Method (a) exhibit the following behavior in case(2)


whereas the upwinding method (b) shows an almost boring plot


Why could we observe an obviously wrong result in case (1)? Well, we could have. It was just (good? bad?) luck that the oscillations did not spread to the center yet.


The upwinding method shows the same smooth behavior as before.


My conclusion when convection plays a role: Use stable methods to get reliable results.
By the way, you can find such methods in the Workout