View expertise summary ↓

Programming

Programming is an integral part of both my scientific work and technical projects. I use it as an engineering tool to translate mathematical models, numerical methods and physical concepts into reliable computational solutions, ranging from scientific simulation software to embedded control systems.

In scientific computing, my focus is on developing numerical algorithms, computational models, solvers and high-performance scientific software. Programming provides the connection between physical understanding, mathematical formulation and numerical experimentation, giving me direct control over the methods used to investigate complex engineering and scientific problems.

In my technical projects, programming extends into embedded systems, firmware, automation and machine control. It provides the intelligence behind the physical systems I build, connecting microcontrollers, sensors, motors, actuators and electronics with mechanical devices such as 3D printers and CNC machines.

Across both domains, I follow the same fundamental approach: understand the problem → formulate the solution → implement it → verify its behaviour → refine the system . Programming therefore provides a common foundation connecting scientific research, numerical computation, embedded electronics, automation and mechatronics.

Programming as a Creative Engineering Tool

What I enjoy most about programming is its ability to transform an idea into a working system. A mathematical concept can become a numerical simulation, while an engineering concept can become firmware that controls motors, sensors, actuators and complete machines. Programming provides the logical connection between an idea and its computational or physical realization.

My programming activities therefore span different scales, from scientific algorithms and numerical solvers to embedded systems, microcontrollers and machine control. Despite their different applications, they share the same underlying challenge: developing clear, reliable and efficient logic that accurately represents the intended behaviour.

I particularly enjoy the iterative process of design → implement → test → debug → optimize → improve. Whether I am developing a computational model or programming a physical device, this process provides a continuous opportunity for experimentation, problem-solving and learning.

Projects

01 · Computational Geometry and Grid Generation

Image-Guided Grid Generation

I developed a structured-grid generation tool that combines classical elliptic grid-generation equations with image analysis. The central idea is to allow the computational grid to interpret spatial information contained in an image and automatically concentrate resolution around regions containing important geometrical or visual features.

The software reads an input image and analyses spatial variations in colour intensity. Regions with strong colour gradients are interpreted as regions containing important features, interfaces or boundaries. This information is transformed into control terms for the elliptic grid-generation equations, causing grid lines to cluster automatically around these regions.

Can a Computational Grid “See” an Image?

The project explores an unconventional connection between image processing and numerical grid generation. Instead of prescribing every refinement region manually, information contained in the image determines where additional computational resolution is required.

In this sense, the grid effectively responds to the visual structure of the problem: stronger image gradients generate stronger grid-control signals, while relatively uniform regions require less spatial resolution.

  • Structured grid generation
  • Elliptic grid-generation equations
  • Image-based computational geometry
  • Automatic image analysis
  • Colour-gradient detection
  • Feature-sensitive grid concentration
  • Grid-control source terms
  • Adaptive grid stretching
  • Automatic clustering of grid lines
  • Spatially varying computational resolution
  • Boundary and interface detection
  • Grid smoothness control
  • Structured computational topology
  • Numerical solution of elliptic equations
  • Scientific software development
  • Visualization of computational grids

Image-to-Grid Transformation

The workflow starts from an ordinary digital image. The software evaluates spatial changes in colour and converts the resulting gradient information into a quantitative field describing where increased grid resolution is desirable.

This field is then introduced into the elliptic grid-generation formulation through spatially varying control or source terms. The grid evolves smoothly while being attracted towards regions containing stronger image gradients.

Input image → Colour-gradient analysis → Feature detection → Grid-control source terms → Elliptic equations → Grid-line redistribution → Feature-adapted structured grid

Elliptic Grid Generation

Elliptic grid-generation methods provide a natural framework for producing smooth structured meshes. The grid coordinates are obtained by solving elliptic equations subject to appropriate boundary conditions and internal control functions.

In this project, the control functions are influenced by information extracted automatically from the image. The result is a structured grid whose spatial distribution reflects both the mathematical smoothness of the elliptic formulation and the geometrical information detected in the underlying image.

Automatic Resolution Control

The method provides an alternative to manually specifying every refinement location. Regions containing sharp transitions receive greater grid concentration, while comparatively homogeneous regions remain represented with coarser spacing.

This makes the image itself part of the grid-generation process and creates a direct connection between visual information, numerical geometry and computational resolution.

images/grid_input_image.png

Example input image containing spatial features identified through colour-gradient analysis.

images/image_guided_grid.png

Structured elliptic grid with increased spatial resolution around regions identified from the image gradients.

Programming and Development Workflow

My programming projects typically begin with a scientific, computational or engineering problem that needs to be translated into a reliable software solution. Depending on the application, this may involve numerical modelling, algorithm development, scientific computing, embedded control, firmware or automation.

I approach programming as an iterative engineering process. The underlying problem is first understood and formulated clearly, followed by implementation, verification and systematic testing. Numerical accuracy, computational efficiency, software structure and robustness are important in scientific applications, while timing, hardware interaction and reliability become particularly important in embedded and machine-control applications.

  • Define the scientific, numerical or engineering problem.
  • Identify the required mathematical model, algorithm or control logic.
  • Design the software structure and select appropriate data structures.
  • Implement the computational algorithms or embedded control logic.
  • Develop interfaces between software, hardware and external data where required.
  • Implement numerical solvers, machine logic or firmware functionality.
  • Test individual components before integrating the complete system.
  • Verify numerical results or physical device behaviour.
  • Debug software systematically and identify numerical or logical errors.
  • Analyse computational performance, memory usage and execution efficiency.
  • Optimize algorithms where performance is important.
  • Integrate software with sensors, motors, controllers and machines in embedded applications.
  • Validate the complete system under realistic operating conditions.
  • Refactor and improve the implementation as the project evolves.
Problem definition → Mathematical or logical formulation → Software design → Implementation → Testing and verification → Debugging and optimization → Integration → Working system

Programming Skills

My programming experience spans scientific computing, numerical software development, embedded systems and machine control. Programming provides a common engineering tool that allows me to move from mathematical and physical concepts to computational models, and from control ideas to functioning electronic and mechatronic systems.

Problem definition → Mathematical or logical formulation → Algorithm design → Implementation → Testing and debugging → Optimization → Integration → Working computational system
Scientific Computing Numerical Programming Scientific Software Development Algorithm Development Computational Modelling Numerical Methods Linear Algebra Sparse Matrices Iterative Solvers Multigrid Algebraic Multigrid High-Performance Computing Parallel Programming MPI Performance Optimization Data Structures Computational Geometry File and Data Processing Visualization and Post-Processing Embedded Programming Microcontrollers Arduino Raspberry Pi Firmware Machine Control Motion Control Sensor Integration Motor Control Automation 3D Printer Control CNC Control Klipper Testing Debugging Verification Software Optimization

Programming gives me a direct way to transform scientific ideas, mathematical formulations and engineering concepts into functioning computational systems.

At one end, this involves developing numerical algorithms, scientific models, solvers and high-performance computational software. At the other, it involves firmware and embedded programming for sensors, motors, controllers, 3D printers, CNC machines and other devices that I design and build.

The common thread is a systematic understand → formulate → implement → test → debug → optimize → improve approach. This makes programming both an important professional capability and a technical hobby through which I continuously experiment, build and learn.