University of Colorado at Boulder CU Home CU Search CU A to Z Map
navigation navigation

Mercury, a tool for slow, fast, and hard real-time hybrid simulation


Mercury, messenger
of the Gods known
for his speed
Mercury is a streamlined finite-element simulation tool designed to perform pseudo-dynamic, slow, fast, and hard real-time hybrid simulation (for which it is optimized).

Mercury was developed in two stages. First, a MATLAB version was written in order to check accuracy and reliability of the various models within a user-friendly environment. Once the MATLAB version was deemed satisfactory, then a C++ version was written from scratch by a professional programmer (Dr. G. Haussmann, Technical Director) in such a way to be optimized for real-time hybrid simulation.

This two-tier approach proved most valuable as the MATLAB version not only greatly facilitated subsequent implementation in C++ but by itself it constitutes an excellent pedagogical tool for those interested in learning the intricacies of non-linear structural analysis with modern elements (flexibility-based ones with fiber sections, and appropriate constitutive models). Such a code exists, Fedeaslab, however the source code is locked. Another code would be OpenSees, however few graduate students feel comfortable in programming in C++ and would rather modify MATLAB code. Finally, there is FEAP, which could be an intermediary solution, as modifying Fortran remains a rather simple task.

Furthermore, the MATLAB version of Mercury is set up to perform hybrid simulation. Currently, a client version of Mercury could simulate the experiment as a prelude to an actual test. This platform is also ideal from a pedagogical point of view to understand the concept of hybrid simulation.

The integration of the two versions of Mercury, as well as supporting code, is shown below:

The MATLAB and the C++ versions are designed to accept similar (but not identical) input files, hence m2lua.m is a MATLAB-based translator which will convert .m files into .lua ones. Similarly, the mesh definition for a multi-story orthogonal frame with fiber sections, zero length elements and/or sections can be a daunting task. Hence this task is facilitated by mmg.m (Mercury Mesh Generator) which reads key information from a preformatted Excel file and generates a Mercury-compatible file ready to run.

Finally, the C++ version of Mercury can be embedded in Simulink, LabView or operate within Windows, Linux or Real-time Linux kernels.

Multi-platform Capabilities

Many laboratories use Simulink and/or LabView to interact with instrumentation and hardware. Mercury has the capability to be embedded as a module within either of them and could be wired up to various components depending on the lab setup. Such components include not only actuators, but also shake tables and servomotors. Numerical models of components can also be added by wiring them up to the Mercury module.

Mercury is not limited to RTHS, it can be used for "pseudo-dynamic" tests in a lab simply equipped with either LabView or Simulink.

Mercury can be easily connected to OpenFresco/SIMCOR for distributed testing.

Notes