Home Objexx Engineering

Scientific and Engineering Software Development

Objexx provides state of the art scientific and engineering software development, reengineering, modernization, and migration services. Advanced algorithms are developed to meet challenging technical and performance requirements and implemented in cross-platform C++, Python, or Fortran 95.

Object-oriented design is used to provide high modularity and maintainability. Objexx solutions are robust and testable. We follow an evolutionary "agile" process built around frequent releases and comprehensive testing that provides the client with exceptional feedback opportunities and the flexibility to adapt to changing requirements.

Legacy Fortran can be ported, modernized, and migrated to Fortran 95 or C++.

Complete software solutions are built to meet client requirements for complex engineering systems, from analysis to design to implementation and documentation.

Object-Oriented Design

Advanced object-oriented designs are crafted into solutions that are highly modular, well insulated, and extensible:

  • Decoupled interface-based designs.
  • Pluggable modules and types.
  • Object-oriented design patterns.
  • Innovative, low maintenance designs built on structured configuration files that support dynamically generated model representations and GUIs.
  • Expression templates, policy classes, and other template techniques.
  • Best practices for lifetime, ownership, and dependency management.

Systems can be built in C++ for performance and the security of static typing or in Python for its rapid development benefits. Hybrid solutions using C++ for performance-critical subsystems under a Python front-end can be an excellent solution for some applications. Hybrid designs incorporating Fortran computational modules wrapped for use from Python or C++ can be a cost-effective solution for modernizing legacy Fortran applications.

Agile Process

Objexx projects are carried out using a agile process that produces functional releases of increasing capability early and regularly to support the natural evolution of requirements as projects proceed. Agile methods are highly successful and cost-effective compared to traditional approaches with a heavy up-front requirements and design processes that can't elicit early feedback and are inflexible in the face of inevitable changing requirements.

An essential part of an agile process is the development of comprehensive testing in parallel with application code, and for projects with a reengineering component this test driven development approach is even more critical.

Collaborative Development

Objexx uses tools and processes designed to facilitate collaboration between development team members and to provide an open environment that enables a high degree of client involvement. Objexx generally uses the web-based Trac system to provide a central project portal where roadmaps and tickets can be tracked and project documentation and materials can be viewed and contributed to by team members. Objexx uses modern distributed version control systems such as Mercurial and Git to enable developers to collaborate without the constraints imposed by traditional version control systems.

High-Performance Algorithms

Objexx develops advanced, high performance technical algorithms to meet client requirements, bringing expertise in discrete algorithms, kinematics, dynamics, structures, optimization, and biomolecular modeling, signal analysis, and numerical methods. Objexx has a track record of building object-oriented systems that use optimized algorithms and data structures to achieve dramatic performance gains over the legacy systems that they replace -- extensibility and performance are not mutually exclusive.

GUI/Visualization

Elegant and efficient graphical interfaces and visualization components are developed to client specifications. Objexx uses high-quality cross-platform GUI frameworks such as Qt™ and PyQt/PySide, integrating 2D and 3D data and model visualization support into the GUI using graphics libraries such as matplotlib, Qwt, PyQwt, VTK, and OpenGL®, using 3D visualization and animation built with OpenSceneGraph for real-time display and with POV-Ray™ for high-quality ray-traced output.

Reengineering

Objexx specializes in reengineering technical applications to provide the benefits of modern languages and designs while preserving the value of the computational code. This can involve diverse approaches such as wrapping core Fortran or C computational code with an object-oriented C++ or Python layer and GUI, or applying such a wrapping approach as an interim stage followed by a full migration to a modern computational core. Computational results can be migrated to a modern, portable, space-efficient data file format such as HDF5.

Objexx has developed innovative dynamic GUIs for large engineering applications with hundreds of input parameters. Configuration files provide a single point of definition for the parameters from which the GUI is constructed programatically, avoiding the maintenance burden of many hard-coded parameters and making the addition and modification of the input specifications extremely efficient.

The Objexx agile process allows the reengineering process to evolve through a series of release-quality milestones that can be evaluated and put into production use by the client when desired.

A combination of in-source assertion tests, unit tests, and static and dynamic testing is used to build a safety net around applications to allow this evolutionary reengineering process to preserve, and even improve, the quality of the code. The ObjexxFTK was developed to provide robust unit and assertion testing for Fortran, where testing at this granularity is unfortunately rare.

Resources

Slides from the Objexx training course on Migrating to a C++ Object Oriented Design.

Fortran Migration

Objexx provides a range of Fortran migration services to preserve the value of client legacy code:

  • Porting to new platforms and compilers.
  • Maintenance and repair.
  • Cross-platform redesign.
  • Conversion to modern Fortran 95 syntax and idioms.
  • Migration to robust object-based designs using derived types and modules.
  • Integration with object-oriented C++ or Python front-end and library code.
  • Migration to C++ using a process designed to preserve the code structure within maintainable C++.

Documentation

High-quality documentation can be provided in a variety of source and target formats including LaTeX, AsciiDoc, reStructuredText, DocBook, PDF, HTML, and Word.

Contact

Contact Objexx for further information on our scientific and engineering software development services.

 

 

 

 

UML for UniPosition

 

     Spatial Sort Algorithm

 

 

Stress Plot

 

 

         Surface Plot