What Is Jyce?
Jyce is a Julia package that provides high-level bindings to Xyce the open-source circuit simulator from Sandia National Laboratories. Xyce is built for large-scale, high-performance circuit simulation and supports parallel (MPI) execution, making it a natural fit for HPC workflows.
The goal of Jyce is simple: make it easy to run Xyce simulations, post-process results, and integrate circuit simulation into Julia’s scientific computing ecosystem without having to manage shell scripts or raw file I/O, and perhaps the ability to develop tools in julia using circuit simulation for future EDA tooling.
Motivation
Xyce is a powerful tool, but working with it directly involves:
- Writing raw SPICE netlists
- Invoking Xyce as a subprocess and parsing output files
- No native integration with Julia’s plotting, data, or optimization ecosystems
Jyce wraps this into a clean Julia API:
using Jyce
# Define a simple RC circuit
netlist = xyce_netlist("""
R1 in out 1k
C1 out 0 1n
V1 in 0 SIN(0 1 1MEG)
.tran 1n 10u
.end
""")
result = simulate(netlist)
plot(result, :time, :out)
Architecture
Jyce is structured around three layers:
1. XyceSolver — Native Library Interface
The lowest layer is a C++ shared library (XyceSolver) that exposes Xyce’s simulation API. Jyce links to this via Julia’s ccall interface, avoiding subprocess overhead and enabling tight integration.
2. Julia Bindings Layer
The core Julia package manages:
- Netlist construction (string or programmatic)
- Simulation control (start, step, pause, query)
- Result extraction into Julia arrays/DataFrames
- Error handling and solver state management
3. High-Level API
Convenience functions for common simulation types (.tran, .ac, .dc sweep), result plotting via Plots.jl, and parameter sweep utilities.
Installation
Jyce requires building XyceSolver from source (Xyce has non-trivial dependencies). The install script handles the full chain:
# Clone and build
git clone https://github.com/MadebyDaris/Jyce
cd Jyce
bash install.sh
The install.sh script:
- Builds Xyce’s trilinos dependencies
- Compiles XyceSolver as a shared library
- Sets up the Julia package to find the local library
Status & Roadmap
Jyce is functional for basic transient and AC simulations. Current focus areas:
- Stability — Improving the install script for reproducibility across systems
- API completeness — Full
.tran,.ac,.dc,.hbsimulation support - Documentation — Comprehensive examples and tutorials
- Performance benchmarks — Comparing Julia-driven workflows vs. direct Xyce CLI