SIMPLE Simulation Tools

Do you want to develop with SIMPLE?

As a person who has attempted to develop simulation tools a couple of times, I have noticed that many of us are not expert computer scientists. On the contrary, our main expertise often relates to physics and other natural sciences. Trying to help this particular audience, I have tried to designed the internals of SIMPLE so that we can focus more on our fields than on fighting with compilers... although I presume you know some programming.

Check these design considerations below!

SIMPLE is written in Rust

Rust is a programming language that attempts to "empower everyone to build reliable and efficient software". It does this by being fast, preventing memory safety issues (e.g., segmentation faults, reading data that has been erased already, etc.). It also has a great documentation, and a package manager that has—in my experience—is reliable, modern, and easy to use.

SIMPLE allows holistic simulation while having a modular architecture

Not only Building Performance Simulation experts are not computer scientists, but they are also not experts on all domains of building physics.

SIMPLE maintains different domains self-contained, and allows communication through a light and efficient Simulation State object.

/*
Imagine we are calculating infiltrations in a space and we need the temperature, which is produced by a different module. Get it as follows:
*/

let temperature = the_space.dry_bulb_temperature(simulation_state);

Clean code

Creating a new entity in the software (e.g., a new Material) can sound easy. However, adding the features for reading and writing from text files, being consistent with its API and other tasks can be boring and hard.

SIMPLE allows automatic derivation of getter and setter functions, as well as the Input/Output functions.

/*
Let's create a new Material object
... We declare it and document it as follows
*/

/// The representation of a physical layer of a certain Substance.
///
/// That is to say, a layer of a certain thickness
/// made of a certain Substance

#[derive(SimpleInputOutput, SimpleObjectBehaviour)]
pub struct Material {
    /// The name of the material object
    pub name: String,

    /// A reference to the Substance of which this
    /// Material is made of

    pub substance: Rc<Substance>,

    /// The thickness of the Material
    pub thickness: Float,
}

SIMPLE will automatically produce a function that allows reading this object from text files. Also, check the automatically produced documentation.

/*
Writing this in the input file will lead to a Material.
*/
Material {
    name : "A material"
    substance : "The substance"// The name of the Substance
    thickness : 0.2 // meters
}