If there is a model local variable that contains a lead of an endogenous variable, and that model local variable is never used, then Dynare crashes with “an instance of ‘DataTree::UnknownDerivIDException’”.
This happens in 4.1.1 and in the nightly build.
The attached model file demonstrates it. (A massively stripped down version of the model file I was working with.)
To see that the two conditions are above are necessary for the crash, change the first line of the file to:
@#define crash = 0
and rerun. It will then use the model local variable which is sufficient to remove the crash.
Then undo this change, and instead comment out line 44. Now the forward looking local variable does not get defined and again the crash disappears.
dseg1_js.mod (1.68 KB)
Thanks cfp for reporting the bug. We are going to look into it.
Sorry to pester, but is a fix to this in the works? I’m now working with a different model with more model local variables (declared in loops) and tracking down which are unused is a real pain.
Thanks in advance,
For anyone else experiencing this bug, the attached C# programme will trim out all the unused model local variables from an already macro expanded model file, as a temporary work around. (You run dynare with “savemacro” in the command line, wait for the crash, then run this passing in the -macroexp.mod file. You then run dynare on this programmes output.)
It may also be useful to others as it cleans up the -macroexp file making it much more readable.
Program.cs.txt (3.18 KB)
Sorry for taking long to fix this bug. We are aware of it and it will most probably be fixed in the next Dynare release.
Thanks for posting your temporary workaround.
The fix has been applied in the git repository and will be in the next release.
If you can’t wait, use tomorrow’s snapshot.
There’s a small residual bug related to this. Dynare currently adds auxiliary variables for leads and lags (of e.g. exogenous vars) which are only mentioned in the definition of unused model local variables.
Thanks for reporting this. The fix has been applied. Same as above applies.