} else {
lower = new DirichletBoundaryCondition(0.0, minMoneyness);
upper = new NeumannBoundaryCondition(1.0, maxMoneyness, false);
}
final MeshingFunction timeMesh = new ExponentialMeshing(0.0, maxT, nTimeSteps, timeMeshLambda);
final MeshingFunction spaceMesh = new HyperbolicMeshing(minMoneyness, maxMoneyness, centreMoneyness, nStrikeSteps, strikeMeshBunching);
final PDEGrid1D grid = new PDEGrid1D(timeMesh, spaceMesh);
final Function1D<Double, Double> initialCond = (new InitialConditionsProvider()).getForwardCallPut(isCall);
final PDEFullResults1D res = (PDEFullResults1D) solver.solve(new PDE1DDataBundle<>(pde, initialCond, lower, upper, grid));
return res;
}