-
-
Notifications
You must be signed in to change notification settings - Fork 5
Open
Description
Description
If-equations are not handled by the parser to convert Base Modelica to Modeling Toolkit models.
How to reproduce
Example 1: Simple If expression
IfEquation.mo
package 'IfEquation'
model 'IfEquation'
Real 'x';
equation
if time < 0.5 then
'x' = 1.0;
elseif true then
'x' = 2.0;
end if;
end 'IfEquation';
end 'IfEquation';julia> BaseModelica.parse_basemodelica("IfEquation.mo")
ERROR: MethodError: no method matching eval_AST(::BaseModelica.BaseModelicaIfEquation)
The function `eval_AST` exists, but no method is defined for this combination of argument types.
Closest candidates are:
eval_AST(::BaseModelica.BaseModelicaPackage)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:130
eval_AST(::BaseModelica.BaseModelicaAnyEquation)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:45
eval_AST(::BaseModelica.BaseModelicaFunctionCall)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:140
...
Stacktrace:
[1] eval_AST(eq::BaseModelica.BaseModelicaSimpleEquation)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:52
[2] eval_AST(eq::BaseModelica.BaseModelicaAnyEquation)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:46
[3] (::BaseModelica.var"#15#17")(eq::BaseModelica.BaseModelicaAnyEquation)
@ BaseModelica ./none:0
[4] iterate
@ ./generator.jl:48 [inlined]
[5] collect(itr::Base.Generator{Vector{Any}, BaseModelica.var"#15#17"})
@ Base ./array.jl:791
[6] eval_AST(model::BaseModelica.BaseModelicaModel)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:104
[7] eval_AST(package::BaseModelica.BaseModelicaPackage)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:132
[8] baseModelica_to_ModelingToolkit
@ ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:153 [inlined]
[9] parse_basemodelica(filename::String)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/BaseModelica.jl:23
[10] top-level scope
@ REPL[2]:1Example 2: Nested inline if
package 'IfElseIfEquation'
model 'IfElseIfEquation'
Real 'x';
equation
if time < 0.33 then
'x' = 1.0;
elseif time < 0.66 then
'x' = 2.0;
else
'x' = 3.0;
end if;
end 'IfElseIfEquation';
end 'IfElseIfEquation';julia> BaseModelica.parse_basemodelica("IfElseIfEquation.mo")
ERROR: MethodError: no method matching eval_AST(::BaseModelica.BaseModelicaIfEquation)
The function `eval_AST` exists, but no method is defined for this combination of argument types.
Closest candidates are:
eval_AST(::BaseModelica.BaseModelicaPackage)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:130
eval_AST(::BaseModelica.BaseModelicaAnyEquation)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:45
eval_AST(::BaseModelica.BaseModelicaFunctionCall)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:140
...
Stacktrace:
[1] eval_AST(eq::BaseModelica.BaseModelicaSimpleEquation)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:52
[2] eval_AST(eq::BaseModelica.BaseModelicaAnyEquation)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:46
[3] (::BaseModelica.var"#15#17")(eq::BaseModelica.BaseModelicaAnyEquation)
@ BaseModelica ./none:0
[4] iterate
@ ./generator.jl:48 [inlined]
[5] collect(itr::Base.Generator{Vector{Any}, BaseModelica.var"#15#17"})
@ Base ./array.jl:791
[6] eval_AST(model::BaseModelica.BaseModelicaModel)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:104
[7] eval_AST(package::BaseModelica.BaseModelicaPackage)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:132
[8] baseModelica_to_ModelingToolkit
@ ~/.julia/packages/BaseModelica/qCG6a/src/evaluator.jl:153 [inlined]
[9] parse_basemodelica(filename::String)
@ BaseModelica ~/.julia/packages/BaseModelica/qCG6a/src/BaseModelica.jl:23
[10] top-level scope
@ REPL[7]:1Example 3: No else case
I'm not sure if the following model is correct Base Modelica, but the parser get's stuck when havong no else:
package 'NoElse'
model 'NoElse'
Real 'x';
equation
if time < 0.33 then
'x' = 1.0;
elseif time < 0.66 then
'x' = 2.0;
elseif true then
'x' = 3.0;
end if;
end 'NoElse';
end 'NoElse';julia> BaseModelica.parse_basemodelica("NoElse.mo")
Versions 'n Stuff
- Julia Version 1.11.6
- BaseModelica v1.1.0
- OS: Ubuntu 24.04.3 LTS
Metadata
Metadata
Assignees
Labels
No labels