Frequently Asked Questions about MBDyn

Questions

    General

  1. What is MBDyn?
  2. Is MBDyn free?
  3. What license is MBDyn distributed under?
  4. Who maintains/develops MBDyn?
  5. Where can I get MBDyn?
  6. Where can I get MBDyn binaries?
  7. Who distributes MBDyn?
  8. Building

  9. Does MBDyn run on Windows?
  10. What compiler is required/should I use?
  11. How can I build run-time loadable modules?
  12. How can I build with UMFPACK support?
  13. Documentation

  14. Where can I find the theory manual?
  15. Where can I find the developers' manual?
  16. What is the exact syntax of element X?
  17. What element should I use to model Y?
  18. Contributing

  19. How can I contribute to MBDyn?
  20. How do I submit a patch to MBDyn?
  21. Technical

  22. What type of numerical integration does MBDyn use?
  23. Can I compute eigenvalues with MBDyn?
  24. What deformable components does MBDyn support?
  25. What if the simulation does not converge during the derivatives step?
  26. Why does position/orientation need to be specified twice in most joints?
  27. How do I clamp two structural nodes?
  28. How do I impose the relative orientation between two structural nodes?
  29. Does MBDyn support friction?
  30. Can MBDyn model closed loop systems?
  31. Tips

  32. How can I quickly find out the value of a label?

