# Developer Onboarding Guide

This document provides a short introduction for developers who want to understand
or extend the *fmsolvr* framework.

## 1. Getting the Code

Clone the repository and create a build directory:

```bash
git clone <repository-url>
cd fmsolvr
mkdir build
cd build
```

## 2. Building the Project

The project uses CMake.

Typical build procedure:

```bash
cmake ..
make
```

## 3. Running Tests

Unit tests can be executed using:

```bash
ctest
```

Tests are located in the `unittests` directory.

## 4. Running Benchmarks

Performance experiments and microbenchmarks are located in the `microbench` directory.
These programs measure performance of numerical kernels and hardware characteristics.

## 5. Understanding the Code Base

New developers should start with the following components:

1. container – data structures
2. math – numerical utilities
3. operator – core algorithmic transformations
4. tree – spatial hierarchy

The operator module contains most of the algorithmic complexity.

## 6. Adding New Components

When adding new functionality:

- follow the coding guidelines
- place new code in the appropriate module
- avoid unnecessary dependencies
- add tests for new algorithmic components
- update the CMake configuration if necessary

## 7. Performance Considerations

The solver targets high‑performance numerical computing. When modifying performance‑critical code:

- verify numerical correctness
- measure performance with benchmarks
- document architecture‑specific optimizations

Avoid premature optimization outside critical kernels.
