|
From: Bianchetti M. <mar...@ba...> - 2009-12-01 10:50:40
|
error C2440: 'initializing' : cannot convert from 'std::valarray<_Ty>' to 'std::vector<_Ty,_Ax>' d:\Projects\QuantLib-SVN\DevEnv\trunk\QuantLibXL\qlxl\functions\utilities.cpp 111 > -----Original Message----- > From: mar...@us... > [mailto:mar...@us...] > Sent: martedì 10 novembre 2009 02.21 > To: qua...@li... > Subject: [QuantLib-svn] SF.net SVN: quantlib:[16725] trunk/QuantLib > > > Revision: 16725 > > http://quantlib.svn.sourceforge.net/quantlib/?rev=16725&view=rev > Author: markjoshi > Date: 2009-11-10 01:21:02 +0000 (Tue, 10 Nov 2009) > > Log Message: > ----------- > Abolished vector<bool>s from MarketModel code and replaced > with Valarrays. Also, changed the LMM CurveState to use a > smarter caching methodology. Substantial speed up has occurred. > > Modified Paths: > -------------- > trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.cpp > trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.hpp > > trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap > tionexercisevalue.cpp > > trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap > tionexercisevalue.hpp > > trunk/QuantLib/ql/models/marketmodels/callability/collectnodedata.cpp > > trunk/QuantLib/ql/models/marketmodels/callability/exercisevalue.hpp > trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.cpp > trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.hpp > > trunk/QuantLib/ql/models/marketmodels/callability/nodedataprovider.hpp > > trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc > isevalue.cpp > > trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc > isevalue.hpp > > trunk/QuantLib/ql/models/marketmodels/callability/parametricex > erciseadapter.hpp > > trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.cpp > > trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.hpp > > trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa > pexercise.cpp > > trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa > pexercise.hpp > > trunk/QuantLib/ql/models/marketmodels/callability/upperboundengine.hpp > trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp > > trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.cpp > > trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.hpp > > trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat > eeulerconstrained.cpp > > trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat > eeulerconstrained.hpp > > trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr > umentjacobian.cpp > > trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr > umentjacobian.hpp > > trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc > luster.cpp > > trunk/QuantLib/ql/models/marketmodels/products/compositeproduct.hpp > > trunk/QuantLib/ql/models/marketmodels/products/multistep/calls > pecifiedmultiproduct.hpp > > trunk/QuantLib/ql/models/marketmodels/products/multistep/exerc > iseadapter.hpp > trunk/QuantLib/ql/models/marketmodels/proxygreekengine.cpp > trunk/QuantLib/ql/models/marketmodels/proxygreekengine.hpp > trunk/QuantLib/ql/models/marketmodels/utilities.cpp > trunk/QuantLib/ql/models/marketmodels/utilities.hpp > trunk/QuantLib/test-suite/marketmodel.cpp > trunk/QuantLib/test-suite/quantlibtestsuite.cpp > > Modified: > trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.cpp > =================================================================== > --- > trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde > red.cpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde > red.cpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -129,7 +129,7 @@ > multiplierCutoff_(multiplierCutoff), > numberVectors_(originalVectors.rows()), > dimension_(originalVectors.columns()), > - validVectors_(originalVectors.rows(), true), > + validVectors_(true,originalVectors.rows()), // > opposite way round from vector constructor > orthoNormalizedVectors_(originalVectors.rows(), > originalVectors.columns()) > { > @@ -219,7 +219,7 @@ > > } // end of constructor > > - const std::vector<bool>& > OrthogonalProjections::validVectors() const > + const std::valarray<bool>& > OrthogonalProjections::validVectors() const > { > return validVectors_; > > > Modified: > trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.hpp > =================================================================== > --- > trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde > red.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde > red.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -22,6 +22,7 @@ > #define quantlib_basis_incomplete_ordered_hpp > > #include <ql/math/matrix.hpp> > +#include <valarray> > > namespace QuantLib { > > @@ -57,7 +58,7 @@ > Real multiplierCutOff, > Real tolerance ); > > - const std::vector<bool>& validVectors() const; > + const std::valarray<bool>& validVectors() const; > const std::vector<Real>& GetVector(Size index) const; > > Size numberValidVectors() const; > @@ -73,7 +74,7 @@ > Size dimension_; > > //!outputs > - std::vector<bool> validVectors_; > + std::valarray<bool> validVectors_; > std::vector<std::vector<Real> > projectedVectors_; > > //!workspace > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap > tionexercisevalue.cpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap > tionexercisevalue.cpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap > tionexercisevalue.cpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -70,8 +70,8 @@ > } > > > - std::vector<bool> > BermudanSwaptionExerciseValue::isExerciseTime() const { > - return std::vector<bool>(numberOfExercises_,true); > + std::valarray<bool> > BermudanSwaptionExerciseValue::isExerciseTime() const { > + return std::valarray<bool>(true,numberOfExercises_); > } > > MarketModelMultiProduct::CashFlow > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap > tionexercisevalue.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap > tionexercisevalue.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap > tionexercisevalue.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -24,6 +24,7 @@ > #include <ql/models/marketmodels/callability/exercisevalue.hpp> > #include <ql/models/marketmodels/evolutiondescription.hpp> > #include <boost/shared_ptr.hpp> > +#include <valarray> > > namespace QuantLib { > > @@ -40,7 +41,7 @@ > void nextStep(const CurveState&); > void reset(); > // whether or not evolution times are exercise times > - std::vector<bool> isExerciseTime() const; > + std::valarray<bool> isExerciseTime() const; > MarketModelMultiProduct::CashFlow value(const > CurveState&) const; > std::auto_ptr<MarketModelExerciseValue> clone() const; > private: > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/collectnodedata.cpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/collectnoded > ata.cpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/collectnoded > ata.cpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -94,20 +94,20 @@ > > std::vector<Time> evolutionTimes = > evolution.evolutionTimes(); > > - std::vector<bool> isProductTime = > + std::valarray<bool> isProductTime = > isInSubset(evolutionTimes, > product.evolution().evolutionTimes()); > - std::vector<bool> isRebateTime = > + std::valarray<bool> isRebateTime = > isInSubset(evolutionTimes, > rebate.evolution().evolutionTimes()); > - std::vector<bool> isControlTime = > + std::valarray<bool> isControlTime = > isInSubset(evolutionTimes, > control.evolution().evolutionTimes()); > - std::vector<bool> isBasisTime = > + std::valarray<bool> isBasisTime = > isInSubset(evolutionTimes, > dataProvider.evolution().evolutionTimes()); > - std::vector<bool> > isExerciseTime(evolutionTimes.size(),false); > - std::vector<bool> v = rebate.isExerciseTime(); > + std::valarray<bool> > isExerciseTime(false,evolutionTimes.size()); > + std::valarray<bool> v = rebate.isExerciseTime(); > Size exercises = 0; > for (i=0; i<evolutionTimes.size(); ++i) { > if (isRebateTime[i]) { > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/exercisevalue.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/exerciseva > lue.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/exerciseva > lue.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -24,6 +24,7 @@ > // to be removed using forward declaration > #include <ql/models/marketmodels/multiproduct.hpp> > #include <memory> > +#include <valarray> > > namespace QuantLib { > > @@ -41,7 +42,7 @@ > virtual void nextStep(const CurveState&) = 0; > virtual void reset() = 0; > // whether or not evolution times are exercise times > - virtual std::vector<bool> isExerciseTime() const = 0; > + virtual std::valarray<bool> isExerciseTime() const = 0; > virtual MarketModelMultiProduct::CashFlow value( > const > CurveState&) const = 0; > virtual std::auto_ptr<MarketModelExerciseValue> > clone() const = 0; > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.cpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/lsstrat > egy.cpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/lsstrat > egy.cpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -49,8 +49,8 @@ > > control_->evolution().evolutionTimes()); > > exerciseIndex_ = std::vector<Size>(relevantTimes_.size()); > - isExerciseTime_ = > std::vector<bool>(relevantTimes_.size(),false); > - std::vector<bool> v = exercise_->isExerciseTime(); > + isExerciseTime_ = > std::valarray<bool>(false,relevantTimes_.size()); > + std::valarray<bool> v = exercise_->isExerciseTime(); > Size exercises = 0; > Size i; > for (i=0; i<relevantTimes_.size(); ++i) { > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/lsstrat > egy.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/lsstrat > egy.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -55,8 +55,8 @@ > Size currentIndex_; > Real principalInNumerairePortfolio_, newPrincipal_; > std::vector<Time> exerciseTimes_, relevantTimes_; > - std::vector<bool> isBasisTime_, isRebateTime_, > isControlTime_; > - std::vector<bool> isExerciseTime_; > + std::valarray<bool> isBasisTime_, isRebateTime_, > isControlTime_; > + std::valarray<bool> isExerciseTime_; > std::vector<MarketModelDiscounter> rebateDiscounters_; > std::vector<MarketModelDiscounter> controlDiscounters_; > mutable std::vector<std::vector<Real> > basisValues_; > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/nodedataprovider.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/nodedataprov > ider.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/nodedataprov > ider.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -23,6 +23,7 @@ > > #include <ql/types.hpp> > #include <vector> > +#include <valarray> > > namespace QuantLib { > > @@ -40,7 +41,7 @@ > virtual void nextStep(const CurveState&) = 0; > virtual void reset() = 0; > // whether or not evolution times are exercise times > - virtual std::vector<bool> isExerciseTime() const = 0; > + virtual std::valarray<bool> isExerciseTime() const = 0; > virtual void values(const CurveState&, > std::vector<Real>& results) const = 0; > }; > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc > isevalue.cpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc > isevalue.cpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc > isevalue.cpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -60,8 +60,8 @@ > } > > > - std::vector<bool> NothingExerciseValue::isExerciseTime() const { > - return std::vector<bool>(numberOfExercises_, true); > + std::valarray<bool> > NothingExerciseValue::isExerciseTime() const { > + return std::valarray<bool>(true, > numberOfExercises_); // opposite way round from vector constructor > } > > MarketModelMultiProduct::CashFlow > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc > isevalue.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc > isevalue.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc > isevalue.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -36,7 +36,7 @@ > void nextStep(const CurveState&); > void reset(); > // whether or not evolution times are exercise times > - std::vector<bool> isExerciseTime() const; > + std::valarray<bool> isExerciseTime() const; > MarketModelMultiProduct::CashFlow value(const > CurveState&) const; > std::auto_ptr<MarketModelExerciseValue> clone() const; > private: > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/parametricex > erciseadapter.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/parametricex > erciseadapter.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/parametricex > erciseadapter.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -23,6 +23,7 @@ > > #include <ql/methods/montecarlo/exercisestrategy.hpp> > #include <ql/utilities/clone.hpp> > +#include <valarray> > > namespace QuantLib { > > @@ -45,7 +46,7 @@ > std::vector<std::vector<Real> > parameters_; > std::vector<Time> exerciseTimes_; > Size currentStep_, currentExercise_; > - std::vector<bool> isExerciseTime_; > + std::valarray<bool> isExerciseTime_; > std::vector<Size> numberOfVariables_; > mutable std::vector<Real> variables_; > }; > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.cpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys > tem.cpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys > tem.cpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -59,8 +59,8 @@ > currentIndex_ = 0; > } > > - std::vector<bool> SwapBasisSystem::isExerciseTime() const { > - return std::vector<bool>(exerciseTimes_.size(), true); > + std::valarray<bool> SwapBasisSystem::isExerciseTime() const { > + return std::valarray<bool>(true, exerciseTimes_.size()); > } > > void SwapBasisSystem::values(const CurveState& currentState, > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys > tem.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys > tem.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -35,7 +35,7 @@ > const EvolutionDescription& evolution() const; > void nextStep(const CurveState&); > void reset(); > - std::vector<bool> isExerciseTime() const; > + std::valarray<bool> isExerciseTime() const; > void values(const CurveState&, > std::vector<Real>& results) const; > std::auto_ptr<MarketModelBasisSystem> clone() const; > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa > pexercise.cpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa > pexercise.cpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa > pexercise.cpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -54,8 +54,8 @@ > currentStep_ = 0; > } > > - std::vector<bool> TriggeredSwapExercise::isExerciseTime() const { > - return std::vector<bool>(numberOfExercises(), true); > + std::valarray<bool> > TriggeredSwapExercise::isExerciseTime() const { > + return std::valarray<bool>(true,numberOfExercises()); > } > > void TriggeredSwapExercise::values(const CurveState& state, > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa > pexercise.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa > pexercise.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa > pexercise.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -36,7 +36,7 @@ > const EvolutionDescription& evolution() const; > void nextStep(const CurveState&); > void reset(); > - std::vector<bool> isExerciseTime() const; > + std::valarray<bool> isExerciseTime() const; > void values(const CurveState&, > std::vector<Real>& results) const; > > > Modified: > trunk/QuantLib/ql/models/marketmodels/callability/upperboundengine.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/callability/upperbounden > gine.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/callability/upperbounden > gine.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -27,6 +27,7 @@ > #include <ql/math/statistics/sequencestatistics.hpp> > #include <ql/utilities/clone.hpp> > #include <utility> > +#include <valarray> > > namespace QuantLib { > > @@ -70,7 +71,7 @@ > Size underlyingOffset_, rebateOffset_, hedgeOffset_, > hedgeRebateOffset_; > Size numberOfProducts_; > Size numberOfSteps_; > - std::vector<bool> isExerciseTime_; > + std::valarray<bool> isExerciseTime_; > > // workspace > std::vector<Size> numberCashFlowsThisStep_; > > Modified: trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp > 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp > 2009-11-10 01:21:02 UTC (rev 16725) > @@ -22,6 +22,7 @@ > #define quantlib_constrained_evolver_hpp > > #include <ql/models/marketmodels/evolver.hpp> > +#include <valarray> > > namespace QuantLib { > > @@ -45,7 +46,7 @@ > //! call before each path > virtual void setThisConstraint( > const std::vector<Rate>& rateConstraints, > - const std::vector<bool>& isConstraintActive) = 0; > + const std::valarray<bool>& isConstraintActive) = 0; > }; > > } > > Modified: > trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.cpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest > ate.cpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest > ate.cpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -33,7 +33,10 @@ > cmSwapRates_(numberOfRates_), > cmSwapAnnuities_(numberOfRates_,rateTaus_[numberOfRates_-1]), > cotSwapRates_(numberOfRates_), > - cotAnnuities_(numberOfRates_, rateTaus_[numberOfRates_-1]) {} > + cotAnnuities_(numberOfRates_, > + rateTaus_[numberOfRates_-1]), > + firstCotAnnuityComped_(numberOfRates_) > + {} > > void LMMCurveState::setOnForwardRates(const > std::vector<Rate>& rates, > Size firstValidIndex) { > @@ -60,6 +63,8 @@ > // lazy evaluation of: > // - coterminal swap rates/annuities > // - constant maturity swap rates/annuities > + > + firstCotAnnuityComped_ = numberOfRates_; > } > > void LMMCurveState::setOnDiscountRatios(const > std::vector<DiscountFactor>& discRatios, > @@ -86,6 +91,8 @@ > // lazy evaluation of: > // - coterminal swap rates/annuities > // - constant maturity swap rates/annuities > + > + firstCotAnnuityComped_ = numberOfRates_; > } > > Real LMMCurveState::discountRatio(Size i, Size j) const { > @@ -107,19 +114,37 @@ > QL_REQUIRE(numeraire>=first_ && numeraire<=numberOfRates_, > "invalid numeraire"); > QL_REQUIRE(i>=first_ && i<=numberOfRates_, "invalid index"); > - coterminalFromDiscountRatios(first_, > - discRatios_, rateTaus_, > - cotSwapRates_, cotAnnuities_); > - return cotAnnuities_[i]/discRatios_[numeraire]; > + // coterminalFromDiscountRatios(first_, > + // discRatios_, rateTaus_, > + // cotSwapRates_, cotAnnuities_); > + > + if (firstCotAnnuityComped_ <=i) > + return cotAnnuities_[i]/discRatios_[numeraire]; > + > + if (firstCotAnnuityComped_ == numberOfRates_) > + { > + cotAnnuities_[numberOfRates_-1] = > rateTaus_[numberOfRates_-1]*discRatios_[numberOfRates_]; > + --firstCotAnnuityComped_; > + } > + > + for (int j= > static_cast<int>(firstCotAnnuityComped_)-1; j > >=static_cast<int>(i); --j) > + cotAnnuities_[j] = > cotAnnuities_[j+1]+rateTaus_[j]*discRatios_[j+1]; > + > + firstCotAnnuityComped_ = i; > + > + return cotAnnuities_[i]/discRatios_[numeraire]; > } > > Rate LMMCurveState::coterminalSwapRate(Size i) const { > QL_REQUIRE(first_<numberOfRates_, "curve state not > initialized yet"); > QL_REQUIRE(i>=first_ && i<=numberOfRates_, "invalid index"); > - coterminalFromDiscountRatios(first_, > - discRatios_, rateTaus_, > - cotSwapRates_, cotAnnuities_); > - return cotSwapRates_[i]; > + // coterminalFromDiscountRatios(first_, > + // discRatios_, rateTaus_, > + // cotSwapRates_, cotAnnuities_); > + // return cotSwapRates_[i]; > + > + Real res = (discRatios_[i]/ > discRatios_[numberOfRates_] > -1.0)/coterminalSwapAnnuity(numberOfRates_,i); > + return res; > } > > Rate LMMCurveState::cmSwapAnnuity(Size numeraire, > > Modified: > trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest > ate.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest > ate.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -89,6 +89,8 @@ > mutable std::vector<Real> cmSwapAnnuities_; > mutable std::vector<Rate> cotSwapRates_; > mutable std::vector<Real> cotAnnuities_; > + > + mutable Size firstCotAnnuityComped_; > }; > > } > > Modified: > trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat > eeulerconstrained.cpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat > eeulerconstrained.cpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat > eeulerconstrained.cpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -133,7 +133,7 @@ > > void LogNormalFwdRateEulerConstrained::setThisConstraint( > const std::vector<Rate>& > rateConstraints, > - const std::vector<bool>& > isConstraintActive) > + const std::valarray<bool>& > isConstraintActive) > { > QL_REQUIRE(rateConstraints.size() == numeraires_.size(), > "wrong number of constraints specified"); > > Modified: > trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat > eeulerconstrained.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat > eeulerconstrained.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat > eeulerconstrained.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -25,6 +25,7 @@ > #include <ql/models/marketmodels/constrainedevolver.hpp> > #include <ql/models/marketmodels/curvestates/lmmcurvestate.hpp> > #include > <ql/models/marketmodels/driftcomputation/lmmdriftcalculator.hpp> > +#include <valarray> > > namespace QuantLib { > > @@ -47,7 +48,7 @@ > const std::vector<Size>& endIndexOfSwapRate); > virtual void setThisConstraint( > const std::vector<Rate>& rateConstraints, > - const std::vector<bool>& isConstraintActive); > + const std::valarray<bool>& isConstraintActive); > //@} > //! \name MarketModel interface > //@{ > @@ -71,7 +72,7 @@ > > //often changing inputs > std::vector<Rate> rateConstraints_; > - std::vector<bool> isConstraintActive_; > + std::valarray<bool> isConstraintActive_; > > // fixed variables > std::vector<std::vector<Real> > fixedDrifts_; > > Modified: > trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr > umentjacobian.cpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr > umentjacobian.cpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr > umentjacobian.cpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -30,7 +30,7 @@ > > VolatilityBumpInstrumentJacobian::VolatilityBumpInstrumentJaco > bian(const VegaBumpCollection& bumps, > const std::vector<Swaption>& swaptions, > const std::vector<Cap>& caps) > - : bumps_(bumps), swaptions_(swaptions), caps_(caps), > computed_(swaptions.size()+caps.size(), false), > + : bumps_(bumps), swaptions_(swaptions), caps_(caps), > computed_(false,swaptions.size()+caps.size()), > > derivatives_(swaptions.size()+caps.size(),std::vector<Real>(bu > mps.numberBumps())), > > bumpMatrix_(swaptions.size()+caps.size(),bumps_.numberBumps()) > { > > Modified: > trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr > umentjacobian.hpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr > umentjacobian.hpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr > umentjacobian.hpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -25,6 +25,7 @@ > > #include <ql/models/marketmodels/marketmodel.hpp> > #include <ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp> > +#include <valarray> > > namespace QuantLib > { > @@ -68,7 +69,7 @@ > VegaBumpCollection bumps_; > std::vector<Swaption> swaptions_; > std::vector<Cap> caps_; > - mutable std::vector<bool> computed_; > + mutable std::valarray<bool> computed_; > mutable bool allComputed_; > mutable std::vector<std::vector<Real> > derivatives_; > > > Modified: > trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc > luster.cpp > =================================================================== > --- > trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc > luster.cpp 2009-11-09 16:35:59 UTC (rev 16724) > +++ > trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc > luster.cpp 2009-11-10 01:21:02 UTC (rev 16725) > @@ -20,6 +20,7 @@ > #include <ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp> > #include <ql/errors.hpp> > #include <ql/models/marketmodels/evolutiondescription.hpp> > +#include <valarray> > > namespace QuantLib { > > @@ -149,14 +150,14 @@ >... [truncated message content] |
|
From: Alexander L. <ale...@go...> - 2009-12-01 17:54:57
|
Hello Marco, we have already discussed this problem here: http://old.nabble.com/gensrc-support-for-valarray-td26287680.html#a26287680 Plamen wanted to fix it. I think he will do it next days. Cheers Alexander Bianchetti Marco wrote: > error C2440: 'initializing' : cannot convert from 'std::valarray<_Ty>' to 'std::vector<_Ty,_Ax>' > d:\Projects\QuantLib-SVN\DevEnv\trunk\QuantLibXL\qlxl\functions\utilities.cpp 111 > > >> -----Original Message----- >> From: mar...@us... >> [mailto:mar...@us...] >> Sent: martedì 10 novembre 2009 02.21 >> To: qua...@li... >> Subject: [QuantLib-svn] SF.net SVN: quantlib:[16725] trunk/QuantLib >> >> >> Revision: 16725 >> >> http://quantlib.svn.sourceforge.net/quantlib/?rev=16725&view=rev >> Author: markjoshi >> Date: 2009-11-10 01:21:02 +0000 (Tue, 10 Nov 2009) >> >> Log Message: >> ----------- >> Abolished vector<bool>s from MarketModel code and replaced >> with Valarrays. Also, changed the LMM CurveState to use a >> smarter caching methodology. Substantial speed up has occurred. >> >> Modified Paths: >> -------------- >> trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.cpp >> trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.hpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap >> tionexercisevalue.cpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap >> tionexercisevalue.hpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/collectnodedata.cpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/exercisevalue.hpp >> trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.cpp >> trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.hpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/nodedataprovider.hpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc >> isevalue.cpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc >> isevalue.hpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/parametricex >> erciseadapter.hpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.cpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.hpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa >> pexercise.cpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa >> pexercise.hpp >> >> trunk/QuantLib/ql/models/marketmodels/callability/upperboundengine.hpp >> trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp >> >> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.cpp >> >> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.hpp >> >> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat >> eeulerconstrained.cpp >> >> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat >> eeulerconstrained.hpp >> >> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr >> umentjacobian.cpp >> >> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr >> umentjacobian.hpp >> >> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc >> luster.cpp >> >> trunk/QuantLib/ql/models/marketmodels/products/compositeproduct.hpp >> >> trunk/QuantLib/ql/models/marketmodels/products/multistep/calls >> pecifiedmultiproduct.hpp >> >> trunk/QuantLib/ql/models/marketmodels/products/multistep/exerc >> iseadapter.hpp >> trunk/QuantLib/ql/models/marketmodels/proxygreekengine.cpp >> trunk/QuantLib/ql/models/marketmodels/proxygreekengine.hpp >> trunk/QuantLib/ql/models/marketmodels/utilities.cpp >> trunk/QuantLib/ql/models/marketmodels/utilities.hpp >> trunk/QuantLib/test-suite/marketmodel.cpp >> trunk/QuantLib/test-suite/quantlibtestsuite.cpp >> >> Modified: >> trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.cpp >> =================================================================== >> --- >> trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde >> red.cpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde >> red.cpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -129,7 +129,7 @@ >> multiplierCutoff_(multiplierCutoff), >> numberVectors_(originalVectors.rows()), >> dimension_(originalVectors.columns()), >> - validVectors_(originalVectors.rows(), true), >> + validVectors_(true,originalVectors.rows()), // >> opposite way round from vector constructor >> orthoNormalizedVectors_(originalVectors.rows(), >> originalVectors.columns()) >> { >> @@ -219,7 +219,7 @@ >> >> } // end of constructor >> >> - const std::vector<bool>& >> OrthogonalProjections::validVectors() const >> + const std::valarray<bool>& >> OrthogonalProjections::validVectors() const >> { >> return validVectors_; >> >> >> Modified: >> trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde >> red.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde >> red.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -22,6 +22,7 @@ >> #define quantlib_basis_incomplete_ordered_hpp >> >> #include <ql/math/matrix.hpp> >> +#include <valarray> >> >> namespace QuantLib { >> >> @@ -57,7 +58,7 @@ >> Real multiplierCutOff, >> Real tolerance ); >> >> - const std::vector<bool>& validVectors() const; >> + const std::valarray<bool>& validVectors() const; >> const std::vector<Real>& GetVector(Size index) const; >> >> Size numberValidVectors() const; >> @@ -73,7 +74,7 @@ >> Size dimension_; >> >> //!outputs >> - std::vector<bool> validVectors_; >> + std::valarray<bool> validVectors_; >> std::vector<std::vector<Real> > projectedVectors_; >> >> //!workspace >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap >> tionexercisevalue.cpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap >> tionexercisevalue.cpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap >> tionexercisevalue.cpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -70,8 +70,8 @@ >> } >> >> >> - std::vector<bool> >> BermudanSwaptionExerciseValue::isExerciseTime() const { >> - return std::vector<bool>(numberOfExercises_,true); >> + std::valarray<bool> >> BermudanSwaptionExerciseValue::isExerciseTime() const { >> + return std::valarray<bool>(true,numberOfExercises_); >> } >> >> MarketModelMultiProduct::CashFlow >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap >> tionexercisevalue.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap >> tionexercisevalue.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap >> tionexercisevalue.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -24,6 +24,7 @@ >> #include <ql/models/marketmodels/callability/exercisevalue.hpp> >> #include <ql/models/marketmodels/evolutiondescription.hpp> >> #include <boost/shared_ptr.hpp> >> +#include <valarray> >> >> namespace QuantLib { >> >> @@ -40,7 +41,7 @@ >> void nextStep(const CurveState&); >> void reset(); >> // whether or not evolution times are exercise times >> - std::vector<bool> isExerciseTime() const; >> + std::valarray<bool> isExerciseTime() const; >> MarketModelMultiProduct::CashFlow value(const >> CurveState&) const; >> std::auto_ptr<MarketModelExerciseValue> clone() const; >> private: >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/collectnodedata.cpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/collectnoded >> ata.cpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/collectnoded >> ata.cpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -94,20 +94,20 @@ >> >> std::vector<Time> evolutionTimes = >> evolution.evolutionTimes(); >> >> - std::vector<bool> isProductTime = >> + std::valarray<bool> isProductTime = >> isInSubset(evolutionTimes, >> product.evolution().evolutionTimes()); >> - std::vector<bool> isRebateTime = >> + std::valarray<bool> isRebateTime = >> isInSubset(evolutionTimes, >> rebate.evolution().evolutionTimes()); >> - std::vector<bool> isControlTime = >> + std::valarray<bool> isControlTime = >> isInSubset(evolutionTimes, >> control.evolution().evolutionTimes()); >> - std::vector<bool> isBasisTime = >> + std::valarray<bool> isBasisTime = >> isInSubset(evolutionTimes, >> dataProvider.evolution().evolutionTimes()); >> - std::vector<bool> >> isExerciseTime(evolutionTimes.size(),false); >> - std::vector<bool> v = rebate.isExerciseTime(); >> + std::valarray<bool> >> isExerciseTime(false,evolutionTimes.size()); >> + std::valarray<bool> v = rebate.isExerciseTime(); >> Size exercises = 0; >> for (i=0; i<evolutionTimes.size(); ++i) { >> if (isRebateTime[i]) { >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/exercisevalue.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/exerciseva >> lue.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/exerciseva >> lue.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -24,6 +24,7 @@ >> // to be removed using forward declaration >> #include <ql/models/marketmodels/multiproduct.hpp> >> #include <memory> >> +#include <valarray> >> >> namespace QuantLib { >> >> @@ -41,7 +42,7 @@ >> virtual void nextStep(const CurveState&) = 0; >> virtual void reset() = 0; >> // whether or not evolution times are exercise times >> - virtual std::vector<bool> isExerciseTime() const = 0; >> + virtual std::valarray<bool> isExerciseTime() const = 0; >> virtual MarketModelMultiProduct::CashFlow value( >> const >> CurveState&) const = 0; >> virtual std::auto_ptr<MarketModelExerciseValue> >> clone() const = 0; >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.cpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/lsstrat >> egy.cpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/lsstrat >> egy.cpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -49,8 +49,8 @@ >> >> control_->evolution().evolutionTimes()); >> >> exerciseIndex_ = std::vector<Size>(relevantTimes_.size()); >> - isExerciseTime_ = >> std::vector<bool>(relevantTimes_.size(),false); >> - std::vector<bool> v = exercise_->isExerciseTime(); >> + isExerciseTime_ = >> std::valarray<bool>(false,relevantTimes_.size()); >> + std::valarray<bool> v = exercise_->isExerciseTime(); >> Size exercises = 0; >> Size i; >> for (i=0; i<relevantTimes_.size(); ++i) { >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/lsstrat >> egy.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/lsstrat >> egy.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -55,8 +55,8 @@ >> Size currentIndex_; >> Real principalInNumerairePortfolio_, newPrincipal_; >> std::vector<Time> exerciseTimes_, relevantTimes_; >> - std::vector<bool> isBasisTime_, isRebateTime_, >> isControlTime_; >> - std::vector<bool> isExerciseTime_; >> + std::valarray<bool> isBasisTime_, isRebateTime_, >> isControlTime_; >> + std::valarray<bool> isExerciseTime_; >> std::vector<MarketModelDiscounter> rebateDiscounters_; >> std::vector<MarketModelDiscounter> controlDiscounters_; >> mutable std::vector<std::vector<Real> > basisValues_; >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/nodedataprovider.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/nodedataprov >> ider.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/nodedataprov >> ider.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -23,6 +23,7 @@ >> >> #include <ql/types.hpp> >> #include <vector> >> +#include <valarray> >> >> namespace QuantLib { >> >> @@ -40,7 +41,7 @@ >> virtual void nextStep(const CurveState&) = 0; >> virtual void reset() = 0; >> // whether or not evolution times are exercise times >> - virtual std::vector<bool> isExerciseTime() const = 0; >> + virtual std::valarray<bool> isExerciseTime() const = 0; >> virtual void values(const CurveState&, >> std::vector<Real>& results) const = 0; >> }; >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc >> isevalue.cpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc >> isevalue.cpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc >> isevalue.cpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -60,8 +60,8 @@ >> } >> >> >> - std::vector<bool> NothingExerciseValue::isExerciseTime() const { >> - return std::vector<bool>(numberOfExercises_, true); >> + std::valarray<bool> >> NothingExerciseValue::isExerciseTime() const { >> + return std::valarray<bool>(true, >> numberOfExercises_); // opposite way round from vector constructor >> } >> >> MarketModelMultiProduct::CashFlow >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc >> isevalue.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc >> isevalue.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc >> isevalue.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -36,7 +36,7 @@ >> void nextStep(const CurveState&); >> void reset(); >> // whether or not evolution times are exercise times >> - std::vector<bool> isExerciseTime() const; >> + std::valarray<bool> isExerciseTime() const; >> MarketModelMultiProduct::CashFlow value(const >> CurveState&) const; >> std::auto_ptr<MarketModelExerciseValue> clone() const; >> private: >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/parametricex >> erciseadapter.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/parametricex >> erciseadapter.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/parametricex >> erciseadapter.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -23,6 +23,7 @@ >> >> #include <ql/methods/montecarlo/exercisestrategy.hpp> >> #include <ql/utilities/clone.hpp> >> +#include <valarray> >> >> namespace QuantLib { >> >> @@ -45,7 +46,7 @@ >> std::vector<std::vector<Real> > parameters_; >> std::vector<Time> exerciseTimes_; >> Size currentStep_, currentExercise_; >> - std::vector<bool> isExerciseTime_; >> + std::valarray<bool> isExerciseTime_; >> std::vector<Size> numberOfVariables_; >> mutable std::vector<Real> variables_; >> }; >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.cpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys >> tem.cpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys >> tem.cpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -59,8 +59,8 @@ >> currentIndex_ = 0; >> } >> >> - std::vector<bool> SwapBasisSystem::isExerciseTime() const { >> - return std::vector<bool>(exerciseTimes_.size(), true); >> + std::valarray<bool> SwapBasisSystem::isExerciseTime() const { >> + return std::valarray<bool>(true, exerciseTimes_.size()); >> } >> >> void SwapBasisSystem::values(const CurveState& currentState, >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys >> tem.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys >> tem.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -35,7 +35,7 @@ >> const EvolutionDescription& evolution() const; >> void nextStep(const CurveState&); >> void reset(); >> - std::vector<bool> isExerciseTime() const; >> + std::valarray<bool> isExerciseTime() const; >> void values(const CurveState&, >> std::vector<Real>& results) const; >> std::auto_ptr<MarketModelBasisSystem> clone() const; >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa >> pexercise.cpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa >> pexercise.cpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa >> pexercise.cpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -54,8 +54,8 @@ >> currentStep_ = 0; >> } >> >> - std::vector<bool> TriggeredSwapExercise::isExerciseTime() const { >> - return std::vector<bool>(numberOfExercises(), true); >> + std::valarray<bool> >> TriggeredSwapExercise::isExerciseTime() const { >> + return std::valarray<bool>(true,numberOfExercises()); >> } >> >> void TriggeredSwapExercise::values(const CurveState& state, >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa >> pexercise.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa >> pexercise.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa >> pexercise.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -36,7 +36,7 @@ >> const EvolutionDescription& evolution() const; >> void nextStep(const CurveState&); >> void reset(); >> - std::vector<bool> isExerciseTime() const; >> + std::valarray<bool> isExerciseTime() const; >> void values(const CurveState&, >> std::vector<Real>& results) const; >> >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/callability/upperboundengine.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/callability/upperbounden >> gine.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/callability/upperbounden >> gine.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -27,6 +27,7 @@ >> #include <ql/math/statistics/sequencestatistics.hpp> >> #include <ql/utilities/clone.hpp> >> #include <utility> >> +#include <valarray> >> >> namespace QuantLib { >> >> @@ -70,7 +71,7 @@ >> Size underlyingOffset_, rebateOffset_, hedgeOffset_, >> hedgeRebateOffset_; >> Size numberOfProducts_; >> Size numberOfSteps_; >> - std::vector<bool> isExerciseTime_; >> + std::valarray<bool> isExerciseTime_; >> >> // workspace >> std::vector<Size> numberCashFlowsThisStep_; >> >> Modified: trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp >> 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp >> 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -22,6 +22,7 @@ >> #define quantlib_constrained_evolver_hpp >> >> #include <ql/models/marketmodels/evolver.hpp> >> +#include <valarray> >> >> namespace QuantLib { >> >> @@ -45,7 +46,7 @@ >> //! call before each path >> virtual void setThisConstraint( >> const std::vector<Rate>& rateConstraints, >> - const std::vector<bool>& isConstraintActive) = 0; >> + const std::valarray<bool>& isConstraintActive) = 0; >> }; >> >> } >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.cpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest >> ate.cpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest >> ate.cpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -33,7 +33,10 @@ >> cmSwapRates_(numberOfRates_), >> cmSwapAnnuities_(numberOfRates_,rateTaus_[numberOfRates_-1]), >> cotSwapRates_(numberOfRates_), >> - cotAnnuities_(numberOfRates_, rateTaus_[numberOfRates_-1]) {} >> + cotAnnuities_(numberOfRates_, >> + rateTaus_[numberOfRates_-1]), >> + firstCotAnnuityComped_(numberOfRates_) >> + {} >> >> void LMMCurveState::setOnForwardRates(const >> std::vector<Rate>& rates, >> Size firstValidIndex) { >> @@ -60,6 +63,8 @@ >> // lazy evaluation of: >> // - coterminal swap rates/annuities >> // - constant maturity swap rates/annuities >> + >> + firstCotAnnuityComped_ = numberOfRates_; >> } >> >> void LMMCurveState::setOnDiscountRatios(const >> std::vector<DiscountFactor>& discRatios, >> @@ -86,6 +91,8 @@ >> // lazy evaluation of: >> // - coterminal swap rates/annuities >> // - constant maturity swap rates/annuities >> + >> + firstCotAnnuityComped_ = numberOfRates_; >> } >> >> Real LMMCurveState::discountRatio(Size i, Size j) const { >> @@ -107,19 +114,37 @@ >> QL_REQUIRE(numeraire>=first_ && numeraire<=numberOfRates_, >> "invalid numeraire"); >> QL_REQUIRE(i>=first_ && i<=numberOfRates_, "invalid index"); >> - coterminalFromDiscountRatios(first_, >> - discRatios_, rateTaus_, >> - cotSwapRates_, cotAnnuities_); >> - return cotAnnuities_[i]/discRatios_[numeraire]; >> + // coterminalFromDiscountRatios(first_, >> + // discRatios_, rateTaus_, >> + // cotSwapRates_, cotAnnuities_); >> + >> + if (firstCotAnnuityComped_ <=i) >> + return cotAnnuities_[i]/discRatios_[numeraire]; >> + >> + if (firstCotAnnuityComped_ == numberOfRates_) >> + { >> + cotAnnuities_[numberOfRates_-1] = >> rateTaus_[numberOfRates_-1]*discRatios_[numberOfRates_]; >> + --firstCotAnnuityComped_; >> + } >> + >> + for (int j= >> static_cast<int>(firstCotAnnuityComped_)-1; j >> >>> =static_cast<int>(i); --j) >>> >> + cotAnnuities_[j] = >> cotAnnuities_[j+1]+rateTaus_[j]*discRatios_[j+1]; >> + >> + firstCotAnnuityComped_ = i; >> + >> + return cotAnnuities_[i]/discRatios_[numeraire]; >> } >> >> Rate LMMCurveState::coterminalSwapRate(Size i) const { >> QL_REQUIRE(first_<numberOfRates_, "curve state not >> initialized yet"); >> QL_REQUIRE(i>=first_ && i<=numberOfRates_, "invalid index"); >> - coterminalFromDiscountRatios(first_, >> - discRatios_, rateTaus_, >> - cotSwapRates_, cotAnnuities_); >> - return cotSwapRates_[i]; >> + // coterminalFromDiscountRatios(first_, >> + // discRatios_, rateTaus_, >> + // cotSwapRates_, cotAnnuities_); >> + // return cotSwapRates_[i]; >> + >> + Real res = (discRatios_[i]/ >> discRatios_[numberOfRates_] >> -1.0)/coterminalSwapAnnuity(numberOfRates_,i); >> + return res; >> } >> >> Rate LMMCurveState::cmSwapAnnuity(Size numeraire, >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest >> ate.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest >> ate.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -89,6 +89,8 @@ >> mutable std::vector<Real> cmSwapAnnuities_; >> mutable std::vector<Rate> cotSwapRates_; >> mutable std::vector<Real> cotAnnuities_; >> + >> + mutable Size firstCotAnnuityComped_; >> }; >> >> } >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat >> eeulerconstrained.cpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat >> eeulerconstrained.cpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat >> eeulerconstrained.cpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -133,7 +133,7 @@ >> >> void LogNormalFwdRateEulerConstrained::setThisConstraint( >> const std::vector<Rate>& >> rateConstraints, >> - const std::vector<bool>& >> isConstraintActive) >> + const std::valarray<bool>& >> isConstraintActive) >> { >> QL_REQUIRE(rateConstraints.size() == numeraires_.size(), >> "wrong number of constraints specified"); >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat >> eeulerconstrained.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat >> eeulerconstrained.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat >> eeulerconstrained.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -25,6 +25,7 @@ >> #include <ql/models/marketmodels/constrainedevolver.hpp> >> #include <ql/models/marketmodels/curvestates/lmmcurvestate.hpp> >> #include >> <ql/models/marketmodels/driftcomputation/lmmdriftcalculator.hpp> >> +#include <valarray> >> >> namespace QuantLib { >> >> @@ -47,7 +48,7 @@ >> const std::vector<Size>& endIndexOfSwapRate); >> virtual void setThisConstraint( >> const std::vector<Rate>& rateConstraints, >> - const std::vector<bool>& isConstraintActive); >> + const std::valarray<bool>& isConstraintActive); >> //@} >> //! \name MarketModel interface >> //@{ >> @@ -71,7 +72,7 @@ >> >> //often changing inputs >> std::vector<Rate> rateConstraints_; >> - std::vector<bool> isConstraintActive_; >> + std::valarray<bool> isConstraintActive_; >> >> // fixed variables >> std::vector<std::vector<Real> > fixedDrifts_; >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr >> umentjacobian.cpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr >> umentjacobian.cpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr >> umentjacobian.cpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -30,7 +30,7 @@ >> >> VolatilityBumpInstrumentJacobian::VolatilityBumpInstrumentJaco >> bian(const VegaBumpCollection& bumps, >> const std::vector<Swaption>& swaptions, >> const std::vector<Cap>& caps) >> - : bumps_(bumps), swaptions_(swaptions), caps_(caps), >> computed_(swaptions.size()+caps.size(), false), >> + : bumps_(bumps), swaptions_(swaptions), caps_(caps), >> computed_(false,swaptions.size()+caps.size()), >> >> derivatives_(swaptions.size()+caps.size(),std::vector<Real>(bu >> mps.numberBumps())), >> >> bumpMatrix_(swaptions.size()+caps.size(),bumps_.numberBumps()) >> { >> >> Modified: >> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr >> umentjacobian.hpp >> =================================================================== >> --- >> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr >> umentjacobian.hpp 2009-11-09 16:35:59 UTC (rev 16724) >> +++ >> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr >> umentjacobian.hpp 2009-11-10 01:21:02 UTC (rev 16725) >> @@ -25,6 +25,7 @@ >> >> #include <ql/models/marketmodels/marketmodel.hpp> >> #include <ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp> >> +#include <... [truncated message content] |