// set up a near-uniform mesh that includes spot and strike
MeshingFunction xMesh = new ExponentialMeshing(sMin, sMax, spaceNodes, 0.0, new double[] {s0, k});
MeshingFunction tMeshBurn = USE_BURNIN ? new ExponentialMeshing(0.0, tBurn, tBurnNodes, 0.0) : null;
MeshingFunction tMesh = new ExponentialMeshing(tBurn, t, timeNodes - tBurnNodes, 0.0);
PDEGrid1D gridBurn = USE_BURNIN ? new PDEGrid1D(tMeshBurn, xMesh) : null;
PDEGrid1D grid = new PDEGrid1D(tMesh, xMesh);
final int index = Arrays.binarySearch(grid.getSpaceNodes(), s0);
ArgumentChecker.isTrue(index >= 0, "cannot find spot on grid");
ConvectionDiffusionPDE1DStandardCoefficients coef = PDE.getBackwardsLocalVol(r, q, t, locVol);
Function1D<Double, Double> payoff = ICP.getEuropeanPayoff(k, isCall);