final int xNodes = nu * tNodes;
final double sMin = S0 / 5.0;
final double sMax = 5 * S0;
final MeshingFunction xMesh = new ExponentialMeshing(sMin, sMax, xNodes, 0.0, new double[] {S0 });
final MeshingFunction tMesh = new ExponentialMeshing(0, T, tNodes, 0.0);
final PDEGrid1D grid = new PDEGrid1D(tMesh, xMesh);
final BoundaryCondition lower = new NeumannBoundaryCondition(0.0, sMin, true);
final BoundaryCondition upper = new NeumannBoundaryCondition(0.0, sMax, true);
final PDE1DDataBundle<ConvectionDiffusionPDE1DCoefficients> data = new PDE1DDataBundle<ConvectionDiffusionPDE1DCoefficients>(coef, payoff, lower, upper, grid);
final ThetaMethodFiniteDifference solver = new ThetaMethodFiniteDifference();
final PDEResults1D res = solver.solve(data);
final int index = Arrays.binarySearch(grid.getSpaceNodes(), S0);
final double pdePrice = res.getFunctionValue(index);
//System.out.println(DF+"\t"+pdePrice);
assertEquals(DF, pdePrice, DF * 5e-5);
}