Class FDMSolverFactory

java.lang.Object
net.finmath.finitedifference.solvers.FDMSolverFactory

public final class FDMSolverFactory extends Object
Centralized factory for selecting the finite-difference solver associated with a given model, product, discretization, and exercise specification.

The purpose of this class is to map a model class to the solver implementation capable of handling the corresponding PDE or PIDE. In abstract terms, if the model leads to a pricing equation of the form

\frac{\partial V}{\partial t} + \mathcal{L}V = 0

with generator \mathcal{L}, then this factory selects the discretization engine used to approximate the operator \mathcal{L} on the supplied SpaceTimeDiscretization. For one-dimensional diffusion models this is typically a theta-method solver, while for two-dimensional stochastic-volatility or multi-asset diffusion models this is typically an ADI-based solver.

The current selection logic is:

  • one-dimensional jump models → FDMThetaMethod1DJump,
  • Black-Scholes, CEV, and Bachelier models → FDMThetaMethod1D,
  • multi-asset Black-Scholes models: 1D → FDMThetaMethod1D, 2D → FDMMultiAssetBlackScholesADI2D,
  • Bates models → FDMBatesADI2D,
  • Heston models → FDMHestonADI2D or FDMBarrierHestonADI2D,
  • SABR models → FDMSabrADI2D or FDMBarrierSabrADI2D.

For barrier-aware two-dimensional Heston and SABR problems, the factory may select a specialized pre-hit / barrier solver depending on the supplied BarrierPDEMode and BarrierPreHitSpecification. If no barrier mode is provided, the corresponding vanilla solver is returned.

The class is a pure utility holder and cannot be instantiated.

Author:
Alessandro Gnoatto
  • Method Summary

    Modifier and Type
    Method
    Description
    static FDMSolver
    createSolver(net.finmath.finitedifference.assetderivativevaluation.models.FiniteDifferenceEquityModel model, net.finmath.finitedifference.assetderivativevaluation.products.FiniteDifferenceEquityProduct product, net.finmath.finitedifference.grids.SpaceTimeDiscretization spaceTimeDiscretization, Exercise exercise)
    Performs the operation.
    static FDMSolver
    createSolver(net.finmath.finitedifference.assetderivativevaluation.models.FiniteDifferenceEquityModel model, net.finmath.finitedifference.assetderivativevaluation.products.FiniteDifferenceEquityProduct product, net.finmath.finitedifference.grids.SpaceTimeDiscretization spaceTimeDiscretization, Exercise exercise, net.finmath.finitedifference.solvers.adi.BarrierPDEMode barrierMode, net.finmath.finitedifference.solvers.adi.BarrierPreHitSpecification preHitSpecification)
    Performs the operation.
    static FDMSolver
    createSolver(net.finmath.finitedifference.assetderivativevaluation.models.FiniteDifferenceEquityModel model, net.finmath.finitedifference.assetderivativevaluation.products.FiniteDifferenceEquityProduct product, Exercise exercise)
    Performs the operation.
    static FDMSolver
    createSolver(net.finmath.finitedifference.assetderivativevaluation.models.FiniteDifferenceEquityModel model, net.finmath.finitedifference.assetderivativevaluation.products.FiniteDifferenceEquityProduct product, Exercise exercise, net.finmath.finitedifference.solvers.adi.BarrierPDEMode barrierMode, net.finmath.finitedifference.solvers.adi.BarrierPreHitSpecification preHitSpecification)
    Performs the operation.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • createSolver

      public static FDMSolver createSolver(net.finmath.finitedifference.assetderivativevaluation.models.FiniteDifferenceEquityModel model, net.finmath.finitedifference.assetderivativevaluation.products.FiniteDifferenceEquityProduct product, net.finmath.finitedifference.grids.SpaceTimeDiscretization spaceTimeDiscretization, Exercise exercise)
      Performs the operation.
      Parameters:
      model - The value.
      product - The value.
      spaceTimeDiscretization - The value.
      exercise - The value.
      Returns:
      The value.
    • createSolver

      public static FDMSolver createSolver(net.finmath.finitedifference.assetderivativevaluation.models.FiniteDifferenceEquityModel model, net.finmath.finitedifference.assetderivativevaluation.products.FiniteDifferenceEquityProduct product, net.finmath.finitedifference.grids.SpaceTimeDiscretization spaceTimeDiscretization, Exercise exercise, net.finmath.finitedifference.solvers.adi.BarrierPDEMode barrierMode, net.finmath.finitedifference.solvers.adi.BarrierPreHitSpecification preHitSpecification)
      Performs the operation.
      Parameters:
      model - The value.
      product - The value.
      spaceTimeDiscretization - The value.
      exercise - The value.
      barrierMode - The value.
      preHitSpecification - The value.
      Returns:
      The value.
    • createSolver

      public static FDMSolver createSolver(net.finmath.finitedifference.assetderivativevaluation.models.FiniteDifferenceEquityModel model, net.finmath.finitedifference.assetderivativevaluation.products.FiniteDifferenceEquityProduct product, Exercise exercise)
      Performs the operation.
      Parameters:
      model - The value.
      product - The value.
      exercise - The value.
      Returns:
      The value.
    • createSolver

      public static FDMSolver createSolver(net.finmath.finitedifference.assetderivativevaluation.models.FiniteDifferenceEquityModel model, net.finmath.finitedifference.assetderivativevaluation.products.FiniteDifferenceEquityProduct product, Exercise exercise, net.finmath.finitedifference.solvers.adi.BarrierPDEMode barrierMode, net.finmath.finitedifference.solvers.adi.BarrierPreHitSpecification preHitSpecification)
      Performs the operation.
      Parameters:
      model - The value.
      product - The value.
      exercise - The value.
      barrierMode - The value.
      preHitSpecification - The value.
      Returns:
      The value.