Repository navigation
Qucs-S enhanced v26.1.2
Qucs-S enhanced 26.1.2
The first tagged release of this repository: upstream Qucs-S 26.1.1 with the
crash classes of that release fixed and a set of workflow features added.
One bundle per platform is attached (macOS Apple Silicon and Intel, Linux
x86_64 and arm64, Windows x64 and arm64); SHA256SUMS.txt lists them. The
macOS bundles are ad-hoc signed, not notarised: right-click the app and
choose Open on first launch. No bundle includes ngspice: install it
separately and point Application Settings > Locations > Ngspice at it if it
is not on PATH (on Windows at ngspice_con.exe).
Stability
- The dataset and schematic loaders no longer crash on damaged, truncated
or hostile files; a fuzzer and a hostile-fixture suite guard them. - Undo/redo and document reload keep no dangling element pointers.
- Autosave every two minutes, recovery of modified documents after a
crash, and a crash report written on the way down. - A modal dialog no longer blocks the application while a simulation runs.
- A quiet log: starting, opening Application Settings and drawing the
toolbars printed a screenful of warnings - icons whose sub-pixel blurs
QtSvg could not draw, the unset AdmsXml and ASCO folders read as
paths, a connection to a slot that does not exist, a console font only
Linux has, and on a first start an empty font setting and a blacklist
file of no name. Each is fixed where it came from. - A schematic opens whichever simulator is selected (upstream #1468). With
ngspice selected, a schematic holding a Qucsator-only part used to be
refused - the GUI offered to put an empty subcircuit in the part's place,
which the next save wrote over the original - and undo after switching
simulators lost such parts the same way; of the 247 shipped examples
ngspice refused 30 and Qucsator 93. Now every one opens under every
simulator; parts the simulator cannot take are drawn grey and named by
Check Schematic. The component panel still offers only the selected
simulator's parts. - A random walk over the main window under the memory checkers - every
mouse mode, drags interrupted by undo or delete, the menu commands,
dialogs filled with odd values - found crashes behind a double-click on
a wire (tidied away between the two clicks), a delete in the middle of
a drag, a double-click in the symbol view (the edited component ended
up in the symbol of every open document), Save All with a subcircuit
whose pins overlap, Align and Distribute, a paste with nothing on the
clipboard, and a hang when a diagram's limits became nan. All fixed,
each with a test. - A subcircuit that includes itself, directly or through others, no
longer crashes the netlister. A property value of a megabyte (a PWL
list of many thousand points) no longer stalls the netlist for minutes
or makes an image export ask for tens of gigabytes: the canvas shows
its first 1,000 characters, and a raster export is fitted into 100
megapixels. - Large schematics load and edit in time proportional to their size:
loading, undo and every edit that tidies the wires grew with the square
of it, so at 16,000 components a load took 3 s and rotating one
resistor froze the window for 9 s. Now 0.5 s and 0.1 s. Deleting,
dragging and pasting large selections went the same way and are fixed
too. - A subcircuit pin numbered 2147483647 (typed into a Port's number) no
longer hangs opening the schematic that uses the subcircuit. - The same edit of the same schematic ends the same every time: tidying
the wires after an edit went through the connections in an order that
changed from run to run, so an edit of part of a schematic could leave
different wiring each time. It goes by place now. And a junction that
has to move goes to the closest of its connections (it could take a
farther one). - No crash on Save All after a paste that began in one tab and was
dropped into another, once the first was closed; nor on Close All (or
Close all left, right, but current) while a property was being edited
on the canvas.
Netlists
- Every built-in component was netlisted in every flavour and run through
ngspice (docs/bug_hunts/). Fixed: the 4-terminal transmission line
paired the wrong pins as a port; the symmetric transformer applied T1 and
T2 to the wrong windings; the 3 mutual inductors netlisted k12 for K13;
I(TRNOISE) used RTSAM for all three RTS times; the digital source and
the time-controlled switch played their pattern once instead of
repeating it; the VDMOS card carried a Temp that overrode the circuit
temperature and RQ=0 VQ=0 that broke its operating point; a relay with
the default Ron = 0 had no operating point; the Xyce JFET card contained
UseGlobTemp; the Xyce transient sensitivity had its .TRAN arguments in
the wrong order; XSPICE-based components were offered for Xyce. - Values follow Qucs notation: a bare "10M" is 10 mega (SPICE read it as
milli), "10 cm" is 0.1, "-1 MOhm" keeps its sign, "2*Rload" is braced so
the simulator evaluates it. - Properties the dialog showed but the SPICE netlist ignored either reach
it (the diode's ISR/NR and Cp, the JFET's N/XTI/BETATCE, the MOSFET's
NRD/NRS and Rg, a transmission line's Alpha as a lossy LTRA, the
potentiometer's contact resistance, error terms and tapers) or are
hidden under a SPICE simulator as Qucsator's (the DC block's settings,
the AC block's Noise, the delay of the controlled sources, ...). - What the simulator in use would drop from the netlist is a check
finding: a component not available for it, one without a SPICE model,
an implicit equation-defined device, a winding without its core. - The macOS bundle ships the SPICE subcircuits of the transformer, relay,
switch, coax line, winding and magnetic core (share/qucs-s/spicelibrary),
which earlier bundles left out, and finds its resources next to the app
wherever it is kept. - A .OPTIONS section keeps every line, however it is written: each line
of the editor becomes a .OPTION line of the netlist, and a line may be
an option with no value at all (noopiter, keepopinfo and the other
ngspice flags went without a word), several options at once
(gmin=1e-10 reltol=1e-4 became one option with a nonsense value), or
written out as a netlist line would be (.option method=gear). Before
that, the first option was dropped once the section had been edited.
The Xyce option package has a field of its own in the properties
dialog.
Simulation
- Check Schematic (Simulation > Check Schematic, F10): an electrical rule
check - duplicate names, open pins, loose wire ends, no ground, no
simulation block - listed on a Problems tab of the message dock; a click
on a row selects the element. Check Schematic and Subcircuits runs it
over the whole hierarchy. A simulation runs the check first and brings
the tab up on errors (the run goes ahead; the simulator has the last
word). - A ground symbol is no longer forced on every schematic: "A schematic
must have a ground symbol" under Simulation > Simulators Settings
(Before a simulation; on by default, as before). Off, ngspice, SPICE
OPUS and Xyce simulate a schematic without one - node 0 then comes from
a net labelled 0 or a component that brings it - and Check Schematic
warns instead of reporting an error. - Simulation > Generate Netlist writes the netlist of the schematic in
front into its Scratch folder and opens it, without simulating. - A Hierarchy and Netlist toolbar next to the simulation toolbar: descend
into the selected subcircuit, ascend, check this schematic only (the
yellow check) or with its subcircuits (the green one), generate and
save the netlist. - Embedded simulation console: the simulator's output, status and progress
in a dock (View > Simulation Console); Stop, Save netlist, Clear. Under
Simulation > Simulators Settings > Simulation console you can choose the
dock, a separate window, or the legacy modal window instead. - A Scratch folder per project, with a subfolder per simulated schematic,
holds the netlist, the raw output and the log of its simulation; a new
run of the same schematic updates its folder. Listed under a Scratch
category of the Content panel; Show Last Netlist / Show Last Messages
open the files of the schematic in front. - Verilog-A "Build All" from the Content panel's Verilog-A row, for
every .va of the project, and "Compile" on a .va file's row (or
"Compile N Files" on a selection of them). Open files with unsaved
changes are saved first or compiled as saved; OpenVAF's output comes
to the front of the docks at the bottom of the window, without a
warning in the log for each of its lines. - ngspice loads only the compiled Verilog-A models (.osdi) a circuit
uses: the types of the netlist's .model cards - the schematic's, its
subcircuits', and those of the libraries and include files it brings
in - against the modules each library of the project defines, one
library for each module (two builds of one module no longer clash).
The DC bias loads them too; its netlist loaded none, so a circuit with
a Verilog-A device could not show its bias. - Verilog-A is compiled when a simulation needs it: before an ngspice
simulation or the DC bias, a .va of the project that defines a module
the circuit uses is compiled with OpenVAF when its NAME.osdi is missing
or older than the source or a file it includes - edit, press F2. The
output goes to the simulation console; a source that does not compile
stops the run with OpenVAF's error. Check Schematic warns about a
Verilog-A component whose module is in no library or source of the
project. - Libraries carry their Verilog-A: with "Embed Verilog-A files in
exported libraries" (Application Settings > Settings, on by default)
Create Library puts the .va sources the subcircuits' models need, and
the files they include, into the library's folder - not the compiled
models, which run on one platform only - and a circuit using the
library, in any project or none, has them compiled with OpenVAF before
its first simulation and again when out of date. - Verilog-A components made from a module (draw its symbol, Load
Verilog-A module) keep their parameters' descriptions as written, with
their units in brackets; a quote in a description or a symbol text no
longer leaves the component without parameters, string parameters have
their defaults, and a symbol in a project subfolder is found. The
parameters come from the compiled library (OSDI 0.3/0.4) while it is
as new as the source. - Six number notations for a diagram's axes, markers and cursor
readout: automatic (the former "scientific"), decimal (no exponent or
prefix: 250000), scientific (2.5e5), scientific with a power of ten
(2.5x10^5), engineering with SI prefixes (250k, as before) and with an
exponent that is a multiple of three (250e3); the places after the
point auto (decimal labels line up with the grid step) or fixed. A
diagram without graphs showed a new diagram's axes (0 to 1) after the
schematic was opened; it shows its own now. - Diagram legends: a colour/style sample and the variable of every graph,
in a chosen corner of any diagram type. - The operating point of every device (upstream #789): after Calculate
DC bias with ngspice, a transistor's, diode's or Verilog-A (OSDI)
device's tooltip shows what it is doing - ic, vbe, gm, cpi; id, vgs,
vth, vdsat, gds, the capacitances; a diode's cd - with units.
View > Operating Point lists every parameter of every device in the
message dock, with a filter ("gm"), Copy for a spreadsheet, and a
click that selects the component. - Dashed, dotted and long-dashed graphs look it (upstream #1723): the
pattern runs on along the curve instead of starting again at every
point, which made most simulated curves solid. Graphs of two samples,
the first curve of a sweep with two samples a step, and the last
segment of a curve coming back into a diagram with a fixed range are
drawn again. - DC bias labels find their own place (upstream #1692): each value goes
beside its node where it covers the least - the corner it always had,
then the other corners and sides, then a step out with a leader line -
and never on another value while any other place is left. Over the
shipped schematics, labels on labels went from 436 to 2, labels on a
symbol or its text from 4135 to 2200, labels crossed by a wire from
3950 to 478. Values, units and colours are as before. - Optimization with ngspice (upstream #1327): the Optimization component
is no longer qucsator-only. Qucs-S runs differential evolution itself,
every candidate an ngspice run, several at a time: variables from an
equation, a .PARAM or a component value, on a linear or log scale, as
integers or from an E3..E192 series; goals to minimize, maximize, stay
below, above or at a value (a sweep by its worst point). The console
shows the search; the best values become the variables' initial values
and are simulated once more for the diagrams. Example: NGspice featuresLC_lowpass_optimization.
- NgOpt (simulations > ngspice optimize): a form for the optimize command
of ngspice builds that have it (Ngspice_OpenVAF_Enhancements) - .param,
instance and model knobs, an expression to minimize or targets to fit
over up to eight analyses, differential evolution, particle swarm,
simulated annealing, Nelder-Mead or Levenberg-Marquardt - with the
command it writes shown live. ngspice optimizes first, in one process;
the schematic's simulations then run at the optimum, ngspice's verdict
goes to the status log and the values found into the knobs. Example:
NGspice features > LC_lowpass_ngopt (a Butterworth fit, 39 evaluations). - NgMonteCarlo and NgCorners (simulations > ngspice Monte Carlo, ngspice
corners): forms for the montecarlo and corners commands of the same
ngspice builds. A Monte Carlo runs an analysis N times over the
circuit's agauss/aunif parameters - and, if asked, the statistics its
Verilog-A models declare - plain or Latin hypercube, recording values
and waveforms for every sample and judging specs for a yield. Corners
runs it at every process corner the models declare, or a Monte Carlo
at each. The results reach the dataset under the component's name
(ngmontecarlo1.gain, a curve per sample; ngcorners1.rr per corner), the
yield or the corners go to the status log, and Check Schematic names
what cannot be written. Example: NGspice features >
RC_lowpass_montecarlo. - Histogram diagram (diagrams group of the component panel): every value
a variable has - each sample of a Monte Carlo, each point of a sweep -
counted into bins that all its graphs share; the number of bins
automatic (Freedman-Diaconis) or set, the height a count, a percentage
or a probability density. A normal curve of the same mean and
deviation, a box with the number, mean and deviation of every graph,
and lower and upper limits drawn as lines with the share of values
between them can go with it; zoom, cursor readout and the Cartesian
diagram's axes, notation and legend work as there. - NgSweep (simulations > ngspice sweep): a form for the sweep command of
the same ngspice builds - a component value, an instance or model
parameter, a .param or the temperature over a linear, logarithmic or
listed range, up to three outer parameters for a family, the analysis
run at every point and values to record - with the command it writes
shown live. Every run's voltages and currents come back as a family
(ngsweep1.v(out), a curve per value), the recorded values as curves
over the parameter. Example: NGspice features > RC_lowpass_ngsweep. - A simulation block that is switched off still lends its analysis to
NgOpt, NgMonteCarlo, NgCorners and NgSweep, which then run it only
there. - Auto colours and point markers: a graph's colour can be "auto" - each
curve of a sweep family in a colour of its own, eight hues chosen to
stay apart for colour-blind readers - and a graph can carry point
markers, one of seven shapes or "auto", a shape per curve; every curve
keeps the graph's solid or dashed line. The legend comes on with them
and names each curve by its value (r1=2.2k).
Subcircuits and symbols
- A subcircuit's pin, the net behind it and the symbol carry one name.
The netlist names a pin of a .SUBCKT after the net the port sits on, so
the symbol now writes that net's label beside the pin instead of the
port's refdes; a port on a net with no label of its own lends the net
its name, so the pin reaches the netlist as "in" or "P2" and no longer
as "_net7". A name another net already answers to is never borrowed -
that would join two nets that are not connected - and Check Schematic
says so when it happens. - Making a symbol: the instances of a subcircuit write the name of every
pin inside the symbol - the name the netlist gives that pin. File >
Symbol holds the rest: Recreate Circuit Symbol throws the drawing away
and lays the ports out around a fresh box, as wide as the names it
carries; Pin Order says which pin is the first argument of the .SUBCKT
and the first pin of every instance; Save Symbol As writes the symbol
into a .sym of its own and Load Symbol takes one back, keeping this
schematic's ports. A polyline painting - open, or closed and filled -
joins the line, arc, ellipse and rectangle, and like every other
drawing it reaches the instances of the subcircuit and turns with
them. (An earlier build of this release, published on 22 September
before 19:00 UTC, could not open a document containing a polyline on
Linux and Windows; this build reads it on every platform.) Under Application Settings > Settings, "Pin names in subcircuit
symbols" (on) and "Pin directions in subcircuit symbols" (off): with
the second, a mark on each pin says which way it points and a symbol
drawn anew puts the inputs on the left and the outputs on the right. - Edit Subcircuit Properties (upstream #1285): the prefix and one table
of parameters - Show, Name, Default, Type, Description - edited in the
cells like the component dialog, instead of a read-only list with edit
fields under it; Add, Remove, Move Up/Down; the type picked from real,
integer and string or typed. OK and Apply check the table (a name
missing, twice or "File", a character the file cannot hold) and show
the problem at its cell; Apply writes into the symbol and keeps the
dialog open. The file format is unchanged. - A schematic exported to PNG from the command line (-p) was painted
over uninitialised memory, so its background was whatever had been in
it. - Export in PNG, JPEG, BMP, TIFF, WebP, SVG, PDF, EPS and PDF + LaTeX,
all written by Qucs-S (File > Export as image, or Export... in the
right-click menu of the schematic's empty area; Export Diagram... in a
diagram's for the diagram alone). PDF, EPS and PDF + LaTeX needed Inkscape and the
options of its 0.92, which 1.x rejects; an SVG had the drawing at 0.92
of its canvas in a corner, its text in macOS's system font that no
other program has. Now a vector file has the size of the drawing (a
PDF page cropped to it, fonts embedded; EPS from a PostScript writer
of its own), text as outlines is a choice for SVG and PDF, and PDF +
LaTeX writes NAME.pdf and NAME.pdf_tex for LaTeX to set the text.
Images at any scale or dpi, JPEG and WebP quality; colour, grayscale
or black and white; white paper or transparent; the whole document or
the selection; the choices kept. Copy to Clipboard in the dialog and
Edit > Copy as Image put the drawing on the clipboard as an image, an
SVG and a PDF. qucs-s -p takes every format by the extension, with
--dpi and --color BW; a PDF is printed on a page only with --page or
--orin. A clip set while one element is drawn no longer stays on for
everything after it, which lost the labels painted after a clipped
drawing. - An image can be put on a schematic or on a subcircuit's symbol in any
format Qt reads - SVG and SVGZ as well as PNG, JPEG, BMP, GIF, TIFF and
WebP - from the paintings group of the component panel, the clipboard,
or a file dropped on the schematic. The bytes of the file travel inside
the document, so the picture keeps working when the file is gone, an
SVG stays a vector and is redrawn sharp at every zoom, and a photograph
keeps its JPEG compression instead of being re-encoded as a much larger
PNG. An image on a symbol reaches the instances of that subcircuit and
turns and mirrors with them; up to 26.1.2 it was dropped when the
symbol was read. Turning an image that had been read back from a
document used to empty it and leave a file that would not open at all.
Editing and navigation
- Find in a schematic (Edit > Find, Ctrl+F; it was disabled there): a
find bar under the pane takes a component's name, a net label or a
value, selects and centres the first match, and steps through the rest
with Enter and Shift+Enter; a net label found lights its net. - Find and Replace (Edit > Replace, F7) for component property values,
in this schematic, every open one or every schematic of the project:
narrowed by component type, a name wildcard and a property, with match
case, whole value or a regular expression, and a preview of every hit
with its new value to untick from. An open schematic takes the change
as one undo step; a closed project schematic is opened, changed and
left for you to save. It replaces the old Replace dialog, whose "set
this property of these components" it still does. - A value says what it means as you type it: under the property table
of a component's dialog, a line reads the value being edited ("10 kOhm
= 10000 -> netlist: 10K"). Where SPICE and Qucs would read two
different numbers it says so and the value turns amber: "10 Mohm"
(Qucs 10 mega; SPICE gets 10MOHM, 10 milli), "10 meg", "1 KOhm", and
the European "4k7" / "2R2", whose digits after the prefix are not
read. The property's description is the tooltip of its name and value. - Net highlighting: a selected wire lights its whole electrical net -
through nodes, junctions, same-named labels and ground. - Editor panes: documents side by side, up to a 2x2 grid (View > Panes) -
a schematic next to its netlist, two schematics to compare. - Terminal and Python Shell docks, on a pseudo-terminal, next to the
simulation console; the Python interpreter is set under Application
Settings > Locations. - The Content panel lists the whole project tree (flat "dir/name" rows or
sub-trees per folder) with Python and Images categories of their own,
refreshes by itself at a set interval when files come or go
(Application Settings > Settings), and files can be dragged from it
into the editor area. - The Projects panel's right-click menu (also in the Project menu):
Switch Workspace; Import Project, which copies a NAME_prj folder into
the workspace; Link Project, which links one in without copying - it
opens and works as any project, its files stay where they are, and
deleting it from the workspace removes the link only - also when the
folder comes from the macOS dialog, which ends it in "/". - .cir/.ckt/.sp, .txt, .py and most text formats open in the built-in
text editor; "qucs-editor" can be given as the program of any file type. - Cursor-key moves of the selection are one undo step and Escape takes
them back. - The simulation toolbar sits on a second row.
- Theme (Application Settings > Appearance, or View > Theme to switch at
once): System, Dark or Light - the platform's own look - or one of ten
designed themes that look the same on every platform: Daylight, Paper
(the cream of classic Qucs), Solarized Light, Catppuccin Latte;
Graphite, Nord, Dracula, One Dark, Solarized Dark, Catppuccin Mocha. A
designed theme draws with Fusion under a style of its own - flat,
rounded buttons, fields and boxes in its colours (a colour-picker
button still shows its colour) - and styles the tool bars, docks, tabs,
menus, scroll bars and status bar; its text meets WCAG contrast on all
its backgrounds, and the window frames follow its darkness. The
component list and the text editor take the theme's colours, and on a
dark theme the component and tool bar icons, drawn in dark blue for
white, are lightened like the schematic, as are the editor's syntax
colours. Every document tab has its close button in every theme (on
macOS the "modified" dot used to take its place under a style that
closes on the right). Under System, Dark and Light the editor stays
black on white. - Status bar: on the left, what the tool in hand does and the keys it
takes (placing, wiring and its route, deleting, rotating...). On the
right, chips shown while they have something to say, the least
important giving way on a narrow window: the diagram value under the
cursor by variable with its unit (time 1.5 ms, out.Vt 1.235 V); the
selection (a click zooms to it); the cursor, or line and column; the
grid (a click shows or hides it); the zoom (a menu); the electrical
rule check, again a moment after each edit (a click lists the
problems and goes to the first); the last simulation - its seconds
while it runs, its time, its warnings, failed or stopped (a click
shows the output) - in place of the blinking warning label; the
simulator with its version (a menu switches); whether the document is
saved, and when, or autosaved (a click saves); the theme (a menu). - One grid setting for every schematic (Appearance > Schematic grid):
as each schematic says (the default, as before), always hidden or
always shown - for every open schematic at once, without changing the
files; elements still snap to the grid, data displays keep their own.
While it overrides, View > Show Grid (Alt+G) turns it over for all
schematics. - Schematics on dark paper (#1725): symbols, wires and texts, drawn in
colours meant for light paper, vanished on a dark background. On dark
paper a colour that would not show is now lightened and keeps its hue
(dark blue turns light blue, black light grey), and a diagram is drawn
as a light card; on light paper, and in every print and export,
nothing changes. "Schematic paper and grid from the theme"
(Appearance, off by default) gives the canvas a designed theme's own
paper and grid - Nord's slate, Solarized's cream - and dark paper in
the Dark theme, and follows the system when it switches.
Starting from the desktop
- Started from the Finder, the Dock or a desktop menu, the application
brings in your login shell's environment - PATH, SPICE_LIB_DIR and other
exports - so the simulators are found as they are in a terminal.
QUCS_NO_SHELL_ENV=1 turns this off. - Documents open from the system (upstream #973): double-click a .sch,
.dpl or .sym in the Finder, the Explorer or a Linux file manager, or
drop it on the Dock icon, and it opens in Qucs-S (on macOS in the
window already running). "qucs-s FILE..." opens documents and
"qucs-s NAME_prj" a project; -i is not needed. Qucs-S registers for
these types without taking them over from another program.
Documents saved by this build say <Qucs Schematic 26.1.2>; upstream 26.1.1
asks before opening them unless "Load documents from future versions" is on.
Full Changelog: https://github.com/javaNoviceProgrammer/Qucs-S_Enhancements/commits/v26.1.2