L-5 software development

Characteristics of software development for FEMDK and other projects at Institute L-5

Created by Roman Putanowicz@L-5

Software development at L-5

The aim of this presentation is to provide a short summary of the experience accumulated by the researchers at Institute of Computational Civli Engineering (L-5) while developing various software tools.

The main share of this presentation is related to development of FEMDK project being one of the tasks the project "Innovative resources and effective methods of safety improvement and durability of buildings and transport infrastructure in the sustainable development" financed by the European Union from the European Fund of Regional Development based on the Operational Program of the Innovative Economy.

FEMDK project

The main motivation for FEMDK (Finite Element Development Toolkit) is to build and setup an software development environment targeted at applications for computational mechanics, mostly based on Finite Element Method.

Characteristics of FEMDK project

  • Main system language: C++ (gcc compiler)
  • Main scripting language: Python (version 2.7)
  • GUI technology: Qt (version 4)
  • Build tools: CMake (qmake)
  • Repository: SVN

Experience gained

Subsequent slides give a short overview on the experiences in specific areas of the development of numerical simulation software. The slides list various software libraries and applications we are familiar with.

Scientific data and mesh handling

  • MOAB - mesh oriented database library - provides high level mesh framework
  • HDF5 - used mainly via MOAB
  • VTK - we use it extensively for visualisation purposes
  • SILO scientific data library - we have some restricted experience related to use SILO data with VisIt visualisation toolkit

Linear algebra for small dense matrices

  • Armadillo - C++ library with Matlab-like API
  • GMM - generic C++ template based library

Large algebraic solvers

  • PETSc
  • Trilinos - some solvers for linear and nonlinear problems

FEM engines

Visualisation of scientific data

Handling custom data formats

  • Arabica - for handling XML based data files
  • Boost.PropertyTree - for JSON based data
  • Ability to create arbitrary lexers and parsers based on flex and bison tools

Multilanguage programming

  • Embedding and extending Python using raw language API or automation via SWIG

Mesh generation

  • GMSH package - both as stand alone application and as a library

Handling advanced geometry

  • openNURBS - for development plus Rhino as a ready modelling tool.

Selected L-5 projects

Research projects with substantial software development share:

Building GUI for engineering 'calculators'

While developing tools for FEMDK we have established some patterns for building graphical user interfaces based on Qt library. The specific features we are able to handle are:

  • new widget plugins for Qt Designer
  • tree based data browsers
  • integration of Qt with VTK for advanced visualisation
  • embedding Python shell widget
  • generation of calculation reports with ability to export to PDF -- based on KDReport and KDChart libraries

Examples of GUI based applications

Subsequent slides show some screenshots for application with extensive GUIs. We start with the simplest one being de-facto a proof of concept and finish with application with modular, extensible GUI.

Examples: QDSim

Being rather proof of concept and a prototype than fully fledged application QDSim allows to set up quickly a numerical model for rectangular domain for simulating elastic material. It can handle setup for dimensions, meshing, supports and loads.

Examples: Beafire

Beafire is the computational tool for the analysing fire resistance of reinforced concrete beams both statically determined and hyperstatic. The numerical algorithm of the program is capable of modelling the redistribution effects due to changes in stiffness as the results of cracking and degradation of mechanical properties of concrete and reinforced steel caused by high temperature.

Examples: L5B

L5B Composite Beam Designer is an application intended as an aid in design and verification of selected types of composite beams. The specific thing is that design data (e.g. profile data) can be either automatically embedded in the application (via import from CSV format) or read from external configuration files.

Examples: GMSR

GMSR was an attempt to build modular and extendible GUI for complex simulations. It contains custom tree based explorer for model data, Hoops 3D based widget for interactive model manipulation in 3D, VTK widget for data visualisation, Python based shell widget, as well as implementation of a modular data structure.

Examples of CLI based application

Most of programs we develop for research purposes are however controlled via command line or appropriate data files, often in customary data formats. Subsequent example shows how do we handle data based on JSON.


Morphbar is an application to analyse deformation and stress state starting from user prescribed body motion.

Artificial scrolling-like deformation.

Influence of NURBS degree on body shape.

Morphbar control file (JSON format)

   "Actions" : {
    "SaveCV" : {
      "filename" : "ala_cage.vtk"
    "SaveGeom" : 1,
    "SaveFields" :  {
       "filename" : "ala.vtk",
       "at" : {
          "points" : {
            "file" : "mypoints.json",
            "coords" : {
                "1" : [1,0,0],
                "2" : [2,0,0]
          "mesh" : {
             "femType" : "QK",
             "femDegree" : 1,
             "generated" : {
                 "noised" : 0,
                 "nxnynz" : [16, 8, 8],
                 "LxLyLz" : [1, 0.5, 0.5],
                 "OxOyOz" : [0.5, 0.25, 0.25]
       "fields" : ["Umag", "U"]
   "Deformers" : { 
     "active" : ["def1"],
     "def1" : {
        "type" : "NURBSCageDeformer",
        "initconf" : {
             "from" : "bbox",
             "bbox" : [0.0,0.0,0.0,1.0,0.5,0.5],
             "orderVec" : [6,5,5],
             "cvCountVec"  : [6,5,5]
        "deformconf" : {
          "type" : "transformations",
          "transformations" : [
             { "name" : "rotate",
               "selection" : "section",
               "sectionDir" : 0,
               "sectionRange" : [2,3],
               "axis" : [1, 0, 0],
               "angle" : 45