Skip to content

Commit 31a9fa1

Browse files
pcaspersjenkins
authored andcommitted
QPR-11773 allow simulation time 0
1 parent bc63d30 commit 31a9fa1

1 file changed

Lines changed: 11 additions & 3 deletions

File tree

QuantExt/qle/pricingengines/mcmultilegbaseengine.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,10 +288,16 @@ RandomVariable McMultiLegBaseEngine::cashflowPathValue(const CashflowInfo& cf,
288288

289289
std::vector<std::vector<const RandomVariable*>> states(cf.simulationTimes.size());
290290
for (Size i = 0; i < cf.simulationTimes.size(); ++i) {
291-
auto simTimesIdx = timeIndex(cf.simulationTimes[i], simulationTimes);
292291
std::vector<const RandomVariable*> tmp(cf.modelIndices[i].size());
293-
for (Size j = 0; j < cf.modelIndices[i].size(); ++j) {
294-
tmp[j] = &pathValues[simTimesIdx][cf.modelIndices[i][j]];
292+
if (cf.simulationTimes[i] == 0.0) {
293+
for (Size j = 0; j < cf.modelIndices[i].size(); ++j) {
294+
tmp[j] = model_->stateProcess->initialValues()[j];
295+
}
296+
} else {
297+
auto simTimesIdx = timeIndex(cf.simulationTimes[i], simulationTimes);
298+
for (Size j = 0; j < cf.modelIndices[i].size(); ++j) {
299+
tmp[j] = &pathValues[simTimesIdx][cf.modelIndices[i][j]];
300+
}
295301
}
296302
states[i] = tmp;
297303
}
@@ -378,6 +384,8 @@ void McMultiLegBaseEngine::calculate() const {
378384
cashflowGenTimes.insert(info.payTime);
379385
}
380386

387+
cashflowGenTimes.remove(0.0); // handled separately, if it is set by a cashflow
388+
381389
/* build combined time sets */
382390

383391
std::set<Real> exerciseXvaTimes; // = exercise + xva times

0 commit comments

Comments
 (0)