scuff-solver: A high-level interface to scuff-em
Since its inception, scuff-em has offered two distinct portals for accessing the underlying computational functionality of the core library:
The suite of command-line tools such as scuff-ldos and scuff-neq provide pre-implemented modules targeting specific physical problems such as scattering or heat transfer. These tools are designed to be used off-the-shelf by users interested in (say) Casimir forces but no urge to delve into the integral-equation formalism underlying the computation, and they have the advantage of offering access to scuff-em algorithms with no need to understand anything about what's going on under the hood. The difficulty is that, although tools such as scuff-scatter aspire to offer a rich smorgasbord of command-line options to encompass as wide range of possible use cases, the command-line interface unavoidably suffers somewhat in the departments of customizability and interactivity.
Meanwhile, the low-level API offers ultimate customizability to users willing to write C++ or python codes, but this requires some knowledge of integral-equation methods in general and scuff-em in particular; moreover,
As a third portal aspiring to capture the best of both worlds, scuff-em version 0.99 introduces a preliminary version of a high-level interface. This is a glue layer, designed to sit between the low-level C++ solver and a high-level scripting language such as python, that facilitates interactive sessions for exploring scuff-em functionality, as well as complex sequences of calculations driven by scripts.
This page offers an initial peek at the scuff-em high-level interface and a flavor for the computational methodology it seeks to enable. Readers should be aware that the scuff-em high-level interface is a work in progress, and we welcome suggestions for how it could be made more convenient, which may be contributed via the GitHub issues page.
Note: Fans of the finite-difference solver meep may note some parallels to the high-level python interface recently added to that tool, which was one of the inspirations for the scuff-em high-level interface.
Objectives of the high-level interface
Streamline the process of solving scattering problems
Access application-specific modules
To avoid blowing the core library up to an unwieldy size, certain application-specific algorithms---in particular, the electrostatics and RF modules--- are implemented as separate modules lying above libscuff. The high-level interface makes all of this functionality available on the same footing as core-library functionality.
Here's an example of a python script that uses the high-level interface to drive a calculation involving microstrip devices.