this->addOption(storm::settings::OptionBuilder(moduleName,counterexampleOptionName,false,"Generates a counterexample for the given PRCTL formulas if not satisfied by the model.").setShortName(counterexampleOptionShortName).build());
this->addOption(storm::settings::OptionBuilder(moduleName,counterexampleOptionName,false,"Generates a counterexample for the given PRCTL formulas if not satisfied by the model.").setShortName(counterexampleOptionShortName).build());
@ -56,7 +59,9 @@ namespace storm {
this->addOption(storm::settings::OptionBuilder(moduleName,smtSolverOptionName,false,"Sets which SMT solver is preferred.")
this->addOption(storm::settings::OptionBuilder(moduleName,smtSolverOptionName,false,"Sets which SMT solver is preferred.")
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of an SMT solver.").addValidatorString(ArgumentValidatorFactory::createMultipleChoiceValidator(smtSolvers)).setDefaultValueString("z3").build()).build());
.addArgument(storm::settings::ArgumentBuilder::createStringArgument("name","The name of an SMT solver.").addValidatorString(ArgumentValidatorFactory::createMultipleChoiceValidator(smtSolvers)).setDefaultValueString("z3").build()).build());
this->addOption(storm::settings::OptionBuilder(moduleName,statisticsOptionName,false,"Sets whether to display statistics if available.").setShortName(statisticsOptionShortName).build());
this->addOption(storm::settings::OptionBuilder(moduleName,statisticsOptionName,false,"Sets whether to display statistics if available.").setShortName(statisticsOptionShortName).build());
this->addOption(storm::settings::OptionBuilder(moduleName,cudaOptionName,false,"Sets whether to use CUDA.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,cudaOptionName,false,"Sets whether to use CUDA.").build());
this->addOption(storm::settings::OptionBuilder(moduleName,intelTbbOptionName,false,"Sets whether to use Intel TBB (if Storm was built with support for TBB).").setShortName(intelTbbOptionShortName).build());
// If the vector and the result are aliases and this is not set to be allowed, we need and temporary vector.
// If the vector and the result are aliases and this is not set to be allowed, we need and temporary vector.
std::vector<ValueType>*target;
std::vector<ValueType>*target;
std::vector<ValueType>temporary;
std::vector<ValueType>temporary;
boolvectorsAliased=&vector==&result;
if(&vector==&result){
if(!allowAliasing&&vectorsAliased){
STORM_LOG_WARN("Vectors are aliased. Using temporary, which is potentially slow.");
STORM_LOG_WARN("Vectors are aliased but are not allowed to be. Using temporary, which is potentially slow.");
temporary=std::vector<ValueType>(vector.size());
temporary=std::vector<ValueType>(vector.size());
target=&temporary;
target=&temporary;
STORM_LOG_WARN_COND(multiplicationDirection!=MultiplicationDirection::DontCare,"Not specifying multiplication direction for aliased vectors may yield unexpected results.");
}else{
}else{
target=&result;
target=&result;
}
}
STORM_LOG_WARN_COND(vectorsAliased||multiplicationDirection==MultiplicationDirection::DontCare,"Setting a multiplication direction for unaliased vectors. Check whether this is intended.");
// If the vector and the result are aliases and this is not set to be allowed, we need and temporary vector.
// If the vector and the result are aliases, we need and temporary vector.
std::vector<ValueType>*target;
std::vector<ValueType>*target;
std::vector<ValueType>temporary;
std::vector<ValueType>temporary;
boolvectorsAliased=&vector==&result;
if(&vector==&result){
if(!allowAliasing&&vectorsAliased){
STORM_LOG_WARN("Vectors are aliased but are not allowed to be. Using temporary, which is potentially slow.");
STORM_LOG_WARN("Vectors are aliased but are not allowed to be. Using temporary, which is potentially slow.");
temporary=std::vector<ValueType>(vector.size());
temporary=std::vector<ValueType>(vector.size());
target=&temporary;
target=&temporary;
STORM_LOG_WARN_COND(multiplicationDirection!=MultiplicationDirection::DontCare,"Not specifying multiplication direction for aliased vectors may yield unexpected results.");
}else{
}else{
target=&result;
target=&result;
}
}
STORM_LOG_WARN_COND(vectorsAliased||multiplicationDirection==MultiplicationDirection::DontCare,"Setting a multiplication direction for unaliased vectors. Check whether this is intended.");
xxxxxxxxxx