Skip to content

Qucs-S enhanced v26.1.2

Choose a tag to compare

@github-actions github-actions released this 25 Sep 12:39

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 features

    LC_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