# R9484/hw3-heat-fft925a5a2e9403master

# hw3-heat-fft

# README.md

## Homework 3 - Heat Equation with FFT

- Important notes:

- The option USE_FFTW in CMake must be ON in order to use the FFT part of the code!

- Remember to add the googletest directory!

- We have made a python script called
`fft_generate_test_values.py`that will generate test-values for`computeFrequency`.

#### Comment about the particle code organization:

We now have a different type of "particle" in addition to Planet and PingPongBall. We call this type of particle a **MaterialPoint** (it derives from the Particle.hh class, just like Planet and PingPongBall)

The MaterialPoint has two properties; **temperature** and **heat rate**, which are both obtainable through their respective get-functions.

The **MaterialPointsFactory** derives from the general ParticlesFactoryInterface whcih hold the list/vector of particles (in this case MaterialPoints) and the simulation interface. The createSimulation function in MaterialPointsFactory calls **ComputeTemperature** which solves the heat equation on a square (NB!) grid of particles.

The **Matrix** class (or struct to be precise) is a general C++ class for storing square matrices.

The **FFT** class (or struct to be precise) contains our implemented wrapping interfaces to Forward DFT, Inverse DFT and for computing FFT frequencies.

#### Comment on boundary conditions on temperature:

The FFT assumes periodic boundary conditions. If you want Dirichlet boundary conditions (say, zero temperature on the boundaries), you can extend the domain (matrix) from L to 2L and add zeros on the new elements. That is, the domain of interest is now surrounded by zero temperature.