@@ -36,14 +36,14 @@ namespace QuantLib {
3636 optionTenors_(optionTenors),
3737 optionDates_(nOptionTenors_),
3838 optionTimes_(nOptionTenors_),
39+ optionDatesAsReal_(nOptionTenors_),
3940 optionInterpolatorTimes_(nOptionTenors_ + 1 ),
4041 optionInterpolatorDatesAsReal_(nOptionTenors_ + 1 ),
4142 nSwapTenors_(swapTenors.size()),
4243 swapTenors_(swapTenors),
4344 swapLengths_(nSwapTenors_) {
4445
4546 checkOptionTenors ();
46- evaluationDate_ = Settings::instance ().evaluationDate ();
4747 initializeOptionDatesAndTimes ();
4848
4949 checkSwapTenors ();
@@ -54,8 +54,7 @@ namespace QuantLib {
5454 optionInterpolatorDatesAsReal_.begin ());
5555 optionInterpolator_.update ();
5656 optionInterpolator_.enableExtrapolation ();
57-
58- registerWith (Settings::instance ().evaluationDate ());
57+ cachedReferenceDate_ = referenceDate ();
5958 }
6059
6160 SwaptionVolatilityDiscrete::SwaptionVolatilityDiscrete (
@@ -70,6 +69,7 @@ namespace QuantLib {
7069 optionTenors_(optionTenors),
7170 optionDates_(nOptionTenors_),
7271 optionTimes_(nOptionTenors_),
72+ optionDatesAsReal_(nOptionTenors_),
7373 optionInterpolatorTimes_(nOptionTenors_ + 1 ),
7474 optionInterpolatorDatesAsReal_(nOptionTenors_ + 1 ),
7575 nSwapTenors_(swapTenors.size()),
@@ -101,6 +101,7 @@ namespace QuantLib {
101101 optionTenors_(nOptionTenors_),
102102 optionDates_(optionDates),
103103 optionTimes_(nOptionTenors_),
104+ optionDatesAsReal_(nOptionTenors_),
104105 optionInterpolatorTimes_(nOptionTenors_ + 1 ),
105106 optionInterpolatorDatesAsReal_(nOptionTenors_ + 1 ),
106107 nSwapTenors_(swapTenors.size()),
@@ -155,10 +156,10 @@ namespace QuantLib {
155156 }
156157
157158 void SwaptionVolatilityDiscrete::initializeOptionDatesAndTimes () const {
158- optionInterpolatorDatesAsReal_[0 ] = static_cast <Real>(evaluationDate_ .serialNumber ());
159+ optionInterpolatorDatesAsReal_[0 ] = static_cast <Real>(referenceDate () .serialNumber ());
159160 for (Size i=0 ; i<nOptionTenors_; ++i) {
160161 optionDates_[i] = optionDateFromTenor (optionTenors_[i]);
161- optionInterpolatorDatesAsReal_[i + 1 ] =
162+ optionDatesAsReal_[i] = optionInterpolatorDatesAsReal_[i + 1 ] =
162163 static_cast <Real>(optionDates_[i].serialNumber ());
163164 }
164165 initializeOptionTimes ();
@@ -179,9 +180,8 @@ namespace QuantLib {
179180 void SwaptionVolatilityDiscrete::performCalculations () const {
180181 // recalculate dates if necessary...
181182 if (moving_) {
182- Date d = Settings::instance ().evaluationDate ();
183- if (evaluationDate_ != d) {
184- evaluationDate_ = d;
183+ if (cachedReferenceDate_ != referenceDate ()) {
184+ cachedReferenceDate_ = referenceDate ();
185185 initializeOptionDatesAndTimes ();
186186 initializeSwapLengths ();
187187 optionInterpolator_.update ();
0 commit comments