Bugfix: M_.sigma_e_is_diagonal could be wrong if there were several shocks blocks.

issue#70
Sébastien Villemot 2014-04-10 11:43:26 +02:00
parent 27c2396a81
commit 75dbe4afde
2 changed files with 9 additions and 1 deletions

View File

@ -594,6 +594,9 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool no_log, b
mOutputFile << "M_.H = 0;" << endl
<< "M_.Correlation_matrix_ME = 1;" << endl;
// May be later modified by a shocks block
mOutputFile << "M_.sigma_e_is_diagonal = 1;" << endl;
// Initialize M_.det_shocks
mOutputFile << "M_.det_shocks = [];" << endl;

View File

@ -89,9 +89,14 @@ ShocksStatement::writeOutput(ostream &output, const string &basename) const
writeDetShocks(output);
writeVarAndStdShocks(output);
writeCovarAndCorrShocks(output);
/* M_.sigma_e_is_diagonal is initialized to 1 by ModFile.cc.
If there are no off-diagonal elements, and we are not in overwrite mode,
then we don't reset it to 1, since there might be previous shocks blocks
with off-diagonal elements. */
if (covar_shocks.size()+corr_shocks.size() > 0)
output << "M_.sigma_e_is_diagonal = 0;" << endl;
else
else if (overwrite)
output << "M_.sigma_e_is_diagonal = 1;" << endl;
}