final MeshingFunction spaceMesh = new HyperbolicMeshing(fL, fH, (fL + fH) / 2, 101, 0.4);
// ZZConvectionDiffusionPDEDataBundle pde_data = PDE_DATA_PROVIDER.getBackwardsLocalVolLogPayoff(EXPIRY, lvm);
final ConvectionDiffusionPDE1DStandardCoefficients pde = PDE_DATA_PROVIDER.getLogBackwardsLocalVol(EXPIRY, lvm);
final PDEGrid1D grid = new PDEGrid1D(timeMesh, spaceMesh);
final PDE1DDataBundle<ConvectionDiffusionPDE1DCoefficients> db = new PDE1DDataBundle<ConvectionDiffusionPDE1DCoefficients>(pde, INITIAL_COND, lower, upper, grid);
final PDEResults1D res = solver.solve(db);
final int n = res.getNumberSpaceNodes();
final double[] values = new double[n];
for (int i = 0; i < n; i++) {
// System.out.println(res.getSpaceValue(i) + "\t" + res.getFunctionValue(i));
values[i] = res.getFunctionValue(i);
}
final Interpolator1DDataBundle idb = INTERPOLATOR.getDataBundle(grid.getSpaceNodes(), values);
final double elogS = INTERPOLATOR.interpolate(idb, Math.log(ft));
final double kVol = Math.sqrt(-2 * (elogS - Math.log(ft)) / EXPIRY);
// System.out.println("expected:" + expected + " actual:" + kVol);
assertEquals(expected, kVol, 1e-3); //TODO Improve on 10bps error - local surface is (by construction) very smooth. NOTE: this has got worse since we improved the T -> 0
//behaviour of the mixed log-normal local volatility surface