|
| 1 | +""" |
| 2 | + Fixed(;name, s0=0.0) |
| 3 | +
|
| 4 | +Flange fixed in housing at a given position. |
| 5 | +
|
| 6 | +# Parameters: |
| 7 | +
|
| 8 | + - `s0`: [m] Fixed offset position of housing |
| 9 | +
|
| 10 | +# Connectors: |
| 11 | +
|
| 12 | + - `flange: 1-dim. translational flange` |
| 13 | +""" |
| 14 | +function Fixed(; name, s0 = 0.0) |
| 15 | + pars = @parameters s0 = s0 |
| 16 | + vars = [] |
| 17 | + |
| 18 | + @named flange = Flange() |
| 19 | + |
| 20 | + eqs = [flange.s ~ s0] |
| 21 | + |
| 22 | + return compose(ODESystem(eqs, t, vars, pars; name = name, defaults = [flange.s => s0]), |
| 23 | + flange) |
| 24 | +end |
| 25 | + |
| 26 | +""" |
| 27 | + Mass(; name, m, s0 = 0.0, v0 = 0.0) |
| 28 | +
|
| 29 | +Sliding mass with inertia |
| 30 | +
|
| 31 | +# Parameters: |
| 32 | +
|
| 33 | + - `m`: [kg] Mass of sliding mass |
| 34 | + - `s0`: [m] Initial value of absolute position of sliding mass |
| 35 | + - `v0`: [m/s] Initial value of absolute linear velocity of sliding mass |
| 36 | +
|
| 37 | +# States: |
| 38 | +
|
| 39 | + - `s`: [m] Absolute position of sliding mass |
| 40 | + - `v`: [m/s] Absolute linear velocity of sliding mass (= D(s)) |
| 41 | +
|
| 42 | +# Connectors: |
| 43 | +
|
| 44 | + - `flange: 1-dim. translational flange of mass` |
| 45 | +""" |
| 46 | +function Mass(m; name, s0 = 0.0, v0 = 0.0) |
| 47 | + @named pr = PartialRigid(; L = 0, s0) |
| 48 | + @unpack flange_a, flange_b, s = pr |
| 49 | + @parameters m=m [description = "Mass of sliding mass [kg]"] |
| 50 | + @variables v(t)=v0 [description = "Absolute linear velocity of sliding mass [m/s]"] |
| 51 | + @variables a(t)=0 [description = "Absolute linear acceleration of sliding mass [m/s^2]"] |
| 52 | + eqs = [v ~ D(s) |
| 53 | + a ~ D(v) |
| 54 | + m * a ~ flange_a.f + flange_b.f] |
| 55 | + return extend(ODESystem(eqs, t; name), pr) |
| 56 | +end |
| 57 | + |
| 58 | +""" |
| 59 | + Spring(c; name, s_rel0=0) |
| 60 | +
|
| 61 | +Linear 1D translational spring |
| 62 | +
|
| 63 | +# Parameters: |
| 64 | +
|
| 65 | + - `c`: [N/m] Spring constant |
| 66 | + - `s_rel0`: Unstretched spring length |
| 67 | +
|
| 68 | +# Connectors: |
| 69 | +
|
| 70 | + - `flange_a: 1-dim. translational flange on one side of spring` |
| 71 | + - `flange_b: 1-dim. translational flange on opposite side of spring` #default function |
| 72 | +""" |
| 73 | +function Spring(c; name, s_rel0 = 0) |
| 74 | + @named pc = PartialCompliant() |
| 75 | + @unpack flange_a, flange_b, s_rel, f = pc |
| 76 | + @parameters c=c [description = "Spring constant [N/m]"] |
| 77 | + @parameters s_rel0=s_rel0 [description = "Unstretched spring length [m]"] |
| 78 | + |
| 79 | + eqs = [f ~ c * (s_rel - s_rel0)] |
| 80 | + return extend(ODESystem(eqs, t; name), pc) |
| 81 | +end |
| 82 | + |
| 83 | +""" |
| 84 | + Damper(d; name) |
| 85 | +
|
| 86 | +Linear 1D translational damper |
| 87 | +
|
| 88 | +# Parameters: |
| 89 | +
|
| 90 | + - `d`: [N.s/m] Damping constant |
| 91 | +
|
| 92 | +# Connectors: |
| 93 | +
|
| 94 | + - `flange_a: 1-dim. translational flange on one side of damper` |
| 95 | + - `flange_b: 1-dim. translational flange on opposite side of damper` |
| 96 | +""" |
| 97 | +function Damper(d; name) |
| 98 | + @named pc = PartialCompliantWithRelativeStates() |
| 99 | + @unpack flange_a, flange_b, v_rel, f = pc |
| 100 | + @parameters d=d [description = "Damping constant [Ns/m]"] |
| 101 | + @variables lossPower(t)=0 [description = "Power dissipated by the damper [W]"] |
| 102 | + eqs = [f ~ d * v_rel; lossPower ~ f * v_rel] |
| 103 | + return extend(ODESystem(eqs, t; name), pc) |
| 104 | +end |
0 commit comments