1 | model DoubleMassVecLen
|
---|
2 | import Modelica.Math.Vectors;
|
---|
3 |
|
---|
4 | Real[3] x1(start = {0, 0, 0}, each fixed = true);
|
---|
5 | Real[3] x2(start = {len, 0, 0}, fixed = {true, true, false});
|
---|
6 | Real[3] v1(each start = 0, fixed = {true, true, true});
|
---|
7 | Real[3] v2(each start = 0, fixed = {true, true, false});
|
---|
8 | Real[3] fApplied1 = {0.0, 2.0, 0.0}, fApplied2 = {0.0, -2.0, 0.0};
|
---|
9 | Real fInternal (start = 0, fixed = false);
|
---|
10 | Real[3] fInternalVec;
|
---|
11 | Real[3] x1x2Unit; // Unit vector from x1 to x2
|
---|
12 | parameter Real m1 = 0.8, m2 = 1.2, len =2.5;
|
---|
13 | Real lengthCheck;
|
---|
14 | equation
|
---|
15 | // Basic ODE
|
---|
16 | der(x1) = v1;
|
---|
17 | der(x2) = v2;
|
---|
18 | der(v1) = (fApplied1 - fInternalVec) / m1;
|
---|
19 | der(v2) = (fApplied2 + fInternalVec) / m2;
|
---|
20 | fInternalVec = x1x2Unit * fInternal;
|
---|
21 |
|
---|
22 | // Computation of constraint information
|
---|
23 | x1x2Unit = Vectors.normalize(x2 - x1); // Unit vector from x1 to x2
|
---|
24 | Vectors.length(x1 - x2) = len;
|
---|
25 | lengthCheck = Vectors.length(x1 - x2);
|
---|
26 | annotation(experiment(StartTime = 0, StopTime = 5, Tolerance = 1e-06, Interval = 0.006));
|
---|
27 | end DoubleMassVecLen;
|
---|