To main content

Julia programming language

We develop numerical methods, simulators and optimisation tools in Julia. The language combines flexibility for model development with the potential for high computational performance, providing a common foundation for developing, testing and extending methods to demanding applications.

Contact persons

From mathematical models to efficient software

Developing simulation tools requires both the freedom to experiment and efficient execution of large computations. Julia is a programming language designed for applications including scientific computing. It supports interactive work with models while compiling computational code to efficient machine code.

This makes it possible to develop a method and improve its performance within the same language, without necessarily rewriting the computational core in C++ or Fortran. We use Julia in projects where flexible model development, numerical performance and continued software development are important.

How we can help

  • Develop models and simulators: Translate mathematical models into numerical algorithms and software for scientific and industrial applications.
  • Extend existing tools: Add physical models, discretisations and solution methods to Julia-based frameworks.
  • Improve computational performance: Analyse bottlenecks and adapt algorithms, data structures and memory use, incorporating parallel computing and GPUs where appropriate.
  • Build differentiable computational models: Integrate automatic differentiation and sensitivity calculations to support model calibration and optimisation.
  • Assess technology choices and integration: Investigate where Julia fits into an existing computational workflow and how new components can interact with other software.

Flexible models with reusable components

Julia supports generic algorithms that can be adapted to different data types and models. Its multiple dispatch mechanism selects function implementations based on the types of several arguments, providing a foundation for combining and extending numerical components.

In simulator development, this can help separate the description of the physics from discretisation, solution algorithms and data handling. New models can reuse existing infrastructure while specialised implementations can be introduced where performance requires them.

We combine these capabilities with expertise in numerical methods, automatic differentiation and coupled physical models. The aim is software that supports efficient development as well as demanding computations.

Performance depends on more than the language

High performance depends on the design of the algorithms and software. Our work addresses type information that the compiler can exploit, efficient memory access, sparse matrices and the organisation of parallel computations.

We assess the complete computational workflow, including compilation on the first run, data transfers and interactions with external libraries. Different aspects may determine overall performance for an interactive model, a long simulation and a large ensemble.

Open-source Julia software developed at SINTEF

Several research groups at SINTEF develop and maintain open-source Julia packages. Examples include:

  • JutulDarcy.jl: A simulator for multiphase, multicomponent flow and heat transfer in porous media, built on the Jutul simulation framework.
  • EnergyModelsX: A framework for modelling and optimising energy systems with multiple nodes and energy carriers.
  • BattMo.jl: Differentiable battery simulation based on Jutul, including porous-electrode models of the P2D type.
  • Muscade.jl: A framework for optimisation problems constrained by finite element models.

Open-source code makes it possible to inspect methods, reproduce computations and build on existing components. These packages also provide concrete starting points for collaboration on new models and applications.

Work with us

Are you considering Julia for a computational task, or looking to extend a model or simulator? Contact our Applied Computational Science research group. We can discuss how our numerical expertise can contribute and involve other SINTEF research groups where appropriate.

Explore research areas