Todo

Add content from Rob’s write-up

# Philosophy¶

## The purpose is what defines us¶

```
"The purpose of computer simulations is to reduce the total cost of doing the job, not to increase it"
-- Richard O''Leary, University of Strathclyde, c.a. 2011
```

## Why HandyBeam?¶

As of 2018, we really do not know what reality REALLY is - as far as we know, we might never know. But, we can make models. The usefulness of the models is that they can help to explain the past and predict the future.

Models range from simple, empirical closed-form equations like Newton’s `Force = Mass * acceleration`

,
through to finite-element models (FEM) that require equation-solving with millions of unknowns.

Accuracy, and therefore the usefulness of many of the models, are often compute bound. A more accurate solution can be produced at the cost of performing a greater number of computations. However, these computations bear a cost in terms of hardware, energy and, most importantly, time. Hence, there still exists a market for building simplified models of reality; ones that capture just enough of the complexity of real phenomena, but at the same time, are computably affordable.

## The HandyBeam core¶

HandyBEAM R1 is a software package that, in it’s core, implements the continuous-wave (monochromatic, single-frequency) form of the Huygens principle of wave propagation in homogeneous media.

This ultra-simplified propagation model enables obtaining quick estimates of pressure field shape, beam width, side lobe amplitude, and more – suitable for use in beam forming research, NDT/NDE, acoustics research and education.

The algorithm is decomposed in such a way that each thread of the GPU or OpenMP calculates the pressure value for a single point in space (single pixel) only. This allows all the computations to progress in parallel, as the pressure for any given pixel is completely and solely defined by the properties of the radiators and the media. Hence, there is no need for communication between the threads. This approach also happens to match well with the hardware structure of the GPU, providing excellent performance.

This approach is admittedly less accurate than other published methods, but the advantage is in its low computation cost.

The low computation cost translates to shorter design cycle when in design-mode, and wider area explorable when in exploration/education mode.

## Basic terminology¶

- world = root object for describing the model’s properties, settings, calculation methods, and visualizers.
- solver = Excitation coefficient solver. A module that prepares the firing solution for the transducers.
- sampler = acoustic field sampler. An object that describes how and where is the acoustic field sampled
- propagator = acoustic field propagation engine. A module that calculates what the acoustic field looks like
- visualiser = a series of short-cuts to produce figures ready for reporting and publication
- metrics, evaluator = series of procedures to ‘measure’ the acoustic field, and generally, reduce the volume of dat and densify the information.

## Other modules¶

The HandyBeam family contains helper code organised as described in API principles, briefly along the following axes of use:

- Design and optimisation
- specialized propagators
- metrics
- optimiser harness

- Exploration and education
- specialized array generators and examples of use
- visualisers

## About this documentation¶

It is believed that the learning process operates on three levels: Theory, practice, and continued development. Hence, there is principally three parts for this documentation.

First part of this documentation will be concerned primarily with the theory - maths, physics, software engineering details. Here, various examples can be given.

Second part of this documentation will be primarily concerned with giving examples on how to solve specific problems using HandyBeam.

Third part of this documentation is a reference or index of keywords, methods, modules e.t.c.

Best of luck, have fun, and use Your day wisely :-)

## History¶

HandyBeam is partially based on technology developed in The University of Strathclyde - see the source code published on GitHub . The development of cueBeam stopped in approximately 2012, with only minor corrections afterwards.

The development of HandyBeam started in 2018, with first public release in 2019.

The entire software has been rewrited from scratch as a OpenCL kernel, loaded via `pyopencl`

package into the python interpreter.

Back to Index

**Licence** (documentation): Creative Commons CC BY-NC-SA 4.0

**Licence** (source code): Apache 2.0

This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement No 737087.