diff --git a/OMCompiler/Compiler/NBackEnd/Modules/3_Post/NBTearing.mo b/OMCompiler/Compiler/NBackEnd/Modules/3_Post/NBTearing.mo index f5fe9307a6..dbb4428420 100644 --- a/OMCompiler/Compiler/NBackEnd/Modules/3_Post/NBTearing.mo +++ b/OMCompiler/Compiler/NBackEnd/Modules/3_Post/NBTearing.mo @@ -357,6 +357,7 @@ protected Tearing strict; list> vars_lst, cont_vars, disc_vars; list> eqns_lst, cont_eqns, disc_eqns; + Integer num_vars, num_eqns; list> residual_lst; Adjacency.Matrix adj; Matching matching; @@ -370,14 +371,17 @@ protected eqns_lst := list(Slice.getT(eqn) for eqn in strict.residual_eqns); (cont_vars, disc_vars) := List.splitOnTrue(vars_lst, function BVariable.isContinuous(init = systemType == NBSystem.SystemType.INI)); (cont_eqns, disc_eqns) := List.splitOnTrue(eqns_lst, Equation.isContinuous); + num_vars := sum(BVariable.size(var) for var in disc_vars); + num_eqns := sum(Equation.size(eqn) for eqn in disc_eqns); - if listLength(disc_vars) <> listLength(disc_eqns) then + if num_vars <> num_eqns then Error.addMessage(Error.INTERNAL_ERROR,{getInstanceName() - + " failed.\n" + StringUtil.headline_4("(" + intString(listLength(disc_vars)) + "|" - + intString(sum(BVariable.size(var) for var in disc_vars)) + ") Discrete Variables") + + " failed because number of discrete variables " + intString(num_vars) + " differs from number of discrete equations: " + intString(num_eqns) + + ".\n" + StringUtil.headline_4("(" + intString(listLength(disc_vars)) + "|" + + intString(num_vars) + ") Discrete Variables") + List.toString(disc_vars, BVariable.pointerToString, "", "\t", "\n\t", "\n", true) + "\n" + StringUtil.headline_4("(" + intString(listLength(disc_eqns)) + "|" - + intString(sum(Equation.size(eqn) for eqn in disc_eqns)) + ") Discrete Equations") + + intString(num_eqns) + ") Discrete Equations") + List.toString(disc_eqns, function Equation.pointerToString(str=""), "", "\t", "\n\t", "\n", true) + "\n"}); fail(); end if;