﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
4424	Wrong ModelStructure in FMI 2 modelDescription.xml	Rüdiger Franke	Willi Braun	"Here are two simple continuous and discrete-time models. When exported through FMI 2.0, the ModelStructure is wrong in both cases. This blocks the use of OpenModelica for non-trivial uses, such as the ones investigated in the PARADOM project.

Continuous-time example:
{{{#!mo
model DIC ""Double Integrator Continuous-time""
  parameter Real p = 1 ""gain for input"";
  parameter Real y1_start = 1 ""start value for first state"";
  parameter Real y2_start = 0 ""start value for second state"";
  input Real u(start = -2);
  output Real y1, y2;
initial equation
  y1 = y1_start;
  y2 = y2_start;
equation
  der(y1) = p * u;
  der(y2) = y1;
end DIC;
}}}

The ModelStructure is:
{{{#!xml
  <ModelStructure>
    <Outputs>
      <Unknown index=""1"" dependencies=""5"" dependenciesKind=""dependent"" />
      <Unknown index=""2"" dependencies=""1"" dependenciesKind=""dependent"" />
    </Outputs>
    <Derivatives>
      <Unknown index=""3"" dependencies=""5"" dependenciesKind=""dependent"" />
      <Unknown index=""4"" dependencies=""1"" dependenciesKind=""dependent"" />
    </Derivatives>
  </ModelStructure>
}}}

The ModelStructure should be:
{{{#!xml
  <ModelStructure>
    <Outputs>
      <Unknown index=""1"" dependencies=""1"" dependenciesKind=""dependent"" />
      <Unknown index=""2"" dependencies=""2"" dependenciesKind=""dependent"" />
    </Outputs>
    <Derivatives>
      <Unknown index=""3"" dependencies=""5"" dependenciesKind=""dependent"" />
      <Unknown index=""4"" dependencies=""1"" dependenciesKind=""dependent"" />
    </Derivatives>
  </ModelStructure>
}}}

Discrete-time example:
{{{#!mo
model DID ""Double Integrator Discrete-time""
  parameter Real p = 1 ""gain for input"";
  parameter Real y1_start = 1 ""start value for first state"";
  parameter Real y2_start = 0 ""start value for second state"";
  input Real u(start = -2);
  output Real y1(start = y1_start, fixed = true);
  output Real y2(start = y2_start, fixed = true);
  Real ud;
equation
  ud = sample(u, Clock(Clock(/*inferred*/), solverMethod = ""ImplicitEuler""));
  der(y1) = p * ud;
  der(y2) = previous(y1) + 0.5 * p * ud * interval(ud);
end DID;
}}}

The ModelStructure is:
{{{#!xml
  <ModelStructure>
    <Outputs>
      <Unknown index=""7"" dependencies=""5"" dependenciesKind=""dependent"" />
      <Unknown index=""8"" dependencies=""5"" dependenciesKind=""dependent"" />
    </Outputs>
    <DiscreteStates>
      <Unknown index=""7"" dependencies="""" dependenciesKind="""" />
      <Unknown index=""8"" dependencies="""" dependenciesKind="""" />
    </DiscreteStates>
  </ModelStructure>
}}}

The ModelStructure should be:
{{{#!xml
  <ModelStructure>
    <Outputs>
      <Unknown index=""7"" dependencies=""1 5"" dependenciesKind=""dependent dependent"" />
      <Unknown index=""8"" dependencies=""1 2 5"" dependenciesKind=""dependent dependent dependent"" />
    </Outputs>
    <DiscreteStates>
      <Unknown index=""7"" dependencies=""1 5"" dependenciesKind=""dependent dependent"" />
      <Unknown index=""8"" dependencies=""1 2 5"" dependenciesKind=""dependent dependent dependent"" />
    </DiscreteStates>
  </ModelStructure>
}}}"	defect	closed	blocker	1.13.0	FMI		fixed		Willi Braun
