record PendulumData parameter Real m, g, L; end PendulumData; partial model BasePendulum PendulumData p; input Real u; output Real pos[2], vel[2]; end BasePendulum; block Pendulum extends BasePendulum; constant Real PI=3.141592653589793; output Real phi(start=PI/4), phid; equation phid = der(phi); p.m*p.L*p.L*der(phid) + p.m*p.g*p.L*sin(phi) = u; pos = [p.L*sin(phi); -p.L*cos(phi)]; vel = der(pos); end Pendulum; block BrokenPendulum extends BasePendulum; equation vel = der(pos); p.m*der(vel) = p.m*[0; -p.g]; end BrokenPendulum;