/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* Copyright (C) 2000, 2001, 2002, 2003 RiskMap srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license for more details. */ /*! \file impliciteuler.hpp \brief implicit Euler scheme for finite difference methods */ #ifndef quantlib_implicit_euler_hpp #define quantlib_implicit_euler_hpp #include namespace QuantLib { //! Backward Euler scheme for finite difference methods /*! In this implementation, the passed operator must be derived from either TimeConstantOperator or TimeDependentOperator. Also, it must implement at least the following interface: \code typedef ... array_type; // copy constructor/assignment // (these will be provided by the compiler if none is defined) Operator(const Operator&); Operator& operator=(const Operator&); // inspectors Size size(); // modifiers void setTime(Time t); // operator interface array_type solveFor(const array_type&); static Operator identity(Size size); // operator algebra Operator operator*(Real, const Operator&); Operator operator+(const Operator&, const Operator&); \endcode \ingroup findiff */ template class ImplicitEuler : public MixedScheme { public: // typedefs typedef OperatorTraits traits; typedef typename traits::operator_type operator_type; typedef typename traits::array_type array_type; typedef typename traits::bc_set bc_set; typedef typename traits::condition_type condition_type; // constructors ImplicitEuler(const operator_type& L, const bc_set& bcs) : MixedScheme(L, 1.0, bcs) {} }; } #endif