Answers

    General

  1. What is MBDyn?
    MBDyn is a multibody multidisciplinary analysis software suite. It performs the integrated simulation and analysis of nonlinear mechanical, aeroelastic, hydraulic, electric and control problems by numerical integration.
  2. Is MBDyn free?
    MBDyn is free software (see the GNU project of the Free Software Foundation for more information about free software).

    In short, this means that you can freely get MBDyn in binary and in source form, use it, modify it, and even redistribute it for free or for any fee you want to apply. However, there are few constraints: you cannot modify the license and, if you redistribute the software, you have to distribute it (also) in source form, even if you modified it, including your modifications. This is necessary to give others the same rights you got and exploited by using it.

  3. What license is MBDyn distributed under?
    It is currently distributed under the GNU Public License (GPL) Version 2, as you may read in the license page.
  4. Who maintains/develops MBDyn?
    MBDyn was developed at the Dipartimento di Ingegneria Aerospaziale of the University "Politecnico di Milano" (DIA/Polimi) as a research tool that now has reached nearly industrial strength. It has been made available to the free software community in 2001, when the first release under the GNU Public License (GPL) and is currently maintained and further developed by a pool of researchers. Contributions from users are warmly welcome (there is a dedicated FAQ here).
  5. Where can I get MBDyn?
    You may get the latest release of the source code from the download page of this site; authorized users may also browse the CVS Tree; public access is not currently available essentially for lack of admin resources and of external developers' requests; if you think you need (and deserve ;) it, you can ask for a snapshot.
  6. Where can I get MBDyn binaries?
    We do not distribute official binaries (basically, for lack of resources). Occasionally, we make builds available for selected architectures (essentially, those we use); for example, for Cygwin. See this page for miscellaneous downloadable stuff.

    If you need help in building MBDyn please ask on the mbdyn-users mailing list (you need to subscribe first; instructions here).

  7. Who distributes MBDyn?
    MBDyn is distributed in source form by the developers, through the official web site.

    MBDyn is also distributed by few package maintainers; those distributions are not directly under our control, so for any issue related to packaging, please do contact the package maintainers. In case of bugs spotted in those distributions, we are happy to hear about them, in case the bugs actually are in MBDyn source code, because then they can get fixed. However, having the bug fixed in MBDyn source code doesn't imply that those distributors will react promptly and incorporate the bugfix in a timely manner. In those cases, again, please don't complain to us.

    Known software distributions that include MBDyn are listed below; if you know of distributions that include MBDyn and that are not listed here, please let us know (thru the mbdyn-users mailing list; you need to subscribe first; instructions here).

  8. Building

  9. Does MBDyn run on Windows?
    MBDyn is developed keeping standard C++ in mind and using free development tools like GNU's gcc and autotools. Nothing should prevent it from building under Windows, provided the standard headers and the C/C++ standard library are available.

    Having said this, no one of the developers ever tried to build it using Windows-specific compilers, like Visual Studio. As explained here, MBDyn can be built for Windows using MSYS/MinGW or Cygwin. Note that currently the MSYS/MinGW build does not support networking, so no MATLAB/Simulink interface is available. Volunteers are welcome to work on adding Winsock support.

  10. What compiler is required/should I use?
    MBDyn should be written in standard C/C++, so any standard compliant C/C++ compiler should be fine. If it's not, then it's a bug that should be notified to the developers and (hopefully) fixed.

    The typical development environment used at DIA/Polimi is gcc/g++ (as of this writing, gcc 3.4 and experimentally gcc 4.0) on different flavors of GNU/Linux (mostly SuSE, RedHat, CentOS, Mandrake and Debian; Slackware during early development) on Intel & AMD 32 bit processors and on AMD 64 bit processors.

    During the development of MBDyn, the C++ standard underwent some development, and common compilers saw huge improvements, so take this for what it's worth: MBDyn has been compiled on many different architectures, including:

    If you succeed in building MBDyn on a system or with a compiler not listed here, please let us know (thru the mbdyn-users mailing list; you need to subscribe first; instructions here).
  11. How can I build run-time loadable modules?
    To enable building of run-time loadable modules one needs to configure using the switch
        ./configure --enable-runtime-loading
    
    This requires the availability of the GNU ltdl library.

    In addition to that, to enable building specific modules, one needs to configure using the switch

        ./configure --with-module=<module-list>
    
    where module-list is the list of the module names one wants to build. Module names correspond to the directories in modules/ without the module- prefix.

    To add custom modules, use the module-template as a guideline, and place the module in a subdirectory of modules/.

    On x86/x86_64 with gcc/g++, MBDyn must be compiled with

        LDFLAGS=-rdynamic
    
    to instruct MBDyn to export symbols to the run-time loaded modules. This is known to work with Cygwin as well. No other architecture/compiler has been tested. If you succeed, please drop us a note.
  12. When using CygWin, probably due to a bug in the way the libltdl is built or to a bug in libtool itself, one needs to explicitly link the libltdl object. This is obtained, for example, by setting

        LIBS=/usr/lib/libltdl.a
    
    when configuring MBDyn, or by manually hacking the resulting mbdyn/Makefile.

  13. How can I build with UMFPACK support?
    On most systems, UMFPACK, a widespread sparse linear solver, is not available. It is not strictly needed by MBDyn, since at least two built-in sparse linear solvers are available, and one of them, naive (documented here), may be significantly more efficient than UMFPACK at solving a wide class of typical multibody problems (small & very sparse).

    When not natively available, you need to download UMFPACK sources, compile them following instructions provided with the package, place the library (after renaming it to libumfpack.a) and all the header files where the compiler and the linker can find them, or instruct the C pre-processor about the location of the header files by the CPPFLAGS switch, and the linker about the location of the library by the LDFLAGS switch.

    On Debian GNU/Linux, UMFPACK can be installed by means of a native package; in that case, it has been reported that only the header files need help to be located. Then, libamd, used by UMFPACK, depends on libm, but this information is not available to the linker during configuration. So to configure UMFPACK support on Debian one needs to use

        LIBS=-lm CPPFLAGS=-I/usr/include/umfpack ./configure
    
    and that should be it.

    If you are aware of more GNU/Linux distributions or other OSes that provide UMFPACK or other uncommon packages that MBDyn interacts with, please let us know (thru the mbdyn-users mailing list; you need to subscribe first; instructions here).

  14. Documentation

  15. Where can I find the theory manual?
    The short answer is: there is no theory manual, sorry.

    A more detailed answer is: the theory manual is being authored; most of the foundations MBDyn is based on are illustrated in Pierangelo Masarati's Ph.D. dissertation and in the papers listed here.

    Many of those publications refer to the application of MBDyn to the modeling and analysis of rotorcraft and other aerospace-related problems.

    Selected ones refer to theoretical aspects of the software, or to implementation details. Among them:

    Further development is underway; as soon as they become available, related documents will be posted here.
  16. Where can I find the developers' manual?
    The short answer is: there is no developers' manual, sorry.

    A more detailed answer is: it is being authored; a draft copy is available here, but it's far from complete and in a very preliminary status. Essentially, developers committed themselves to writing some technical documentation for each new feature that is added to the code, while features already implemented will get documented whenever they need review for whatever reason. Eventually, this document will become complete enough to be called "developers' manual".

  17. What is the exact syntax of element X?
    The exact syntax of each input card is illustrated in the input manual (make sure you consult the input manual that refers to the version you are using).

    The input manual is regularly updated, but omissions may occur, and outdated stuff and bugs may always slip in. Please feel free to notify errors and submit patches, if you think there is anything wrong in it, using the mbdyn-users mailing list (you need to subscribe first; instructions here).

  18. What element should I use to model Y?
    To answer this question, the complement of the input manual, namely a modeling manual, is required. Unfortunately, such document does not exist, and it is not even foreseen. Right now, modeling style and capabilities are grossly addressed in the tutorials; for specific needs you should ask on the mbdyn-users mailing list (you need to subscribe first; instructions here).
  19. Contributing

  20. How can I contribute to MBDyn?
    There are many ways to contribute to MBDyn: by
  21. How do I submit a patch to MBDyn?
    If you submit patches, either to the code or to the documentation:
  22. Technical

  23. What type of numerical integration does MBDyn use?
    MBDyn uses an original implicit multistep integration scheme that allows to tune the algorithmic dissipation. It allows to integrate differential-algebraic problems with second-order accuracy. The algorithm recalls the so called Backward Difference Formulas (BDF) with tunable asymptotic spectral radius. By increasing this parameter from 0.0 (Backward Differentiation Formulas) to a higher value, the local error of the algorithm is reduced. Practical values of 0.6 showed the best trade-off between accuracy and stability of the algorithm. More details my be found in the paper "Multistep Integration of Ordinary, Stiff and Differential-Algebraic Problems for Multibody Dynamics Applications" by P. Masarati, M. Lanz, and P. Mantegazza.
  24. Can I compute eigenvalues with MBDyn?
    MBDyn performs direct time integration of Initial Value Problems (IVP), where the problem is written as a system of nonlinear Differential Algebraic Equations (DAE). Eigenvalues make little sense for this type of problems; all one could expect is the capability to solve the eigenproblem of the system obtained by linearizing the problem about an equilibrium solution. MBDyn does not directly implement this type of analysis; there are quite involved technical reasons, essentially related to the way the DAE problem is written. However, it supports a technique based on the Proper Orthogonal Decomposition (POD) to extract significant Proper Orthogonal Modes (POM) from time series, which means that the system must be brought in a quasi-equilibrium condition, it must be excited about that equilibrium condition and the time series of the response must be post-processed to obtain estimates of the eigenvalues and of the mode shapes; those estimates can be very accurate if the related eigenmodes are adequately excited. The details are described in [JSV2003], [MBD2003], [ASME2003].

    With a little bit of refactoring, one could extract eigenvalues from a static equilibrium solution; there is some ongoing work in this area, if anyone is interested.

  25. What deformable components does MBDyn support?
    In short: All the above elements connect structural nodes in a rather arbitrary fashion; they can be defined with arbitrary offset and orientation with respect to the nodes they connect; for lumped and beam elements, a wide variety of constitutive laws can be used, and users can easily implement their own (right now by hacking the code; in future versions, by implementing user-defined, run-time loadable modules).
  26. What if the simulation does not converge during the derivatives step?
    In short: Check the exact syntax and meaning of the above input statements in the input manual (make sure you consult the input manual that refers to the version you are using).
  27. Why does position/orientation need to be specified twice in most joints?
    (Based on the response to this message).

    Usually, MBDyn input requires that the location of a joint, or its orientation, be defined with respect to both nodes it connects. In case of pin joints, usually both the absolute location and orientation, and the location and orientation relative to the node must be specified.

    Defining a position or an orientation both ways seems to be redundant. However,

    1. there is a good reason to do that; and
    2. there are means (and facilities) to ensure consistency.

    Good reason
    If one inputs consistent data, it's just a matter of redundancy; if one inputs inconsistent data, either intentionally or by mistake, at least that's a chance of being warned.

    However, in some cases, one may accept the risk of introducing inconsistent models, and ask the solver to bring them to consistency, with some control on how consistency is introduced. This feature, called initial assembly, is experimental.

    By definition, an algebraic constraint defines an algebraic relationship between the relative position and/or orientation of two "geometrical entities" whose kinematics is that of a rigid body (in MBDyn they're called structural nodes; the difference between a structural node and a rigid body is that, from the point of view of algebraic constraints, structural nodes don't need to have any mass or inertia, since it's all about geometry and kinematics).

    Consider, for example, a spherical hinge joint, which connects two structural nodes. The position and orientation of node 1 are x_1 and R_1, and those of node 2 are x_2 and R_2. The location (and the orientation, when matters) of the constraint (the ball joint, in this case) must be defined with respect to both nodes. So, with respect to node 1, the location of the ball is defined by rel_f_1, where the prefix rel_ means that it's defined in the node's reference frame, in this case frame R_1, so that in the absolute, or global, frame,

        f_1 = R_1 * rel_f_1
    
    and, with respect to node 2, the location of the ball is defined by rel_f_2, and
        f_2 = R_2 * rel_f_2
    
    What counts is that the location of the ball, regardless of what node is considered, must be unique; namely, both paths, either from node 1 or 2, must lead to the same absolute point:
       x_1 + f_1 = x_2 + f_2
    
    The above is the definition of the spherical joint. What really matters is rel_f_1 and rel_f_2: one wants the constraint to be correctly located with respect to each body (think of an elbow: it has to be in the right place with respect to both the arm and the forearm, while its absolute location makes little sense); when the above absolute relationship is not valid, something is inconsistent, so x_1, x_2, R_1 or R_2 need to change (usually, all of them need). The structural nodes need to adjust their absolute position and orientation so that the definition of the algebraic constraints is satisfied. That's why we need two definitions for the same location/orientation: because we need to define both rel_f_1 and rel_f_2, and let the solver check if the rest of the model is consistent.

    How to ensure consistency
    To ensure that everything is consistent, one should always build models incrementally, in a hierarchical manner, using reference frames. After defining a reference frame in the absolute location of the joint, and with the desired orientation, the input syntax allows to make MBDyn compute the relative offsets and re-orientations consistently.

    Note, however, that defining the absolute position and orientation of a joint may not be a trivial task; it becomes easy if models are built hierarchically, i.e. by incrementally building the location and orientation of a joint step by step, so that each intermediate reference frame is relative to an earlier one.

  28. How do I clamp two structural nodes?
    To clamp two structural nodes together means to eliminate all six degrees of freedom of one node, making it entirely dependent on the configuration of the other one. With MBDyn this can be obtained in two different manners:
    1. by eliminating one of the nodes, referring only to the other one; this is the preferred solution, since it reduces the size of the problem;
    2. by constraining the two nodes with a joint that eliminates all six relative degrees of freedom.
      • Since MBDyn 1.3, this can be obtained using the total joint, which allows to independently constrain the components of the relative position and orientation between two nodes.
      • With previous versions, one needs to use a combination of:
        • a spherical hinge, which constrains the three relative displacement components, and
        • a prismatic joint, which constrains the relative orientation.
      See the input manual for details on the syntax of the above mentioned joints (make sure you consult the input manual that refers to the version you are using).
  29. How do I impose the relative orientation between two structural nodes?
    Consider two structural nodes connected by a revolute hinge joint. That joint allows one degree of freedom, corresponding to the relative rotation of the nodes about axis 3 of the revolute hinge joint.

    In some cases, the user may want to impose the value of the angle about that axis as well. In this case, a different joint is required, since now it is imposing all the 6 relative degrees of freedom, rather than the 5 ones imposed in the previous case.

    See the input manual for details on the syntax of the above mentioned joints (make sure you consult the input manual that refers to the version you are using).
  30. Does MBDyn support friction?
    Yes, MBDyn implements some friction models in selected joints. See the input manual for more details (make sure you consult the input manual that refers to the version you are using).
  31. Can MBDyn model closed loop systems?
    Yes, MBDyn is formulated in form of Newton-Euler equations of motion of independent bodies, constrained by algebraic constraint equations, and thus can model systems with arbitrary topological complexity.
  32. Tips

  33. How can I quickly find out the value of a label?
    MBDyn, after parsing the input file, dumps all the symbols defined for the math parser into the .log file. So, for example, to find out what is the value of a label called NODE1, related to an analysis whose output files are named output, the command
        $ grep 'NODE1' output.log
          integer NODE1 = 13170
    
    yields the result. All variables are dumped, including pre-defined ones.



Maintained by mbdyn@aero.polimi.it