QuantLib: a free/open-source library for quantitative finance
fully annotated source code - version 1.34
Loading...
Searching...
No Matches
fdmklugeextousolver.hpp
Go to the documentation of this file.
1/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3/*
4 Copyright (C) 2011 Klaus Spanderen
5
6 This file is part of QuantLib, a free-software/open-source library
7 for financial quantitative analysts and developers - http://quantlib.org/
8
9 QuantLib is free software: you can redistribute it and/or modify it
10 under the terms of the QuantLib license. You should have received a
11 copy of the license along with this program; if not, please email
12 <quantlib-dev@lists.sf.net>. The license is also available online at
13 <http://quantlib.org/license.shtml>.
14
15 This program is distributed in the hope that it will be useful, but WITHOUT
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17 FOR A PARTICULAR PURPOSE. See the license for more details.
18*/
19
20/*! \file fdmklugeextousolver.hpp
21 \brief Kluge/extended Ornstein-Uhlenbeck FDM solver
22*/
23
24#ifndef quantlib_fdm_kluge_ou_solver_hpp
25#define quantlib_fdm_kluge_ou_solver_hpp
26
29#include <ql/handle.hpp>
34#include <utility>
35
36namespace QuantLib {
37
38 class ExtOUWithJumpsProcess;
39 class ExtendedOrnsteinUhlenbeckProcess;
40
41 template <Size N=3>
43 public:
45 ext::shared_ptr<YieldTermStructure> rTS,
46 FdmSolverDesc solverDesc,
47 const FdmSchemeDesc& schemeDesc = FdmSchemeDesc::Hundsdorfer())
48 : klugeOUProcess_(std::move(klugeOUProcess)), rTS_(std::move(rTS)),
49 solverDesc_(std::move(solverDesc)), schemeDesc_(schemeDesc) {
51 }
52
53 Real valueAt(const std::vector<Real>& x) const {
54 calculate();
55 return solver_->interpolateAt(x);
56 }
57
58 protected:
59 void performCalculations() const override {
60 ext::shared_ptr<FdmLinearOpComposite>op(
62 klugeOUProcess_.currentLink(),
63 rTS_, solverDesc_.bcSet, 16));
64
65 solver_ = ext::shared_ptr<FdmNdimSolver<N> >(
67 }
68
69 private:
71 const ext::shared_ptr<YieldTermStructure> rTS_;
72
75
76 mutable ext::shared_ptr<FdmNdimSolver<N> > solver_;
77 BOOST_STATIC_ASSERT(N >= 3); // NOLINT(readability-simplify-boolean-expr)
78 // KlugeExtOU solver can't be applied on meshes
79 // with less than three dimensions
80 };
81}
82
83#endif
void performCalculations() const override
const Handle< KlugeExtOUProcess > klugeOUProcess_
FdmKlugeExtOUSolver(Handle< KlugeExtOUProcess > klugeOUProcess, ext::shared_ptr< YieldTermStructure > rTS, FdmSolverDesc solverDesc, const FdmSchemeDesc &schemeDesc=FdmSchemeDesc::Hundsdorfer())
const ext::shared_ptr< YieldTermStructure > rTS_
ext::shared_ptr< FdmNdimSolver< N > > solver_
Real valueAt(const std::vector< Real > &x) const
Shared handle to an observable.
Definition: handle.hpp:41
Framework for calculation on demand and result caching.
Definition: lazyobject.hpp:35
virtual void calculate() const
Definition: lazyobject.hpp:253
std::pair< iterator, bool > registerWith(const ext::shared_ptr< Observable > &)
Definition: observable.hpp:228
Kluge process (power) plus Ornstein Uhlenbeck process (gas)
QL_REAL Real
real number
Definition: types.hpp:50
Globally accessible relinkable pointer.
joint Kluge process an d Ornstein Uhlenbeck process
framework for calculation on demand and result caching
Definition: any.hpp:35
STL namespace.
static FdmSchemeDesc Hundsdorfer()
const FdmBoundaryConditionSet bcSet
const ext::shared_ptr< FdmMesher > mesher