Scientific and Engineering Software Development
Objexx provides exceptional scientific and engineering software development and reengineering services. Advanced algorithms are developed to meet challenging technical and performance requirements and implemented in cross-platform C++, Python, or Fortran.
An evolutionary "agile" process is built around frequent releases and comprehensive testing that provides the client great opportunity for feedback and the flexibility to adapt to changing requirements. Collaborative project server systems are used to provide a high-bandwidth channel for communication with the client.
Object-oriented design is used to provide high modularity and maintainability. Objexx solutions are robust and testable.
Reengineering projects modernize, migrate, and accelerate existing technical applications. Fortran can be modernized to Fortran 2008 or migrated to C++ or Python.
Complete software solutions are built to meet client requirements for complex engineering systems, from analysis to design to implementation and documentation.
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.
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 can host projects on collaborative servers such as GitHub, GitLab, Bitbucket, or Trac 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.
Robust object-oriented designs are crafted into solutions that are highly modular 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.
Objexx develops advanced, high performance technical algorithms to meet client requirements, bringing expertise in discrete algorithms, kinematics, dynamics, structures, optimization, building energy modeling, and biomolecular modeling, signal analysis, and numerical methods. Objexx has a track record of building object-oriented systems that use smart algorithms and data structures to achieve dramatic performance gains over the legacy systems that they replace -- extensibility and performance are not mutually exclusive.
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. GUI integration of 2D and 3D visualization is performed with 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.
Objexx specializes in reengineering technical applications to provide the benefits of modern languages and designs while preserving the value of existing 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 programmatically, avoiding the maintenance burden of many hard-coded parameters and making the addition and modification of the input specifications extremely efficient.
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.
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.
- Conversion to C++ or Python using a process designed to produce highly maintainable code that preserves the original code structure.
High-quality documentation can be provided in a variety of source and target formats including LaTeX, AsciiDoc, reStructuredText, DocBook, PDF, HTML, and Word.
Contact Objexx for further information on our scientific and engineering software development services.