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.