nanonets

A kinetic Monte Carlo simulation tool for modeling charge tunneling dynamics in nanoparticle networks

https://github.com/jonasmnsing/nanonets

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.6%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

A kinetic Monte Carlo simulation tool for modeling charge tunneling dynamics in nanoparticle networks

Basic Info
  • Host: GitHub
  • Owner: JonasMnsing
  • License: apache-2.0
  • Language: Jupyter Notebook
  • Default Branch: main
  • Homepage:
  • Size: 544 MB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created over 2 years ago · Last pushed 10 months ago
Metadata Files
Readme License

README.md

NanoNets

NanoNets is a Python package for simulating single-electron transport in complex nanoparticle networks.
It provides tools for generating and analyzing nanoparticle device topologies, computing network electrostatics, and running efficient kinetic Monte Carlo (KMC) simulations of single-electron tunneling.
Designed for both fundamental research and device engineering.

Features

  • Flexible Topology: Create regular lattice or random planar nanoparticle networks with customizable geometry and connectivity.
  • Physical Electrostatics: Automatically computes full capacitance matrices and induced charges using physical NP parameters.
  • Kinetic Monte Carlo: High-performance, Numba-optimized KMC engine for simulating electron tunneling, network currents, and time-resolved device response.
  • Constant and Floating Electrodes: Simulate both voltage-biased and floating (open circuit) contacts.
  • Heterogeneous Devices: Supports multiple nanoparticle types, resistive disorder, and tunable electrode configurations.
  • Extensible & Modular: Clear class structure enables easy modification and integration with other scientific Python tools.
  • Batch and Time-Dependent Simulation: Supports stationary (fixed voltage) and dynamic (time-varying voltage) simulation modes.
  • Rich Output: Exports observables, charge/potential landscapes, network currents, and more, directly to CSV for analysis.

Class Overview

Click to expand full class documentation ### `NanoparticleTopology` - Generate, modify, and analyze nanoparticle networks with electrodes. - Built on `networkx` for flexible topology and visualization. ### `NanoparticleElectrostatic` - Adds electrostatics: computes NP radii, capacitance, and charge induction. - Efficiently packs nanoparticles and enforces physical constraints. ### `NanoparticleTunneling` - Adds single-electron tunneling and resistance network. - Precomputes tunneling events and manages tunnel junction resistances. ### `Simulation` - High-level device simulation class: sets up topology, electrostatics, electrodes, and resistances. - Runs KMC for stationary (DC) or dynamic (pulsed/AC) driving. ### `MonteCarlo` (jitclass) - Fast KMC simulation core. Computes currents, potentials, and observables using Numba for speed. - Supports both steady-state and time-resolved simulation.

Quickstart Example

```from nanonets import Simulation import numpy as np

Define your network topology and parameters

topologyparameter = { 'Nx': 5, 'Ny': 5, # 5x5 lattice 'epos': [[0,0], [4,4]], # Electrodes at two corners 'electrode_type': ['constant', 'constant'] # Both are not floating }

Initialize simulation

sim = Simulation(topology_parameter)

Run a stationary simulation (fixed voltages)

Nvolt = 100 # Number of voltages voltages = np.zeros((Nvolt,3)) # 3 Columns (Two E + Gate) voltages[:,0] = np.linspace(-0.1, 0.1, Nvolt) # Voltage Sweep at E1 sim.runconstvoltages(voltages, targetelectrode=1)

Access results

currents = sim.getobservablestorage() potentials = sim.getpotentialstorage() ```

Citing

If you use NanoNets for published work, please cite:

@article{mensing2024kinetic,
  title={A kinetic Monte Carlo approach for Boolean logic functionality in gold nanoparticle networks},
  author={Mensing, Jonas and van der Wiel, Wilfred G and Heuer, Andreas},
  journal={Frontiers in Nanotechnology},
  volume={6},
  pages={1364985},
  year={2024},
  publisher={Frontiers Media SA}}

Owner

  • Login: JonasMnsing
  • Kind: user

GitHub Events

Total
  • Delete event: 2
  • Push event: 213
  • Create event: 2
Last Year
  • Delete event: 2
  • Push event: 213
  • Create event: 2