Simulation Engine ExampleΒΆ

Simulate three SiDBs and inspect a minimum-energy charge distribution. groundstates() returns all distinct charge distributions with the minimum energy; several distributions can share that energy. Energies use electronvolts.

#include <fiction/technology/sidb/layout.hpp>
#include <fiction/technology/sidb/simulation/engines/quickexact.hpp>
#include <cassert>
#include <iostream>

int main()
{
    namespace sidb = fiction::sidb;
    sidb::layout layout{};
    for (int x = 0; x < 3; ++x)
    {
        layout.assign_sidb({x, 0, 0});
    }
    sidb::simulation::engines::quickexact_params params{};
    params.sim_params.base = 2;
    params.sim_params.mu_minus = -0.25;
    const auto result = sidb::simulation::engines::quickexact(layout, params);
    const auto states = result.groundstates();
    assert(!states.empty());
    std::cout << states.front().energy() << ' '
              << static_cast<int>(states.front().get_charge_state({0, 0, 0})) << '\n';
}
from mnt.pyfiction.sidb import lattice_site, sidb_dot_tag, sidb_layout
from mnt.pyfiction.sidb.simulation.engines import quickexact

layout = sidb_layout()
for x in range(3):
    layout.assign_sidb(lattice_site(x, 0, 0), sidb_dot_tag.NORMAL)
result = quickexact(layout, base=2, mu_minus=-0.25)
states = result.groundstates()
assert states
print(states[0].energy(), states[0].get_charge_state(lattice_site(0, 0, 0)))