private PDEFullResults1D runForwardPDESolver(final LocalVolatilitySurfaceMoneyness localVolatility, final boolean isCall,
final double theta, final double maxT, final double maxAbsProxyDelta, final int nTimeSteps, final int nStrikeSteps,
final double timeMeshLambda, final double strikeMeshBunching, final double centreMoneyness) {
final PDE1DCoefficientsProvider provider = new PDE1DCoefficientsProvider();
final ConvectionDiffusionPDE1DCoefficients pde = provider.getForwardLocalVol(localVolatility);
final ConvectionDiffusionPDESolver solver = new ThetaMethodFiniteDifference(theta, true);
final double minMoneyness = Math.exp(-maxAbsProxyDelta * Math.sqrt(maxT));
final double maxMoneyness = 1.0 / minMoneyness;
ArgumentChecker.isTrue(minMoneyness < centreMoneyness, "min moneyness of {} greater than centreMoneyness of {}. Increase maxAbsProxydelta", minMoneyness, centreMoneyness);