Mechanical Component — Spring

The following file, `spring.ssc`, implements a component called `spring`.

The declaration section of the component contains:

• Two rotational nodes, `r` and `c` (for rod and case, respectively)

• Parameter `k`, with a default value of `10 N*m/rad`, specifying the spring rate

• Through and Across variables, torque `t` and angular velocity `w`, to be connected to the rotational domain Through and Across variables later in the file

• Internal variable `theta`, with a default value of `0 rad`, specifying relative angle, that is, deformation of the spring

The `branches` section establishes the relationship between the component Through variable and the component nodes (and therefore the domain Through variable). The ```t : r.t -> c.t``` statement indicates that the torque through the spring acts from node `r` to node `c`.

The equation section starts with an `assert` construct, which checks that the spring rate is greater than zero. If the block parameter is set incorrectly, the `assert` triggers a run-time error.

The first equation, `w == r.w - c.w`, establishes the relationship between the component Across variable and the component nodes (and therefore the domain Across variable). It defines the angular velocity across the spring as the difference between the node angular velocities.

The following two equations define the spring action:

• `t = k * theta`, that is, torque equals spring deformation times spring rate

• `w = theta.der`, that is, angular velocity equals time derivative of spring deformation

```component spring nodes r = foundation.mechanical.rotational.rotational; c = foundation.mechanical.rotational.rotational; end parameters k = { 10, 'N*m/rad' }; end variables theta = { 0, 'rad' }; t = { 0, 'N*m' }; % torque through w = { 0, 'rad/s' }; % velocity across end branches t : r.t -> c.t; % torque through from node r to node c end equations assert(k>0) % spring rate must be greater than zero w == r.w - c.w; % velocity across between node r and node c t == k * theta; w == theta.der; end end ```