From 636b959a0279d7c3e03c83e440c9ff9882a8db47 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Wed, 5 Apr 2017 11:07:34 +0200 Subject: [PATCH] preprocessor: add warning for potential non-linearities in model declared linear. #1404 --- preprocessor/ModFile.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/preprocessor/ModFile.cc b/preprocessor/ModFile.cc index 5719d0197..6d993d118 100644 --- a/preprocessor/ModFile.cc +++ b/preprocessor/ModFile.cc @@ -277,6 +277,19 @@ ModFile::checkPass(bool nostrict) || dynamic_model.isBinaryOpUsed(oDifferent))) warnings << "WARNING: you are using a function (max, min, abs, sign) or an operator (<, >, <=, >=, ==, !=) which is unsuitable for a stochastic context; see the reference manual, section about \"Expressions\", for more details." << endl; + if (linear && + (dynamic_model.isUnaryOpUsed(oSign) + || dynamic_model.isUnaryOpUsed(oAbs) + || dynamic_model.isBinaryOpUsed(oMax) + || dynamic_model.isBinaryOpUsed(oMin) + || dynamic_model.isBinaryOpUsed(oGreater) + || dynamic_model.isBinaryOpUsed(oLess) + || dynamic_model.isBinaryOpUsed(oGreaterEqual) + || dynamic_model.isBinaryOpUsed(oLessEqual) + || dynamic_model.isBinaryOpUsed(oEqualEqual) + || dynamic_model.isBinaryOpUsed(oDifferent))) + warnings << "WARNING: you have declared your model 'linear' but you are using a function (max, min, abs, sign) or an operator (<, >, <=, >=, ==, !=) which potentially makes it non-linear." << endl; + // Test if some estimated parameters are used within the values of shocks // statements (see issue #469) set parameters_intersect;