I'm trying to use the Modelica playground to build a double pendulum model but it is erroring with "Internal error function lexer failed". How do I fix this? I assume it's a problem with my model but perhaps it's a problem with the playground? I don't know.
constant Real speed=0.2;
constant Real gravity(unit="m/s2")=9.8 * speed;
constant Real length(unit="m")=1;
constant Real length2(unit="m")=1;
constant Real mass(unit="kg")=1;
constant Real mass2(unit="kg")=1;
Real angle(unit="rad");
Real momentum(unit="kg m/s");
Real angle2(unit="rad");
Real momentum2(unit="kg m/s");
initial equation
angle = 130 * (3.142 / 180);
momentum = 0;
angle2 = 0; // relative to vertical
momentum2 = 0;
equation
der(angle) = (6/(mass * length^2)) * ((2 * momentum - 3 * cos(angle - angle2) * momentum2)/(16 - 9 * cos(angle - angle2)^2));
der(momentum) = -0.5 * mass * length^2 * (der(angle) * der(angle2) * sin(angle - angle2) + (3 * (gravity / length) * sin(angle)));
der(angle2) = (6/(mass2 * length2^2)) * ((8 * momentum2 - 3 * cos(angle - angle2) * momentum)/(16 - 9 * cos(angle - angle2)^2));
der(momentum2) = -0.5 * mass2 * length2^2 * (-der(angle) * der(angle2) * sin(angle - angle2) + (3 * (gravity / length2) * sin(angle2)));
//annotation(experiment(StartTime=0,StopTime=200)); // todo find out how this works
I think the error is in the unit definition of the "momentum" variables. It should be unit="kg.m/s"
instead of unit="kg m/s"
. The fixed code is:
constant Real speed=0.2;
constant Real gravity(unit="m/s2")=9.8 * speed;
constant Real length(unit="m")=1;
constant Real length2(unit="m")=1;
constant Real mass(unit="kg")=1;
constant Real mass2(unit="kg")=1;
Real angle(unit="rad");
Real momentum(unit="kg.m/s");
Real angle2(unit="rad");
Real momentum2(unit="kg.m/s");
initial equation
angle = 130 * (3.142 / 180);
momentum = 0;
angle2 = 0; // relative to vertical
momentum2 = 0;
equation
der(angle) = (6/(mass * length^2)) * ((2 * momentum - 3 * cos(angle - angle2) * momentum2)/(16 - 9 * cos(angle - angle2)^2));
der(momentum) = -0.5 * mass * length^2 * (der(angle) * der(angle2) * sin(angle - angle2) + (3 * (gravity / length) * sin(angle)));
der(angle2) = (6/(mass2 * length2^2)) * ((8 * momentum2 - 3 * cos(angle - angle2) * momentum)/(16 - 9 * cos(angle - angle2)^2));
der(momentum2) = -0.5 * mass2 * length2^2 * (-der(angle) * der(angle2) * sin(angle - angle2) + (3 * (gravity / length2) * sin(angle2)));
//annotation(experiment(StartTime=0,StopTime=200)); // todo find out how this works
Seems there is room for improvement in the error message...