25#include <ql/quotes/simplequote.hpp>
26#include <ql/termstructures/yieldtermstructure.hpp>
27#include <ql/termstructures/yield/flatforward.hpp>
28#include <ql/methods/finitedifferences/meshers/fdmmesher.hpp>
29#include <ql/experimental/processes/klugeextouprocess.hpp>
30#include <ql/experimental/processes/extouwithjumpsprocess.hpp>
31#include <ql/experimental/processes/extendedornsteinuhlenbeckprocess.hpp>
32#include <ql/experimental/finitedifferences/fdmextoujumpop.hpp>
33#include <ql/experimental/finitedifferences/fdmklugeextouop.hpp>
34#include <ql/methods/finitedifferences/operators/fdmlinearoplayout.hpp>
35#include <ql/experimental/finitedifferences/fdmextendedornsteinuhlenbeckop.hpp>
36#include <ql/methods/finitedifferences/operators/secondordermixedderivativeop.hpp>
41 const ext::shared_ptr<FdmMesher>& mesher,
42 const ext::shared_ptr<KlugeExtOUProcess>& klugeOUProcess,
43 const ext::shared_ptr<YieldTermStructure>& rTS,
45 Size integroIntegrationOrder)
47 kluge_ (klugeOUProcess->getKlugeProcess()),
48 extOU_ (klugeOUProcess->getExtOUProcess()),
52 integroIntegrationOrder)),
62 Array(mesher->layout()->size(),
63 klugeOUProcess->rho()*extOU_->volatility()
64 *kluge_->getExtendedOrnsteinUhlenbeckProcess()
69 return mesher_->layout()->dim().size();
73 ouOp_->setTime(t1, t2);
86 const Array& r)
const {
87 return klugeOp_->apply_direction(direction, r)
88 +
ouOp_->apply_direction(direction, r);
93 if (direction == 0 || direction == 1) {
94 return klugeOp_->solve_splitting(direction, r, a);
96 else if (direction == 2) {
97 return ouOp_->solve_splitting(direction, r, a);
106 return klugeOp_->solve_splitting(0, r, dt);
110 const std::vector<SparseMatrix> klugeDecomp =
klugeOp_->toMatrixDecomp();
115 ouOp_->toMatrixDecomp().front(),
1-D array used in linear algebra.
const ext::shared_ptr< FdmExtOUJumpOp > klugeOp_
FdmKlugeExtOUOp(const ext::shared_ptr< FdmMesher > &mesher, const ext::shared_ptr< KlugeExtOUProcess > &klugeOUProcess, const ext::shared_ptr< YieldTermStructure > &rTS, const FdmBoundaryConditionSet &bcSet, Size integroIntegrationOrder)
Size size() const override
Array apply_direction(Size direction, const Array &r) const override
Array preconditioner(const Array &r, Real s) const override
std::vector< SparseMatrix > toMatrixDecomp() const override
void setTime(Time t1, Time t2) override
Time is required.
Array apply_mixed(const Array &r) const override
const ext::shared_ptr< FdmMesher > mesher_
Array solve_splitting(Size direction, const Array &r, Real s) const override
const NinePointLinearOp corrMap_
Array apply(const Array &r) const override
const ext::shared_ptr< FdmExtendedOrnsteinUhlenbeckOp > ouOp_
Flat interest-rate curve.
Shared handle to an observable.
SparseMatrix toMatrix() const override
Array apply(const Array &r) const override
purely virtual base class for market observables
market element returning a stored value
Interest-rate term structure.
Real Time
continuous quantity with 1-year units
std::size_t Size
size of a container
OperatorTraits< FdmLinearOp >::bc_set FdmBoundaryConditionSet