Coming from Adams¶
If you model in MSC Adams, most of freedyn2 will be familiar – the same rigid bodies, joints, forces and HHT integration. What is different is how a model is made and looked at: a text file instead of a database, written by you or an assistant; a viewer that re-simulates on every save; variant studies from a slider.
Concepts side by side¶
| Adams | freedyn2 |
|---|---|
| Part, Ground | bodies, ground |
| Marker, hardpoint, construction frame | none needed: points and frames are given globally at t = 0 where they are used; shared ones are named points and frames ({mirror: ...} for left / right, {in: part, local: ...} for part coordinates) |
| CM marker, inertia tensor | position (center of mass), orientation (principal axes), inertia (principal moments) |
| Revolute, Translational, Cylindrical, Spherical, Fixed | joints revolute, prismatic, cylindrical, spherical, fixed |
| Planar, JPRIMs (inline, inplane, orientation, parallel axes, perpendicular) | generic with the directions to fix |
| Motion (displacement, angle) | drivers on a measure |
| Spring-damper (translational, rotational) | spring_damper, torsion_spring |
| Bushing | bushing |
| Single-component force / torque (SFORCE), VFORCE | expression_force, expression_torque |
| DX, DZ, VZ, AZ, DM, … in expressions | measures, named and used by name |
| STEP, IF, AKISPL, CUBSPL | step(), if_else(), splines (akima) |
| Design variables, parametric expressions | parameters and =formulas in any field |
| Tire (MF-Tyre / PAC), road (RDF, CRG) | tire (a built-in Magic Formula tire; .tir data sets through extensions), analytic road or OpenCRG |
| Requests, measures for post-processing | result channels, formula channels in the viewer |
| Accelerometer requests (ACCX, ACCY, ACCZ, WDTX …) | sensors: acceleration, specific force, angular velocity and acceleration at a point |
| Dynamic simulation, HHT / GSTIFF | solver: HHT on a Lie group, fixed step |
| Linear analysis (eigenvalues) | Eigenmodes and root locus in the viewer, modes / locus for the assistant |
| Design evaluation, DOE (one factor) | the fan (≋) in the viewer, sweep for the assistant |
| Adams PostProcessor | the viewer: plots, x-y, FFT, cursors, run comparison, Δ plots, report |
What is different¶
- Units are SI, always. An Adams model in mm, kg, N, s needs its lengths divided by 1000 and its stiffnesses converted; the checks warn when a model looks like mm.
- No markers. Where Adams attaches a joint to marker I on part 1 and marker J on part 2, FreeDyn gives the joint one global location and orientation at t = 0; both bodies carry it from there. The same for springs (two global points) and forces.
- Orientations are quaternions, not Euler angles (body 313 etc.): no singular angles. A
rotation by φ about an axis n is
[cos(φ/2), n sin(φ/2)]; formulas make it readable ([=cos(phi/2), 0, 0, =sin(phi/2)]). - The model is a file. Diff it, review it, keep it in git, let an assistant change it – and see every change in the viewer the moment it is saved.
- Inertia as principal moments. Give the principal moments and turn the body frame to the principal axes (eigen-decomposition of the Adams inertia tensor).
Not (yet) in freedyn2¶
Flexible bodies, contacts (other than tires), couplers and gears, universal and
constant-velocity joints, friction in joints, static and kinematic analyses (start from rest
and let it settle, or prescribe the motion with drivers), co-simulation interfaces. An
importer for Adams .adm (and .cmd with design variables) is planned; until then a model is
quickest rebuilt by an assistant from the Adams listing.
A first translation¶
An Adams pendulum – a part on a revolute joint to ground, its I and J markers at the pivot with z along global y – becomes:
model: pendulum
gravity: [0, 0, -9.81]
bodies:
link: # PART/2, CM at (500, 0, 0) mm
mass: 1.0
inertia: [0.0008, 0.0834, 0.0834] # IXX, IYY, IZZ about the CM, principal axes = global
position: [0.5, 0, 0]
joints:
pivot: # JOINT/1, REVOLUTE, I = 2.3, J = 1.1
type: revolute
body1: link
location: [0, 0, 0]
orientation: [0.7071068, -0.7071068, 0, 0] # z of the markers along global y
solver: {type: HHT, end_time: 2.0, step: 0.001}