Version 1.6.2
Previous public release: 1.6.1 (built 10 October 2026).
A week of work, three headline items: pumps, compressors and expanders can run on their own performance curves; every unit and stream view can be sized, and keeps its size; and all the help is in one window, laid out like the User’s Guide. Among the smaller fixes, two change results: a reactor with only one product stream connected now carries its whole outlet, and a DWSIM import brings in each pump’s own efficiency and outlet pressure. The last section says which cases move, and how the program shows you.
Pumps, compressors and expanders on their own curves
Until now a pump, compressor or expander ran on a specification — an outlet pressure, a pressure rise or a power — at an efficiency you typed. A real machine runs on its curves: its head and efficiency follow its flow, at its speed.
- Enter the curves on the pump’s Pump Curve tab, or a compressor’s or expander’s Performance Curve tab: tick Use curves, give the Speed, and type the curves into the table, one row per point — the speed the point was measured at, the actual inlet volume flow, the head and the efficiency. Rows at one speed make one curve; rows at a second speed make a second. A row missing any of its four numbers waits until it has them, and the tab says so.
- On its curves the machine takes its head and efficiency from them, at its flow. A pump’s pressure rise is the liquid’s head at its flow; a compressor’s or expander’s discharge pressure is the one whose head — isentropic or polytropic, as its efficiency basis — is the curve’s, the way HYSYS takes a compressor’s curves. The Design tab greys the specification and the efficiency the curves replace.
- Between its points a curve is a smooth line that never overshoots them; past its ends it runs on along its end slope, and the machine says so. A curve is carried to another speed by the affinity laws — the flow with the speed, the head with its square, the efficiency unchanged — and a speed between two curves blends the two.
- The tab draws the curves, the one the machine runs at in bold, with its operating point. The machine’s datasheet says whether it runs on curves and at what speed, and speed is shown in rpm in every unit set.
- A Build with AI plan can give a machine its curves.
- Found and fixed on the way: a compressor or expander on the Schultz or GPSA method, given a polytropic efficiency, reported a different one (0.7547 for 0.78), and on GPSA its polytropic head was shown 1,000 times too small. Its outlet temperature and power were right.
Every view can be sized
- Drag any edge of a unit’s or a stream’s view, or the grip at its bottom right corner: bigger to see more of every tab — taller tables, wider charts — or smaller to see more of the PFD behind it.
- A view made smaller than its standard size keeps its usual layout and scrolls, so nothing in it is squeezed or cut off: scroll bars appear, the mouse wheel scrolls it, and Shift with the wheel scrolls it sideways.
- Each view remembers its size, as it remembers its place. A case saved with views open reopens them at their sizes, and the middle button on a view’s title bar puts it back to its standard size (User’s Guide 19.4b).
- Closing a view hands the keyboard back to the PFD. Until now Ctrl+Z, Delete and Esc did nothing after a view closed, until you clicked the canvas.
All the help in one window
The Help menu listed every help topic, 44 of them, and ran off the bottom of the screen.
- Help ▸ Help Topics opens one window laid out like the User’s Guide: the topics on the left, grouped by kind — working with the app, fluid packages and thermodynamics, solving the flowsheet, then each kind of equipment in the Equipment Palette’s order — and the chosen topic on the right. It reopens on the topic you read last, and its pictures fit its page.
- A panel’s own Help button opens its topic in the same window.
- The Help menu now holds only the windows: User’s Guide, Help Topics, the User’s Guide in your browser, the diagnostic log folder, Third-Party Notices and About.
- Dragging the edge of the Help, User’s Guide or Validation Cases window no longer makes its text larger.
Also in this release
- A reactor with only one product stream connected now sends its whole outlet into it, vapour and liquid. Until now that stream carried only its own phase and the rest of the outlet was lost, so the case did not balance. This was true of all five reactors: conversion, equilibrium, Gibbs, CSTR and PFR.
- DWSIM and COCO imports bring in each pump’s own efficiency — every pump imported from DWSIM ran at 75 %. A DWSIM pump set to an outlet pressure now comes in with it; until now it came in on its saved pressure rise, so a Spec that set its outlet pressure changed nothing.
- More DWSIM cases import cleanly. A shell-and-tube exchanger whose tube pitch the rating cannot take comes in on the simplified model, and a stored UA ten times off the exchanger’s own duty is replaced by the UA that duty implies; a Spec that sets one stream’s flow equal to another’s along the same flow path, which the app needs no Spec for, is left out and named in the import report; and File ▸ Validate import against reference values says on its first line when DWSIM saved the case at the end of a dynamic run, so that its stored values are a moment of that run, not a steady state. The import’s error window now names DWSIM where it named HYSYS for every import.
- Datasheets show their mass flows again. The Stream Summary’s mass flow, and the mixer’s and the separators’ flow rows, showed a dash since August.
- The Status panel no longer keeps a red “missing … variable” row for an Adjust or a Spec once both its variables are chosen.
- On the PFD, the dashed lines from an Adjust or a Spec to the units it reads and writes are as thick as stream lines, a selected icon’s border is heavier, and in the Industrial icon set the splitter, Python Script, Adjust, Spec, valve and pipe icons are smaller.
- On a screen scaled to 150 %, the text of some buttons and check boxes lost the bottom row of its letters; fixed.
- macOS: the macOS version is built from this release too.
- The validation report (Validations ▸ Validation Cases) now runs to 1,138 checks, all passing, up from 1,109 in 1.6.1.
Your results may change — and the program tells you
A case solved in 1.6.1 can give different numbers in 1.6.2:
- with a reactor that has only one product stream connected — that stream now carries the whole outlet;
- imported from DWSIM or COCO, with pumps — import the case again to bring in each pump’s own efficiency and outlet pressure; a case imported before keeps what it was imported with.
Open a case saved by 1.6.1 and press Solve All: if its results moved, the Status & Messages bar shows a blue Results changed row, and clicking it lists every stream and quantity that moved, largest first (User’s Guide 15.6). Save the case to keep the new results.
Thirty-two sample cases ship with this release.
Dynamics
Dynamics — following a process through time, with vessels that fill and drain, valves and PID controllers — is not part of the free download. If you are interested in obtaining a Dynamics version, please contact ruebenm@therqon.ca. The greyed PID Controller tile on the Equipment Palette belongs to it.
Version 1.6.1
Previous public release: 1.6.0 (built 3 October 2026).
A week of work, three headline items: component data from published sources — every component now has a specific gravity, 180 have vapour-pressure equations of their own, and the nine NRTL binary pairs the program supplies are fitted to published measurements; sharper thermodynamics — the NRTL and UNIFAC flash now converges, the three-phase separator treats free water as its own phase, and every reactor balances through its own streams; and File ▸ Validate import against reference values says why each stream does not match the source simulator. These are corrections, so expect some of your results to change — the last section says which, and how the program shows you.
Component data from published sources
The component library is the base of every calculation, and too much of it was estimated. Most components had no specific gravity, most vapour pressures came from a generalized correlation, and eight of the nine NRTL pairs were hand-entered numbers no one had checked against data.
- Every component has a specific gravity at 60 °F, so every stream now shows its standard liquid volume flow — until now only 9 of the 362 components had a gravity, and most streams showed none. 286 gravities come from a source: published measurements (195), the fluid’s reference equation of state (71), the gas-processing convention for the light gases (9), the solid’s density (2) and the petroleum cuts’ own (9). 76 are still estimates, marked as such.
- Liquid densities on Peng-Robinson, SRK, PRSV and Ideal moved toward published values. The COSTALD liquid density these packages use is now calibrated to each component’s gravity: over 64 fluids with reference equations of state, its error fell from 2.06 % to 0.51 %. Ethanol’s moved 8 %, triethylene glycol’s 17 % and glycerol’s 30 %.
- 180 components have a vapour-pressure equation of their own — 76 fitted to their reference equations of state, and 104 alcohols, glycols, amines, acids and others drawn through their published vapour pressures. The correlation they replace missed by tens of percent: 1-butanol by 35 % at 25 °C, cyclohexanol by a factor of four, and water by 7 % at 100 °C. This reaches every NRTL, UNIFAC and Ideal calculation, and on NRTL and UNIFAC the liquid’s heat capacity too: water’s was 94.7 J/mol K, now 75.0 (the true value is 75.3).
- The water–ethanol NRTL pair was wrong, and is fixed. Its two directions were swapped: it found the azeotrope but missed the measured boiling curve at 1 atm by up to 6.7 K. It is now fitted to 45 measured points from three published papers (NIST’s ThermoML archive) and meets them within 0.15 to 0.17 K.
- The eight other NRTL pairs — water with methanol, 2-propanol, 1-propanol and acetone; ethanol and methanol with benzene; ethanol with n-hexane; acetone with chloroform — were round numbers entered by hand. They missed the measured boiling curves at 1 atm by 0.8 to 7.6 K on average, gave water–acetone an azeotrope it does not have, and split five mixtures that mix in every proportion into two liquids at 25 °C. They are now fitted to 317 measured points, meet them within 0.05 to 1.3 K, and stay one liquid from 0 to 100 °C. A case imported from DWSIM keeps the pairs it came with.
- 25 acentric factors now agree with their components’ own vapour pressures. Peng-Robinson put those components’ boiling points 4 to 25 K off (triethylene glycol 14.5 K, cyclohexanone 23.1 K); now most are within 3 K. The critical point or boiling point of three components was corrected with them.
- The sources are named. Each component’s Notes, in the Component Manager, name where its specific gravity, heat capacity and formation enthalpy came from, and its vapour-pressure equation and acentric factor where those changed. The licences of the sources that need them are in Help ▸ Third-Party Notices, new in this release.
Sharper thermodynamics
- The NRTL and UNIFAC flash converges. It took the activity coefficients at the overall composition, once, instead of at the liquid it returned: two mixtures on the same tie line flashed 0.028 apart in composition, and dew points came out 1 to 2 K low. It now converges at its own liquid, and the flash, the dew and bubble points and a column reboiler’s flash agree with one another.
- The three-phase separator treats free water as its own phase. Its default Simplified model put the water inside the hydrocarbon liquid before taking it out: a wet gas at 30 °C and 40 bar left with about a quarter of the water it should carry, and water with n-octane at 1 atm first boiled at 109 °C instead of near 89 °C. On that gas the vapour / hydrocarbon liquid / water split went from 0.812 / 0.138 / 0.050 to 0.846 / 0.105 / 0.049, against the rigorous model’s 0.844 / 0.109 / 0.047.
- Every reactor balances through its own streams. All five reactors balanced their energy on the ideal-gas enthalpy alone while they priced their products with the fluid package: on DWSIM’s Biodiesel reactor the streams were 4.9 kW out of balance, an adiabatic liquid reaction could come out all vapour, and an adiabatic liquid CSTR or PFR could overheat until its solve failed. Each reactor now prices its feed and products with the fluid package, its NRTL or UNIFAC parameters included, and an adiabatic reactor’s duty is exactly zero.
Validate import says why each stream does not match
File ▸ Validate import against reference values compares an imported case with the source simulator’s own results. Until now it said which streams differed, but not why.
- Each stream that does not match now says why: the streams feeding its unit differ from the source’s, the unit calculates differently from the source’s unit, the unit does not solve (with its reason), the source’s own results cannot be used, or the stream flash differs.
- The cause is found by calculating each unit again from the source’s own inlet streams, in a copy the case never sees. The Check Units table lists each unit’s result: calculates like the source’s, calculates differently (minor or significant), does not solve, or could not be checked, and why.
- Plain numbers. Each line says whose each number is and the difference — T DWSIM 310.08, app 297.42 K (-12.66 K) — and the panel states the limits for a match and for a minor and a significant difference.
- It works while you watch, with Cancel. In our tests the Biodiesel case took under a second and HYSYS’s SUPER HEN case, 158 units, about 25 seconds.
Also in this release
- One Select Variable window for every variable picker — an Adjust’s, a Spec’s and a sub-flowsheet block’s variables. It lists every stream and unit, streams first and each list A to Z, with each variable’s value now, and opens on your current choice. The old Custom… box is gone.
- Adjust and Spec in your unit set. The set point, tolerance and limits of an Adjust, and the offset of a Spec, are shown and typed in the active unit set with the unit beside each; a blank limit means no limit. Coeff B is now Offset B. Every Adjust and Spec setting can be undone with Ctrl+Z, and a changed setting asks to be saved.
- A column’s bottoms flow was shown 3,600 times too small on the Unit Ops tab, in canvas tables and in the PFD Worksheet; fixed.
- Custom unit sets and number formats are kept between cases, in a file of their own; opening a case no longer removes a custom set it does not carry. The Units tab marks each unit a custom set changes from the built-in set it is based on.
- Stream colours by phase. Stream lines, the connection dots of separators, reactors and the extractor, and the stream’s Phases tab now use the column profile’s colours, by the phase a stream holds the most of: vapour light blue, liquid dark blue, water teal.
- Help windows close with the case on File ▸ New, Open and Close.
- Help ▸ Third-Party Notices opens the licences and notices of the software and data the program uses; Help ▸ About names them.
- macOS: the macOS version is built from this release too — one universal download for Intel and Apple-silicon Macs.
- The validation report (Validations ▸ Validation Cases) now runs to 1,109 checks, all passing, up from 1,040 in 1.6.0.
Your results may change — and the program tells you
Because these are corrections to data and models, a case solved in 1.6.0 can give different numbers in 1.6.1, closer to published data:
- on NRTL, UNIFAC and Ideal packages — new vapour pressures and NRTL pairs, and the converged flash;
- on Peng-Robinson, SRK and PRSV, wherever a liquid density counts — pump power, valve and pipe results, standard liquid volumes — and for the 25 components with corrected acentric factors;
- in three-phase separators on the Simplified free-water model, and in liquid-phase reactors.
Open a case saved by 1.6.0 and press Solve All: if its results moved, the Status & Messages bar shows a blue Results changed row, and clicking it lists every stream and quantity that moved, largest first (User’s Guide 15.6). Save the case to keep the new results.
Thirty-two sample cases ship with this release.
Version 1.6.0
Previous public release: 1.5.2 (built 28 September 2026).
Five days of work, three headline items: Build with AI — describe a flowsheet in plain words, and Claude plans it, shows you the whole plan, and builds and solves it only when you press Build; every column type now takes side draws, side strippers and pumparounds, and every column engine applies tray efficiencies tray by tray, in HYSYS’s form; and column results now balance through their own streams — each feed enters with its own enthalpy and each product carries its own stream’s flash. HYSYS .hsc columns now import as the type HYSYS gave them, and the release is built for Windows and macOS together.
Build with AI — a flowsheet from a description
Until now every unit was dragged from the palette, connected and specified by hand. Flowsheet ▸ Build with AI…, or the Build with AI button beside Solve All, opens a panel where you describe what you want — “a propane refrigeration loop”, “the Luyben depropanizer” — and Claude, Anthropic’s AI model, plans it.
- You see the plan before anything changes. Claude looks up your components in the database and reads the flowsheet with tools that only read, checks its plan against the program’s own rules, and then shows it in full: the fluid package, every stream with its conditions and every unit with its settings. Nothing is built until you press Build.
- Build is one step, and Ctrl+Z takes it back. Build makes everything in one undo step, lays it out on the canvas and runs Solve All. If a unit is not OK afterwards, Claude proposes a repair as a new plan — built, again, only when you press Build.
- What a plan can build: feed streams, heaters and coolers, pumps, valves, compressors and expanders, mixers and splitters, two- and three-phase separators, heat exchangers, columns — the Distillation Column, Absorber, Reboiled Absorber and Refluxed Absorber, HYSYS’s names — with purity and recovery targets, the five reactors with their reactions, Adjust and Set, recycles with an estimate for the tear stream, and sub-flowsheet blocks. A plan can connect to streams already on the flowsheet and change the settings of the units it built.
- It reads the flowsheet every time. Your own edits, earlier builds and Ctrl+Z are all seen, and a conversation builds only into the sheet it began on.
- Every request is kept. The case file records each request, each plan, each Build and what Solve All came to; History shows the record and Export… writes it as a web page.
- What you need: your own Anthropic API key — the same key the AI Convergence Advisor uses; saving it in either place serves both. A conversation that planned and built a flowsheet of five to ten units cost about 5 to 12 US cents in our tests.
- Honest limits: a plan does not remove anything, change a unit’s connections or change a column’s configuration, and a few settings — a column’s side draws and stage efficiencies among them — are made in the unit’s own view. The solver stays the authority on every number.
- Documented: User’s Guide chapter 24, and every unit’s help topic and User’s Guide section now says what Build with AI does with it.
Columns: side equipment on every type, tray efficiency in every engine
HYSYS allows side draws, side strippers and pumparounds on any column — its crude tower is a refluxed absorber with three of each. Until now this program offered them on the Distillation Column alone, and only one of its three column engines applied a tray efficiency.
- Side draws, side strippers and pumparounds are on the Absorber, the Reboiled Absorber and the Refluxed Absorber as well as the Distillation Column. A change of column type keeps them (only the Shortcut Column drops them), and a saved column reopens with its draw streams connected.
- The Sum-Rates engine counts side draws. In 1.5.2 no column with a side draw converged on Sum-Rates.
- A refluxed absorber is solved — a condenser over an open bottom, with no reboiler. In 1.5.2 no engine solved one, and a column without a reboiler could come back carrying a hidden reboiler duty; that answer is now refused.
- Tray efficiency in every engine, tray by tray. The column’s Setup tab has a per-tray table under Stage Efficiency: a section value fills its trays and a cell sets one tray. Three types: Murphree (HYSYS), HYSYS’s own form and the default; Murphree (classical); and Vaporization. On HYSYS’s ColumnStarter1 case the Deethanizer, at 75 % tray efficiency, now matches HYSYS’s temperature profile within 0.55 K on every stage, against 9.5 K with ideal trays. A case saved with Murphree before this release now solves with HYSYS’s form.
- The Newton engine solves a partial condenser and an open bottom when you pick it.
- Auto offers each engine only on a column it models. A pick the column cannot use is replaced, and the Diagnostics tab and the Run Results say so; 1.5.2 overrode a pick without a word.
- A design specification’s search starts at the column’s own value, not at the bottom of its range, where the first trial points often had no real column: ColumnStarter1’s Deethanizer meets its specification in 4 column solves instead of 14, and the whole case solves in about 4 s.
- HYSYS
.hsccolumns import as their own type, with the condenser and reboiler HYSYS gave them; an absorber no longer arrives carrying a condenser and a reboiler it does not have. Of the thirteen columns in the SUPER HEN methanol case, each solved on its own from HYSYS’s feeds, two converged with the old import; now eleven converge on Auto and the last two when Newton is picked.
Column results that balance through their streams
A column’s answer should agree with the streams it hands on. Two faults broke that, and both are fixed:
- Each feed enters with its own pressure and enthalpy. In 1.5.2 a feed was taken at its own temperature but at the tray’s pressure, so a saturated feed above its tray’s pressure partly boiled on paper and brought in heat it never had — 13 % of the reboiler duty on a test column, and 443 of 4,083 kW on HYSYS’s DEA amine regenerator. HYSYS keeps a feed’s enthalpy and lets the stage decide its phases, and now so does this program.
- Each product carries its own stream’s flash. On an activity-model package such as NRTL, the products were priced by an equation of state: a water–ethanol column’s liquid distillate and bottoms were shown as all vapour, 1.0 and 2.4 MJ/kg too high, and the units downstream used those numbers. A product that its own stream would flash into the other phase is now a warning that names it.
- The result: across the test suite, every column without side equipment now balances through its streams within 0.3 kW.
Also in this release
- A crash fixed. File ▸ New, File ▸ Open, an undo, or closing the case while a column was still solving could close the program. A column now stops its solve and waits for it first.
- Ctrl+Z undoes connecting and disconnecting a stream, and each connect or disconnect is one undo step.
- Every reactor setting can be undone with Ctrl+Z, and a changed setting now asks to be saved.
- The Recycle no longer gives up on a loop whose answer is far from your estimate: it probes the loop before calling it a mass imbalance.
- The Equilibrium Reactor no longer fails on a component with no flow that no reaction names.
- Three-phase separator: the water outlet carried an enthalpy 1,000 times too small, so a pump or valve on it failed; the duty is now reported in kW.
- Flashes below 15 bar on PR, SRK and Ideal packages split the phases with the package’s own equation: an adiabatic separator behind a heater set to 70 °C had sat at 69.947 °C.
- The Ideal method is HYSYS’s vapour-pressure model: Raoult’s law, Lee-Kesler enthalpy and entropy, and COSTALD liquid density. DWSIM’s Raoult’s Law package now imports as Ideal, unless the case carries a solid.
- HYSYS cases join File ▸ Recent Files.
- The diagnostic log is written where the program can write — an install for all users logged nothing — the last run’s log is kept, and Help ▸ Open Diagnostic Log Folder opens it.
- The AI Convergence Advisor runs on Claude Opus 5.5, which costs less per token.
- The AI Convergence Advisor reads each feed’s composition correctly. Its evidence gave a feed’s mass fractions labelled as mole fractions, and on a depropanizer it could then call a feasible column impossible by mass balance; it now gets true mole fractions. The McCabe-Thiele diagram’s feed point had the same slip and is fixed too.
- The column view’s Setup tab no longer scrolls sideways.
- The Luyben depropanizer sample now has a 32 °C feed: at the published reflux ratio it gives 95.7 and 2.7 mol % propane and a 648.8 kW reboiler, against the paper’s 95, 3 and 649.
- Known limit: HYSYS’s crude tower case (the legacy
.hscfile) now imports its tower as a 30-stage refluxed absorber, but the tower does not converge yet — trim duty, overflash and standard-volume draws are still to come — and its Solve All runs about ten minutes before saying so. Press Cancel Solve to stop it sooner. - macOS: the macOS version, first published for 1.5.2 on 29 September, is built from this release too — one universal download for Intel and Apple-silicon Macs, so far tested on Intel.
- The validation report (Validations ▸ Validation Cases) now runs to 1,040 checks, all passing, up from 926 in 1.5.2.
Thirty-two sample cases ship with this release, two of them new: HYSYS’s ColumnStarter1 and Black Oil EOS density cases.
Version 1.5.2
Previous public release: 1.5.1 (built 27 September 2026).
Three headline items: pressing Enter in a column’s design specification no longer closes the program, tables and the PFD Worksheet now reach inside sub-flowsheet blocks, each object headed by its place in the case, and the AI Convergence Advisor now reads the whole case, not only the sheet its column is on. Undo of notes, tables and diagrams is fixed as well.
Pressing Enter in a design specification no longer closes the program
In 1.5.1, on a column’s Specs tab, typing a number into a design specification’s Value, min or max box and pressing Enter could close the program without a message — four times out of four on the Luyben depropanizer sample, found while taking pictures for the new website. Anything not saved was lost.
The cause: pressing Enter wrote the new value to the column, and the list of design specifications the column sent back rebuilt every card on the tab — including the box still handling the keystroke. As it disappeared, that box finished editing a second time and wrote again while the cards were still being rebuilt, and the program was left holding a card that no longer existed.
- Fixed. An edit now updates its card in place, and the value is written a moment later, once the keystroke is finished. After Enter the box keeps its cursor.
- A click straight after typing is no longer lost. In 1.5.1, typing a value and then clicking a check box on the same tab rebuilt the cards under the pointer and dropped the click; now both edits reach the column.
- The Draws / Strippers and Pumparounds tabs were built the same way, and now write their changes the same way.
Tables and the PFD Worksheet reach inside sub-flowsheets
A sub-flowsheet block is a complete flowsheet inside one unit operation. Until now a table on the drawing, and the PFD Worksheet, saw one sheet at a time, and a name repeated between sheets — a heater_1 on the main sheet and another inside a block — could not be told apart.
- Canvas tables. On a sheet that holds a block, the Insert Streams table… and Insert Unit Ops table… dialogs offer Include sub-flowsheets. It lists every stream and unit inside the blocks as well, including the streams at a block’s connections, and ticks every row it adds. Each column is headed by its place, for example Chiller > E-101.
- The PFD Worksheet is one grid for the whole case. It shows the same links whichever sheet you open it from, it is saved with the case wherever you save from, and Insert Table takes the streams at a block’s connections too.
- Links survive reopening. The program renumbers objects when it loads a case; every table pick, diagram and Worksheet link now follows its object, and one whose object is gone comes back blank instead of landing on something else.
- Freeze values keeps the rows from inside blocks too.
The AI Convergence Advisor reads the whole case
Diagnose deeper lets the advisor look at the flowsheet, read any unit, and test-solve the column with its specifications changed. Until now it saw only the column’s own sheet: for a column inside a block it could not see the main sheet at all, and a unit name repeated between sheets pointed at the wrong one.
- The advisor now reads every unit on every sheet, each by its place in the case.
- The Advisor tab names the column with its place (“Chiller > T-100”), and keeps each column’s run apart even when two columns on different sheets share a name.
- The solver stays the only authority on every number. The advisor reads results and asks for test solves on a private copy of the column’s inputs; it never changes your case.
Also in this release
- Undo of notes, tables and diagrams. One Ctrl+Z now takes back exactly the last change. In 1.5.1 the first Ctrl+Z after adding, moving, resizing or deleting a note did nothing visible and the next took back two changes at once, and dragging a table or a diagram could not be undone at all.
- A note keeps its size and place. A resized note, and one dragged far out on the canvas, come back as you left them after undo, redo and reopening the case.
- An import report stays where you drag it, even over a block.
- File ▸ Validate import against reference values is one undo step: one Ctrl+Z takes all its notes away.
- The validation report (Validations ▸ Validation Cases) now runs to 926 checks, all passing, up from 914 in 1.5.1. The new checks cover tables and the Worksheet across sheets, the advisor’s tools across the whole case, and the undo of notes, tables and diagrams.
Thirty sample cases ship with this release.
Version 1.5.1
Previous public release: 1.5.0 (built 27 September 2026).
A small release, found while recording videos of the sub-flowsheet work, with one headline item: a fluid package chosen for a sub-flowsheet block made with Group, or imported from HYSYS or DWSIM, now runs the block’s inside — in 1.5.0 the choice changed the block’s labels and not its answer. Also fixed: Help ▸ About shows the version you are running again.
A package chosen for a grouped block now runs its inside
In 1.5.0, select some units, right-click, choose Group Selection into Sub-Flowsheet, open the new block’s view, press Fluid Package… on its Design tab, and choose a package from the Package list. The Design tab then said the inside ran on it — Inside the block: Water-Ethanol (NRTL-PR), chosen in the Fluid Package dialog — but the Boundary tab said Water-Ethanol Peng-Robinson on both sides — None needed: copied as it is, and the answer did not move: a water–ethanol feed heated by 300 kW came out at 79.01 °C on either package.
The cause: only a stream made by dropping a stream onto one of a block’s spare connection dots was treated as the block’s own, and only the block’s own streams move onto the package chosen for the inside. The streams Group makes at a block’s connections — and the ones the HYSYS and DWSIM importers write — were not marked, so every stream crossed the boundary on the parent’s package, copied as it was.
- Fixed for blocks made with Group, and for blocks imported from HYSYS and DWSIM. A chosen package now converts each stream as it crosses — the Boundary tab shows Re-flashed on the new package at the same temperature and pressure (T-P), with the reconciliation enthalpy shown and never charged as a duty — and the answer moves: the same feed now comes out at 75.16 °C with the inside on NRTL-PR.
- On Auto, a grouped block now follows its inlets’ package when you change the fluid package of the stream feeding it, as a block built by dropping streams on its dots always did.
- A block grouped and saved in 1.5.0 keeps the old behaviour. To give its inside a package of its own, ungroup it (right-click ▸ Ungroup Sub-Flowsheet) and group the units again. Blocks built by dropping streams on a block’s dots were never affected.
Also in this release
- Help ▸ About shows the version you are running. It had said 1.3.5 in every release since 1.3.5 — 1.4.0, 1.4.1, 1.4.2 and 1.5.0. It is now checked every time a release is built.
- The validation report (Validations ▸ Validation Cases) now runs to 914 checks, all passing, up from 913 in 1.5.0. The new check groups a unit into a block, chooses a package for the inside, and confirms that the answer moves and that the choice survives saving and reopening. Checks added to the HYSYS and DWSIM import tests confirm that the streams at a block’s connections are marked as the block’s own.
Thirty sample cases ship with this release.
Version 1.5.0
Previous public release: 1.4.2 (built 23 September 2026).
Four days of work, four headline items: sub-flowsheets gain what 1.4.0 left out — a different fluid package inside a block, copy and paste, values shown and set on the block itself, and Adjust and Set that reach inside it; HYSYS cases import again, through a new reader that brings HYSYS’s own sub-flowsheets across as blocks and keeps HYSYS’s drawing, and DWSIM’s Flowsheet unit operations arrive as blocks too; File ▸ Validate import now compares composition and vapour fraction, not only temperature, pressure and flow; and liquid densities on equation-of-state packages now come from COSTALD, as HYSYS’s do. That last one moves some answers in existing cases, so read its section before comparing old results with new.
Sub-flowsheets: the rest of what 1.4.0 left out
The 1.4.0 notes said plainly what a sub-flowsheet could not do yet: every stream crossing a block shared the parent’s fluid package, a region could not be copied, and the importers did not create blocks. All three are done, and more besides.
- A different fluid package inside a block. Open the block’s view, press Fluid Package… on its Design tab, and choose from the Package list: Auto runs the inside on the one package its connected inlets arrive on, or pick any package you have built in the Fluid Package Manager. Streams are converted as they cross — carried across component by component and re-flashed on the receiving side’s package — and go back onto the parent’s package on the way out, so the units after the block keep solving on the parent’s thermodynamics. The block’s Boundary tab shows one card per crossing: the package the stream left and the one it arrived on, its temperature and phase before and after, and the reconciliation enthalpy — the difference between what the two packages call the same stream’s heat content, shown and never charged as a duty. Nothing is dropped: a component the receiving package lacks stops the block, and its status names the component, its share and the package that lacks it. A new stream drawn inside a block starts on the block’s package.
- Copy, cut and paste. Edit ▸ Cut / Copy / Paste, Ctrl+X / Ctrl+C / Ctrl+V, Cut and Copy on a unit’s right-click menu, and Paste Here on the empty canvas’s. A copy takes the selected units and streams and every stream between them; a copied block comes with everything inside it. The clipboard belongs to the case, so a copy made on the main sheet pastes inside a block and the other way round. A connection to anything you did not copy is dropped and listed in Status & Messages. One paste is one undo step. The dew point control case pasted whole beside itself matches its original on all 38 stream values, exactly.
- Show and set inside values on the block. A new Variables tab on the block’s view shows values from units and streams inside it under names you choose, so you can read them — or set them — without going inside. An Input is set on the block and is the inside unit’s specification: typing a value on the block is the same as typing it in that unit’s own view. A Result is only read, and follows every solve. The tab refuses an input where something else sets the value, and says why.
- Adjust and Set reach inside a block. An Adjust or a Spec (the SET block) can use a block’s variables, or name any unit or stream inside a block on its own sheet, at any depth: its view gains a Sheet list above Object — the controller’s own sheet first, then every block inside it by its place (Main ▸ Chiller). A Spec that reads inside a block solves after it, and one that writes inside a block solves before it, so one Solve All lands the value. Grouping, ungrouping, copying, saving and reopening all keep these controllers pointing at the right unit. A controller reaches down into blocks, never up out of its own sheet: the parent solves a block, and the block cannot see its parent.
- Undo stays on the sheet you are on. A change of behaviour from 1.4.0, where undo acted on the whole case wherever you were. Inside a block, Ctrl+Z undoes the changes you made inside it, newest first, and stops there; a change made on the main sheet — including the Group that made the block — is undone from the main sheet, after you press Esc to go back out. The Edit menu’s Undo simply greys out, and the Undo and Redo help topic explains why. Ctrl+Z in a text box now undoes your typing first; it used to go straight to the flowsheet’s undo, reverting an unrelated change and leaving the typing in the box.
- Finding your way. Each sheet keeps its own zoom and position, saved with the case; the first time you go inside a block its drawing is fitted to the window. The Navigator sorts each sheet’s items by position on the drawing or by name, and every row ends with a live status chip — OK, WARN, FAIL, STALE, SOLVING or IDLE — so a failed unit three blocks down shows without opening anything. A block’s icon and chip show the worst unit inside it. Solve All‘s progress panel and its Solved in readout follow the run you started, wherever you go while it runs; pressed inside a block, it solves that block and says so (Chiller solved in 3.2 s).
- A block re-solves when a stream feeding it changes, like every other unit. In 1.4 it solved only on Solve All, and the Solve button on its own view did nothing. It still does not solve just because a case was opened or a stream was connected to it.
Honest scope, so you do not go looking: there are no templates yet — you cannot save a block as a file and insert it into another case. The conversion at a boundary is automatic (temperature and pressure, or vapour fraction and pressure when the stream sits on its phase envelope); you cannot choose it per stream as in HYSYS, and one component cannot be mapped onto a different one. Energy streams do not exist in the application yet, so a duty crosses a boundary as a variable. And a block still has no one-page datasheet of its own.
HYSYS cases import again
File ▸ Import HYSYS Case (.hsc / .xml) is available again. A HYSYS case saved as XML (in HYSYS, File ▸ Save As ▸ HYSYS XML Cases) now has a reader of its own, which reads the case straight into this application instead of translating it through the older binary-case route, which had been merging streams from different sheets.
- What comes across: the streams and unit operations with their specifications; columns built from their converged profiles, with a component recovery or fraction specification carried over as the column’s design specification; Set operations as Spec units; Tees with HYSYS’s solved split; pipe segments chained in order; hypothetical components; and HYSYS’s water–hydrocarbon interaction parameter of 0.5. A unit type the application does not have arrives as a pass-through placeholder, named in the import report, so the flowsheet stays connected. A loop HYSYS closes without a Recycle gets one, starting from the nearest values known upstream.
- HYSYS’s sub-flowsheets arrive as blocks. Each template sub-flowsheet imports as a sub-flowsheet block, its contents inside it, drawn as HYSYS draws them, running on the fluid package HYSYS gave that sheet, and each stream crossing its boundary connected to the block. HYSYS’s own gas-treating starter cases open with their Gas Dehydration and Acid Gas sub-flowsheets as two blocks.
- The drawing is HYSYS’s. Every icon lands where HYSYS placed it, spaced so nothing overlaps; mirrored HYSYS icons are mirrored. The binary
.hscroute also had every drawing upside down, and no longer does. - Measured against HYSYS: on HYSYS’s ColumnStarter1 case every unit solves in one Solve All, and of 25 streams compared 10 are within tolerance, 13 show minor deviations and 2 significant ones — the Deethanizer bottoms, where HYSYS applies a 75 percent tray efficiency this application’s partial-condenser columns do not, and a 1.9 kmol/h water stream. On a black-oil case every unit solves, 31 streams within tolerance, 20 minor, 3 significant.
Honest scope: an Aspen Hydraulics pipe network imports as a chain of pipes on the main sheet, and its pressure drops are about twice what HYSYS reports on the same segments. Glycol dehydration and amine sweetening cases import and draw correctly, but the application has no glycol or amine chemistry yet, so their regenerators do not solve. A HYSYS sub-flowsheet whose loop is closed only by a Recycle inside it, or that a Set reaches across, imports onto the main sheet, and the report says why.
DWSIM Flowsheet unit operations arrive as blocks
A DWSIM Flowsheet unit operation runs a whole other DWSIM case inside one block. It now imports as a sub-flowsheet block, with that case inside it — read from the .dwxmz file itself when the case is embedded there, or found beside the case when it is not. Its input and output parameters become the block’s variables. DWSIM case files from version 4, which write some fields under Portuguese names, now import too.
- On DWSIM’s own sample, one Solve All gives the vapour at 0.746987 kg/s against DWSIM’s 0.747281 kg/s, both at 170.0 K, with every mole fraction within 0.00015; Validate finds all three streams within tolerance. The sample ships with this release as Flowsheet_Unit_Operation_Sample.
- Validate compares the main sheet’s streams only for such a case: the file inside keeps the values of its own last run, not this case’s, and the report says so.
- It found a defect on the way: the two-phase separator could not flash below 180 K, so the sample’s separator at 170 K failed with an empty status line. It now works down to 20 K, as the valve and the pipe already did, and a failed flash says why.
Validate import compares composition and vapour fraction
File ▸ Validate import against reference values now scores every stream’s composition and vapour fraction alongside temperature, pressure and flow, for DWSIM, COCO and HYSYS imports.
- Composition is scored on the largest difference in any one component’s mole fraction: within 0.1 mol% is within tolerance, beyond 1 mol% is significant. The vapour fraction’s bands are 0.005 and 0.05.
- A stream with no composition or vapour fraction where the other simulator stored one counts as a deviation, never a silent skip. HYSYS imports also compare molar flow, the value HYSYS always stores.
- In a case with sub-flowsheets each stream is compared on its own sheet, and a stream inside a block is named by its place (Main ▸ Acid_Gas ▸ …).
- Each reference stream is now matched to one live stream only. A name the importer had to change to keep names unique could be matched twice, which counted one stream twice and scored it against the wrong reference.
- Honest scope: a HYSYS two-phase vapour fraction is not compared, because HYSYS’s own file disagrees with its own phase flows on 61 of 75 streams in one of its sample cases. A case imported before this release says to re-import it before the new comparisons can run.
Liquid densities from COSTALD — some answers move
A cubic equation of state gets liquid volumes wrong: at 25 °C, SRK reads liquids 7 to 24 percent too light, and Peng-Robinson runs from 7 percent light to 5 percent heavy for hydrocarbons and 15 percent light for water. Every quantity built on a liquid’s volume inherits the error.
- Liquids on a Peng-Robinson, SRK, PRSV or Ideal package now take their density from COSTALD (Hankinson and Thomson, 1979), with the compressed-liquid correction of Thomson, Brobst and Hankinson (1982) — the method HYSYS uses. Against NIST data for seven liquids, from hexane and toluene to water and saturated propane, it lands within 1.9 percent.
- It applies to existing cases too. Liquid densities, pump power and outlet temperature, and the valve, pipe and separator results that depend on liquid volume, will differ from the same case solved in 1.4.2. Where a stream’s temperature, pressure or flow moves as a result, the Results changed row introduced in 1.4.1 names it after your first Solve All.
- To keep the equation of state’s own liquid density for a package, set Liquid density to Equation of state in the Fluid Package Manager, under the Thermo Method.
- Activity-model packages (NRTL, UNIFAC and the rest) are unchanged, and close to the mixture’s critical point the equation of state still answers.
- One validation comparison moved and was re-baselined rather than hidden: the Andreasen sample’s degasser vapour pressure, which its script works out from a ratio of liquid volumes, now sits 1.92 percent from DWSIM’s value, inside the unchanged 2 percent band.
Also in this release
- A stream keeps its composition when you change its fluid package or edit its component list. Both used to wipe the composition you had typed, silently. Components on both lists keep their fractions, new ones start at zero, and a dropped component is named in Status & Messages with its share.
- A unit reads STALE only when its inputs really changed. After one Solve All of the amine case, nine units showed STALE with a green icon, because a stream re-announcing identical values marked everything reading it out of date.
- The reconciliation enthalpy at a mixer, column or extractor fed from different fluid packages was computed at the wrong composition — mass fractions read as mole fractions, about 20 percent off for water–ethanol — since 1.3.5. Fixed.
- A mixer, column or extractor fed from more than one package no longer re-saves your fluid package library on every solve, and one inside a block no longer shares — and overwrites — the package of a unit with the same name on the main sheet.
- Undoing a property-method pick in the Fluid Package dialog now undoes it.
- File ▸ Open always starts clean. Opening a case over one with the same units kept the old case’s computed values wherever the new file was silent.
- A right-click on a floating window no longer opens the canvas’s menu (Paste Here, Insert Streams table) underneath it.
- A heater or cooler specified to an outlet vapour fraction of exactly 0 or 1 now lands on the bubble or dew point; it could not solve before.
- The Sum-Rates column engine solves absorbers whose solvent is mostly water, such as an amine contactor.
- Grouping or ungrouping units inside a block no longer disconnects that block’s outlet from its stream on the parent sheet.
- A right-click inside a worksheet selection no longer collapses it to one cell, and a value a cell refuses flashes its outline red.
- Import reports and the Validate summary on the canvas wrap to a readable shape instead of one very long line.
- The Fluid Package Manager’s Method box no longer loses its top border, and an Incompressible package no longer clips its View x-y Diagram button.
- The Fluid Package dialog’s picture in User’s Guide 4.6 showed as a blank box inside the application; every help and guide picture path is now checked.
- The validation report (Validations ▸ Validation Cases) now runs to 913 checks, all passing, up from 790 in 1.4.2. The new checks cover fluid packages at a block’s boundary, copy and paste, a block’s variables, controllers reaching inside blocks, the HYSYS XML reader on five HYSYS cases, the composition and vapour-fraction comparison, COSTALD against NIST, and seven DWSIM reference columns whose test file had sat outside the build since June and had never run.
Thirty sample cases ship with this release.
Version 1.4.2
Previous public release: 1.4.1 (built 23 September 2026).
One day of work, most of it found by recording a demonstration video of a flowsheet built from scratch, and three headline items: a unit downstream of a cooler, heater, valve, pump, pipe, compressor, expander, splitter or heat exchanger now solves as soon as its feed does; typing a composition now behaves — mole fractions show the right mass fractions straight away, and a composition you are still typing is not calculated until it adds up to 1; and a diagram you insert on the canvas is sized to what you are looking at instead of filling the window at high zoom. Also fixed: the canvas stream table no longer cuts off its values, and long drop-down lists fit the window and scroll.
A unit downstream of your first unit now solves on its own
Build a feed, a cooler and a separator, finish the feed by typing its pressure last, and in 1.4.1 the cooler solved and its outlet showed a flow, a temperature and a pressure — but the separator stayed grey, its products stayed blank, and nothing in Status & Messages said why. Only Solve All finished the job.
The cause: the first time a unit solved, it wrote the composition into its outlet stream before switching that stream to the feed’s fluid package. A new stream starts on the Fluid Package Manager’s default package, so the composition did not fit it, and the package switch then cleared what was there. The outlet had no composition, and the next unit waited for one without saying so. Any later solve of the upstream unit repaired it, which is why it depended on the order you entered the feed.
- Fixed in the heater and cooler, the valve, the pump, the pipe, the compressor and expander, every outlet of the splitter, and both sides of the heat exchanger. The separators, the reactors, the mixer, the column and the recycle already did this in the right order.
- The whole flowsheet now solves the moment the last feed value goes in, whichever value that is.
Typing a composition
Two things were wrong when you typed a feed composition in a stream’s Composition tab.
- In mole fractions, the mass columns were wrong until you pressed Normalize Fractions. The Mass Fraction and Mass Flow columns showed each mole fraction multiplied by the component’s molecular weight — carbon dioxide at 0.8802 instead of 0.0427 in a natural gas — and the warning said the fractions did not add up to 1 even when the mole fractions did. The calculation itself was not affected, because the stream normalised the values internally, but the table was misleading. It now shows true mass fractions as you type.
- The flowsheet solved on a half-typed composition. With the flow, temperature and pressure already in, every cell you typed set off a solve of the whole flowsheet on whatever you had entered so far, scaled up to 1: two cells in, it was solving a gas of carbon dioxide and methane only. Now a composition you type takes effect when it adds up to 1, to within 0.001, or when you press Normalize Fractions — the way HYSYS treats a typed composition. Until then the stream reads Incomplete: the entered fractions sum to 0.8400, the Composition tab says why the stream is not being calculated, and nothing downstream solves from it.
Your existing cases are not affected: a composition that comes from a file, an import or a unit operation is used as it stands, exactly as before. One thing to know: a case saved from 1.4.1 or earlier in which you typed mole fractions and never pressed Normalize Fractions still carries the old values. It solves exactly as it did, and its Composition tab shows the warning until you press Normalize Fractions once.
Inserted diagrams fit your view
Right-click an empty part of the canvas, choose Insert Diagram, and pick a diagram and a unit. In 1.4.1 the diagram arrived at one fixed size, which at high zoom filled the whole window, and its text stayed small while the box grew around it.
- A new diagram takes about 40 percent of the canvas you can see, and lands where you right-clicked, pulled back inside the window if it would overhang.
- Its text and lines scale with the box, so it zooms with the drawing the way the equipment icons do. The corner handle still resizes it, and it can now be made smaller at high zoom.
- Diagrams in cases saved before this release keep the size they had.
Also in this release
- The stream table you insert on the canvas (right-click ▸ Insert Streams table…) no longer cuts off values such as “1.00…” and “306…”, or long stream names. Its columns were sized for narrower cell margins than the ones it draws with.
- Drop-down lists no longer run off the window. A long list, such as a stream’s Fluid package list, opened below its box and carried on past the bottom of the window, where its last entries could not be clicked. It now fits the window and scrolls with the mouse wheel.
- The validation report (Validations ▸ Validation Cases) now runs to 790 checks, all passing, up from 785 in 1.4.1. The new checks cover what your typing does: a feed finished in any order solves everything downstream, every unit type hands its outlet the feed’s composition on its first solve, and a half-typed composition is held until it adds up to 1.
Version 1.4.1
Previous public release: 1.4.0 (built 21 September 2026).
Two days of work, three headline items: a case you saved solved now opens solved — every unit’s computed results travel in the case file, so a case opens exactly as you left it instead of re-solving; the application tells you when a case no longer reproduces its saved results, and shows you which streams moved and by how much; and two defects in 1.4.0 are fixed — a sub-flowsheet could reopen with its inlet disconnected, and a case’s own thermodynamic parameters could change the answers of every case you opened after it. Also new: the column’s AI Advisor now reasons before it answers, and a help topic explains how to read the validation report.
A case you saved solved opens solved
Until now a case file held your specifications and the state of every stream, but not what the equipment had computed. Opening a case showed every unit as not solved and then re-solved the whole flowsheet — a wait on any case with a column in it, and a long one on a large case.
Every unit now writes its results into the case file beside its specifications: a heater’s duty, a pump’s head, an exchanger’s UA and its T-Q curve, a column’s verdict and design-spec results, a recycle’s iteration history, a reactor’s extents. When you open the case they are read straight back. The flowsheet appears as you left it — green status chips, filled-in results tabs, complete datasheets — and nothing re-solves.
- Every unit type is covered, from the heater to the column, all five reactors, the Adjust and the Spec, and every unit inside a sub-flowsheet.
- Status & Messages says so when a case opens: how many units and streams were read from the file rather than recalculated.
- The numbers you see were computed by the version that saved the case. Press Solve All to recompute them with this one. If they move, the application tells you — see the next section.
- A case saved by 1.4.1 still opens in 1.4.0. That release ignores the stored results and solves the case as it always did.
Some units deliberately do not come back solved:
- A unit you changed and did not re-solve before saving. Its stored answer would belong to the old specification, so it stores none and solves when the case opens instead. The same goes for a unit whose last solve failed. We would rather make you wait than show you a number that does not belong beside the specification you are looking at.
- A Python Script unit. A script that arrives in a case file is not allowed to run until you enable it, so its results are not shown as though it had run.
- The sample cases that come with the installer. They were saved before this release, so each one solves the first time you open it. Save it afterwards and it opens solved from then on.
Two limits worth knowing. A reopened unit shows its results but an empty Diagnostics tab, because diagnostic detail is not stored in the file; press Solve All to rebuild it. And a reopened Gibbs reactor draws its Gibbs Energy diagram only after the next solve.
Results updated since the file was saved
A case file stores the solved state of every stream as it was when you saved it. If a later version of the calculation engine gives a different answer — a thermodynamic correction, a better convergence, a fix in a unit model — the numbers can move even though you changed nothing. That is worth knowing before you build on them.
The first time Solve All finishes after you open a case, the application compares every stream’s temperature, pressure and mass flow with what the file holds, using the same tolerance the solver uses to decide a run has converged. If nothing moved beyond it, nothing is said.
- If something moved, a blue Results changed row appears at the top of the Status pane, naming how many streams moved and the largest change. While the Status & Messages bar is collapsed, a results changed badge shows on it so the row is not missed.
- Click the row to open the Results Changes window: one line per stream and quantity that moved, largest first, with the saved value, the new value and the change. Click a line to open that stream.
- Moved results are unsaved changes. Closing the case asks whether to save. Saving writes the new results and the row goes away.
- It stays quiet when a change is expected: when you edited the case before that first Solve All, for an imported case, and when the run did not converge.
A dew point control unit case saved before the 17 September saturation fix shows why this matters: its dew point stream was saved at 281.34 K and solves today at 255.43 K. Without this row that difference would pass unremarked.
Two defects in 1.4.0, fixed
- A sub-flowsheet could reopen with its inlet disconnected. Opening a case renumbers the streams inside a block, and the block’s connection points were not translated to the new numbers, so a reopened block could lose the stream feeding it and solve against a stale copy of its feed, with nothing on the canvas to say so. The likeliest trigger was a case built with Flowsheet ▸ Group Selection into Sub-Flowsheet. Every connection now survives the reload.
- A case’s thermodynamic parameters leaked into other cases. Opening or importing a case wrote its binary interaction parameters and UNIFAC group assignments into the shared component database, so an imported gas case quietly changed the answers of every case you opened after it in the same session. Those parameters now belong to the case that carries them: laid over the shared database while that case is open, replaced when you open another, and saved with it.
The column’s AI Advisor now reasons before it answers
Confer and Diagnose deeper were not using the model’s extended reasoning: the setting that turns it on was never being sent. They now reason before they answer, and Diagnose deeper shows that reasoning in its transcript, so you can see why it recommends what it does. Both take noticeably longer as a result.
How to read the validation report
A new entry, Validations ▸ How the Validation Report Works, and User’s Guide section 15.5 explain what Validations ▸ Validation Cases shows: what a check is, what each strength of evidence means and why agreement with another simulator is kept apart from agreement with published data, why the experimental row is empty, how to read the scope and tolerance lines, and what the report deliberately does not claim.
The report now runs to 785 checks, all passing, up from 752 in 1.4.0. The new checks cover saving and reopening every unit type.
Also in this release
- The Status & Messages bar follows the case’s app colour again; it could keep the colour of the case you had open before.
- The column’s Solver list names its engines the way the other simulators do: Inside-Out, Sum-Rates (Burningham-Otto), and Newton (Simultaneous Correction, Naphtali-Sandholm).
- The main window opens 15 percent shorter, and the collapsed Status & Messages bar takes a third less height.
Version 1.4.0
Previous public release: 1.3.5 (built 14 September 2026).
Eight days of work, and a bigger step than the version number suggests. Five headline items: a flowsheet can now contain sub-flowsheets — wrap a section of plant in one block, go inside it, solve it as one unit, and see the whole case at once in the new Navigator; distillation columns solve five to ten times faster than they did in 1.3.3 — measured, and stated here because it deserved a headline it never got; dew and bubble points on every hydrocarbon stream at pressure were wrong for equation-of-state packages and now come from the same flash the rest of the simulator uses; a case file can no longer run code on your machine just by being opened; and the application has a new look, with an app colour per case and one consistent style across every window. Also new: a changed specification now asks to be saved before you lose it, and Solve All skips the units whose inputs have not changed.
Sub-flowsheets
A sub-flowsheet is a flowsheet inside a unit operation. On the parent’s canvas it is one block with connection dots like any other unit; inside it is a complete flowsheet of its own, with its own streams, equipment, solver and drawing sheet. Use one to collapse a feed-preparation train, a compression stage or a utility loop into a single icon, so the top-level drawing stays legible. The chemistry does not change: a wrapped train solves to the same numbers as the same equipment laid out flat, and the validation suite pins that to one part in a billion on pressure. Blocks nest to any depth.
- Connecting a stream creates the boundary. Place a Sub-Flowsheet from the equipment palette, or choose Flowsheet ▸ New Sub-Flowsheet. It arrives empty with one spare inlet dot and one spare outlet dot. Drag a stream onto a spare dot and three things happen at once: a matching stream is created inside, the two are tied together as a boundary pair, and a fresh spare dot appears. You never declare ports separately from connecting them. Inside the block the boundary streams carry a FROM PARENT or TO PARENT badge; a FROM PARENT stream is written by the block, not by you, for as long as its port is connected outside.
- Or wrap what you already have. Select the units on the canvas — a rubber band or Ctrl+click — right-click one of them and choose Group Selection into Sub-Flowsheet. The selected equipment moves into a new block placed where it was; every stream that crossed the edge of the selection stays on the parent and becomes a port; the block’s inside reproduces the parent’s layout; and the parent solves to the same numbers as before. Ungroup Sub-Flowsheet is the exact reverse. Both are on the Flowsheet menu too, greyed when they do not apply.
- Going inside and back out. Only one flowsheet is on the canvas at a time. Open a block’s view and press Enter Sub-Flowsheet, or double-click its row in the Navigator; Esc takes you back up; the trail bar along the bottom of the canvas reads Inside: Main › sub_flowsheet_1 with each step a link, and the window title carries the same path. Undo and redo act on the whole case whichever flowsheet you are in.
- The Navigator. Once a case nests there was no way to see what else existed. The Navigator dock — Flowsheet menu, or the button at the left of the canvas toolbar — is a tree of every flowsheet in the case and every unit inside it, the one on screen highlighted. Double-click a flowsheet row to go there, a unit row to open that unit’s view, going into its flowsheet first if it has to. A filter box narrows the tree and keeps any flowsheet with a match beneath it, even inside a block you never opened.
- The block’s own view has five tabs: Connections (one row per port, with a picker to change the stream on it, and the way in), Design (the fluid package inside and the pass limit for the child’s solve), Worksheet (every stream inside with its conditions, readable without leaving the parent), Boundary (the per-port transfers of the last run) and Diagnostics / Log.
- How a block solves, and what closed means. When the parent’s solve reaches a block it copies the inlets inward, runs the child flowsheet to convergence — paced one unit at a time, exactly as a top-level Solve All is, so a column or a recycle inside behaves as it does anywhere else — copies the outlets back out, and reports. Closed means the child converged with every connected outlet fully specified. A child that diverged, or that contains a failed unit, holds its outlets at their previous values and reports the failure to the parent instead of passing stale numbers on; the parent’s Solve All then stops and names the failed block. Both of those were caught as false successes while this was being built, and both are now permanent tests.
- Each sheet is its own drawing. Every flowsheet owns its title block, drawing number and revision line. The engineer responsible for a sub-flowsheet can issue that sheet without issuing the whole case; the Revision History and Compare Revisions panels follow the sheet on screen and name it; a sheet never issued prints NOT ISSUED with no date, rather than a revision number and today’s date, because a number in that box is a claim that somebody issued the drawing; and a parent cannot be issued above the status of its lowest sheet — an IFC package cannot contain an un-issued drawing.
- The whole case at once. The Datasheet Manager lists the equipment of the whole case with a Location column, so a datasheet pack covers the plant rather than one drawing, and a nested unit’s datasheet carries its path under the title. Insert Streams Table gains Include sub-flowsheets. The print preview’s scope picker gains Whole case: one page per flowsheet in Navigator order, behind a contents sheet, every page with its own title block, as one print job. And every Status & Messages row is prefixed with the sheet it belongs to — Main › or Main › sub_flowsheet_1 › — because unit names repeat between flowsheets, and clicking a row opens the unit on the right sheet.
- Help ▸ Sub-Flowsheets documents the feature end to end, and a new sample case, Sample_Sub_Flowsheet_Demo, is the smallest possible example: a feed into a block that holds one heater, and a second heater on the outside.
Honest scope, so you do not go looking: streams crossing a boundary share the parent’s fluid package in this version — a different package inside a block, with a defined transfer at the boundary as the mixer and column already do between feeds, is the next piece of this work. There is no copy-and-paste of a region and no template library yet; a block is built by hand or by grouping. A Recycle inside a block cannot tear a loop that leaves the block; place it in the parent, and the connection tells you so. The importers do not create blocks. And a block has no one-page datasheet of its own yet; the Datasheet Manager lists what is inside it.
Columns solve five to ten times faster than in 1.3.3
This landed in 1.3.4 and shipped again in 1.3.5, and both sets of notes said so; it is here as a headline because anyone who skipped those two builds needs to know it before anything else on this page. Nothing about the answers changed — every converged column is pinned to the values it had before — but the work to reach them did: the thermodynamic engine stopped recomputing quantities it already knew, each pass starts from the previous pass’s full solution instead of from cold, and the Newton engine measures its sensitivities on a cheaper basis with an automatic fallback.
Measured on the developer’s machine between the timing baselines of 7 and 9 September, both stored in the repository:
- The 35-case Tier 1 column closure suite: 1,309 s to 25 s, 52 times faster.
- The inside-out verification suite: 272 s to 38 s, 7 times.
- An off-design open-top stripper that used to fail outright: 210 s to 11 s, and it converges.
- The column test files together, over the 152 cases common to both baselines: 3,109 s to 410 s, 7.6 times.
- The whole validation suite: 4,159 s to 1,057 s, 3.9 times.
In everyday terms: a 34-pseudo-component tower with coupled side draws went from 13 minutes to 9 seconds, and a 20-stage high-reflux pinch column from 19 minutes to 5.
Dew and bubble points now come from the real flash
For every equation-of-state package — PR, PRSV, SRK — a stream’s Bubble point and Dew point rows were being estimated from a low-pressure shortcut, and the routine that finds them with the same flash the rest of the simulator solves with was never reached. It showed up the way such things do: a user reported vapour leaving a separator at −20 °C and 41 bar with a dew point shown as +1 °C, and pure methane at 1 atm returning a boiling point above 500 °C.
- Both boundaries now come from the flash itself, the search reaches down to the light gases — nitrogen, methane and ethane sat below its old floor — and the dew point is the first drop of liquid, not the temperature at one percent liquid.
- On that user’s case the vapour dew point error went from 21 K to 0.3 K; pure methane and ethane now land within 0.13 K of their NIST boiling points.
- A standing physical check joined the validation library with the fix: the vapour leaving any converged separator must be at its dew point, and the liquid at its bubble point, at the vessel’s own conditions. It needs no reference data and would have caught this on day one.
- Still open, and stated: the bubble point of the liquid leaving that separator is 1.6 K out where the vapour’s dew point is 0.3 K. Both sides are pinned at their measured accuracy rather than loosened.
Activity-coefficient packages (NRTL, UNIFAC) were already on the correct path and are unchanged.
A case file cannot run code unasked
Opening a case that contained a Python Script unit used to run the script at load — no Solve, no click — and a DWSIM import that carried a script arrived active. Now any script that arrives in a file, opened or imported, is disabled until you press Enable Script on its Setup tab. A dialog appears once at load, before any automatic solve: it says what a Python Script unit is, that the script came from the case file so whoever made the case wrote it, that nothing has run yet, and what leaving it disabled costs. It lists each unit by its full location with Peek and Review buttons — Review takes you to the unit, inside a sub-flowsheet if that is where it lives — and offers Leave disabled as the default.
- A script left disabled is reported as a failure, not a warning, because everything downstream keeps solving on the unit’s stale outlet. The Status row is red and names Enable Script.
- The Python interpreter path is now a setting of your machine, remembered between sessions and no longer written into the case file, so a shared case cannot tell someone else’s computer which program to launch.
- A script you write yourself in the program runs immediately, as before.
- Two chapters joined the User’s Guide: Building a Case with an AI Assistant, a workflow a user found on their own, and The Python Script Unit, which documents the script interface exactly as the code checks it.
The new look
- An app colour per case. Settings ▸ App Colors offers eight — Grey, Beige, Red, Orange, Yellow, Green, Blue and Purple — each a pale tint for pages and a deeper one for frames, tab strips and toolbars. The choice is saved in the case file, so a case reopens in its own colour, and the colour never touches your data: stream lines, drawing colours, plots and every button stay the same in all eight. Cases saved before this release open in Beige.
- One consistent style. Every unit window and tab, the stream window, the managers, the Navigator, Help, Status & Messages and the print preview now share one set of spacings and corner radii, and a build-time check refuses new hard-coded spacing so screens cannot drift apart again.
- You can tell an enabled control from a disabled one. Text comes in four ranks — normal, an unselected tab, a placeholder, and disabled text that is still readable, because a disabled field on a product stream is still showing you real solved numbers. Disabled fields wear a dull fill instead of a live white box; menu entries you cannot choose sit on grey.
- The unit cell beside a value has two colours. Pale cream means the unit is the one your active unit set specifies; a darker cream with a dot before the unit means you overrode it on that row.
- Rounded corners on icons, selection frames and the elbows of stream lines; the Equipment Palette’s tiles line up in one grid; floating windows move aside for the Navigator dock and come back when it closes.
A changed specification asks to be saved
Typing a new value into any unit or stream form — a heater outlet temperature, a pump pressure, a feed composition — and then closing the case, opening another, or quitting used to discard it with no prompt at all; only adding, connecting, renaming or deleting counted as unsaved work. Now every value you type marks the drawing it is on as changed, and every way out asks first, naming the sheets at risk. A solve does not count as a change, and neither does a pan, a zoom, a Fit, or clicking into a field and leaving it.
The obvious fix was built and backed out the same day: an Adjust and a Spec write their target through exactly the same path your typing takes, and the column writes its product streams the same way, so every solve of a case containing one would have raised the prompt. The version that shipped keeps a single case-wide the solver is writing condition and consults it at the one point where a user’s edit is recorded; a permanent test has an Adjust move a heater’s spec and a Spec set it, with the case staying clean both times, then a hand edit of the same field marking it.
Solve All skips what has not changed
Every pass of Solve All used to re-solve every unit. It now fingerprints each unit’s inputs — every inlet stream’s temperature, pressure, flow, composition, vapour fraction and fluid package, plus the unit’s own settings — and skips the solve when nothing has moved since the unit’s last clean solve, because identical inputs cannot change a result. Adjust, Spec, Recycle and Python Script units are never skipped. The run summary reports the count: on the Andreasen sample, 96 units, 477 solves were skipped over 9 passes. A sub-flowsheet block takes part, skipped only when neither its inlets nor anything inside it has changed, so an edit two levels down still reaches the top.
The validation library, honestly counted
The report shipped with 1.3.5 printed 696 checks, but only 613 were distinct: a false alarm in the test runner had left duplicate result files beside their retries and the report counted both. That is fixed at three levels, the report now refuses to publish if a test file produced results but is described in no section — which is how 97 passing checks in 15 files had been running unmentioned — and a shell-and-tube rating suite that shipped on 5 September with its documentation, but had never actually been run, now runs and reproduces six published shell-side coefficients to within 0.023 percent.
Today’s report: 752 checks, 752 passed, 37,820 assertions, up from 613 distinct checks and 28,582 assertions. New classes of check since 1.3.5: the separator dew and bubble point identity, script trust at load and import, the skip logic in both directions, and sub-flowsheet save, load, undo, failure and recycle semantics. Nothing in the library is validated against measurements from real equipment, and the report still says so. One third-party comparison moved and was re-baselined rather than hidden: the Andreasen sample’s RVP degasser pressure now measures 0.46 percent from DWSIM’s own value, in DWSIM’s exact eleven iterations, superseding the 0.008 percent recorded before; the acceptance band is unchanged.
Also in this release
- Recent Files lists imported cases. Import DWSIM Case and Import COCO Case never reached the File menu’s Recent list; both now record their source file, and choosing the entry re-imports it.
- A file cannot change your default fluid package. A case saved while its package was the manager’s default used to make that package the default wherever it was next opened, so a stream drawn in another case came out on the wrong components. Only you set the default now.
- Flowsheet ▸ Replace Missing Fluid Packages moves every stream whose package no longer exists, at any depth, to the manager’s default, one message per stream. Re-enter the composition afterwards if it mattered; the load warnings now name the command.
- A fluid package used only inside a sub-flowsheet is now embedded in the saved case; it used to dangle on reload.
- The Fluid Package button on the Mixer, the LL Extractor and the column’s Setup tab now opens its dialog on the first click; the dialog lays out properly, its package name no longer elides, and it reopens where you left it.
- Solve All no longer fills the undo history with the solver’s own writes; Ctrl+Z after a solve reaches your edit first.
- The unsaved-changes prompt looks at the whole case and names the sheets that changed, so work inside a block is never closed away silently.
- The run summary says Recycle loops converged only when the case has a Recycle in it.
- The stream window’s Phases tab no longer clips its Unit column; the column window is wide enough for its Draws row; pumparound labels have room; a wrapped message in Status & Messages shows its second line.
- A dropped icon lands with its centre on the cursor, and a saved case reopens with nothing moved.
- Imported HYSYS and DWSIM cases lay out with more room between icons.
- The in-app User’s Guide showed the Python example as an empty code block under a stray heading; fixed, and the help’s references to the old App Themes menu now point at App Colors.
Twenty-nine sample cases ship with this release.
Version 1.3.5
Previous public release: 1.3.4 (built 9 September 2026).
Four days of work, three headline items: streams on different fluid packages can now feed the same unit — the mixer, the distillation column, and the liquid-liquid extractor resolve the mismatch automatically and explain every decision; the column’s Auto solver now measures the mixture before choosing an engine, ranking all three solvers with written reasons instead of guessing from a fixed list; a pumparound defect was found and fixed the same day — a pumparound sharing a tray with a product draw could silently circulate hundreds of times its requested rate, and a new class of capability tests caught it; the liquid-liquid extractor now extracts — it could return an empty extract stream on systems that genuinely separate, and four stacked faults behind that are fixed; and the documentation grew 64 screenshots — the in-app help topics and the User’s Guide are now illustrated end to end.
Mixed fluid packages at multi-feed units
Until now, every stream feeding a unit had to carry the same fluid package — the same component list under the same property method. Real flowsheets are messier: part imported, part built by hand, a solvent on an activity model meeting a feed on an equation of state. Three units now take that in stride — the Mixer, the rigorous Column, and the LL Extractor:
- The unit solves on its own package: the union of every feed’s components, under a property method chosen automatically on every solve. Nothing is ever silently dropped.
- The selection follows plain rules — one shared package means no change; a shared method over different lists keeps that method; different methods are each qualified against the mixture’s chemistry at the unit’s operating pressure, and the winner is the clean qualifier, or among several the one carrying the most feed mass. Every candidate’s verdict, with a one-sentence reason, is written to the unit’s Diagnostics on every solve.
- Your pick always wins: choose any method in the new dialog and the rules only comment — they never block.
- Each unit gains a Fluid Package button and dialog: the live selection and the reason for it, the union table with each component’s chemistry and whether it steers the choice (a significance threshold, 1000 ppm by default — water and the sour gases always count), and the feed transfers — how each stream crossed between packages, with the honest reconciliation enthalpy: the difference between what two thermodynamic models call the same stream’s heat content, reported in the energy balance as its own line and never charged as a duty.
- After each solve, four fitness checks review what actually happened — an activity model past its pressure range, two liquid phases with free water off, temperatures near the mixture’s pseudo-critical point, an oil characterization solved off its own equation of state — each an advisory line, never a block.
- The unit’s own package appears in the Fluid Package Manager, named after the unit, where its binary coefficients are edited like any other.
- Full documentation shipped with it: a new in-app help topic (Fluid Packages at Multi-Feed Units), sections in seven related topics, and User’s Guide 4.6 — plus the Fluid Package Manager’s own help topic, which existed but was never reachable, now wired in.
- A new sample case, Package_Boundary_Demo, shows the whole feature on three small trains — including a working ethyl-acetate extraction of ethanol from water: open it, press Solve on each unit, and watch the Diagnostics tell the story. (Diagnostics are per-session: a case that loads already solved shows its selection lines after its next solve.)
The Auto solver measures before it chooses
The column’s Auto setting used to pick an engine from a short fixed checklist. It now takes one measurement first: how strongly the vapor-liquid K-values move with composition at the feed’s bubble point — near zero for well-behaved mixtures, large where azeotropes or strong non-ideality live. From that number and the column’s shape it ranks all three engines, best first, each with a written reason, on the column’s Diagnostics — and the solve tries them in exactly that order.
- The threshold between “ordinary” and “strongly non-ideal” was not guessed: it was frozen from an eight-column measurement across the sample library, and that measured landscape is itself locked into the validation suite so future thermodynamics changes can’t silently move a column across the line.
- What you feel: a strongly non-ideal multi-component tower now gets the simultaneous Newton solver first, instead of after two failed attempts by the wrong engines — and a column the Newton solver genuinely cannot take (the measurement found one) is kept away from a wasted half-minute on every solve.
- Azeotrope detection is now method-agnostic and cheaper: the old two-component-only probe is retired, replaced by the same single measurement, which catches the same cases at any component count.
- A remembered engine or a good warm start still outranks everything, exactly as before; an engine you pick explicitly is never overridden.
A pumparound defect, found and fixed
While building capability tests for pumparounds, one configuration nobody had ever measured turned up a real bug: a pumparound drawing from a tray that already carries a product side draw was fed the whole tray’s flow — it circulated 11,768 kg/h against a 40 kg/h request, scaled its duty to match, and the solve still reported success. The cause: three places measured draws per tray instead of per draw. All three now read each draw’s own share (on an ordinary one-draw tray the numbers are identical, so nothing else moved), the pumparound’s dialog shows the rate you asked for, the product draw keeps its own, and the exact failing configuration is a permanent test.
The documentation is now illustrated
Sixty-four screenshots were added across the in-app help system and the User’s Guide in this cycle — unit dialogs, the solver and specification panels, the managers, and the new Fluid Package dialog on its own topic and in Guide section 4.6. Every picture ships inside the application itself, so the help reads the same on every install with nothing extra to download.
The liquid-liquid extractor now extracts
The LL Extractor could converge, report that its two inlets were mutually miscible, and hand back an extract stream of 0.0 kg/h — on mixtures that genuinely form two liquid phases. Four separate faults were stacked behind that single symptom, and all four are fixed:
- Interaction data was invisible to the lookup. Every chemical has a short internal name and a display name; the two were compared as plain text, so a hyphen alone could hide a component’s binary parameters. Any component whose name is more than one word silently lost its data and behaved as an ideal mixture — and ideal mixtures never separate.
- The phase-split calculation threw away finished answers. It found the two liquid phases correctly, then abandoned the result because an internal precision target could not be reached in the iterations allowed — discarding a split in which a fifth of the material had already separated into a clearly distinct second phase.
- The stage cascade starved itself. When any single stage was momentarily single-phase during the calculation, all upward flow through it stopped — so every stage above lost its solvent and stopped separating too, and the collapse ran up the column until everything left in the raffinate. The two single-phase situations are now told apart: a genuinely miscible mixture still passes straight through with an empty extract, as it should, while a stage that is only briefly single-phase mid-calculation keeps its flow.
- Its convergence test was unreachable. The cascade demanded a precision roughly one part in a hundred billion of its own internal flows, so even a correct solution was reported as a failure and the product streams were left empty. The test now scales with the size of the problem, and a result accepted at the iteration limit says so plainly rather than claiming a convergence it did not reach.
Related, on the column side: products of a column fed by different fluid packages kept the first feed’s package, so their enthalpy could not be computed and the streams never solved — the classic symptom was a distillate showing dashes for every energy property. Products now adopt the column’s own package.
Three hundred more binary interaction pairs
The binary interaction databank gains 300 vetted NRTL pairs from the public ChemSep collection of DECHEMA regressions, each carrying its source volume and page. Every pair was screened before inclusion, and eight entries were rejected as physically implausible rather than shipped — the check is recorded in the source alongside the data. A handful of published water–hydrocarbon parameters are deliberately held back for the same reason: as printed they predict complete miscibility for pairs that visibly separate in a beaker.
Also in this release
- Pumparound capacity up 9%: the measured circulation ceiling on the reference tower rose from 244 to 267 kg/h — a side effect of this month’s solver work, now tracked by a test so it can only go up.
- The engine-choice and pumparound questions left open by earlier campaigns were closed with measurements, not opinions — including proof that no alternative engine raises that ceiling, so no time is spent trying.
- More than 40 new documented validation checks joined the in-app validation system: the mixed-package suite, the engine-ranking landscape, and the new pumparound capability pins.
- The User’s Guide opens in your web browser now, pictures included — Help menu, right beside the in-app copy, the same way the validation report does. The installer ships the browser copy alongside the app.
- Open columns — absorbers, strippers, reboiled stabilizers — now get the full engine cascade: a stale rule had locked them to a single engine, and the shipped Condensate Stabilizer sample could not converge because of it. It now solves via the seeded Newton rescue.
- A Liquid-Liquid Extraction sample (UNIFAC) joins the library alongside the new Package_Boundary_Demo — twenty-eight shipped cases.
- The About dialog now states the version and describes today’s application rather than an early one.
- Documentation housekeeping: duplicate-era screenshots were retired so every picture shows the current interface, and one image name collision was resolved.
- The Fluid Package dialog now closes with the case it belongs to when you open another case.
- The click-to-select highlight around a chosen icon is now three times thicker — easier to spot on a busy flowsheet.
- A viscosity test’s evidence label was corrected; the provenance audit over the whole validation library now passes with no complaints.
Version 1.3.4
Previous public release: 1.3.3 (built 1 September 2026).
This release covers nine days of work with three headline items: distillation columns now solve 5–10× faster across the board; the app gains a built-in validation system — over 600 documented checks against published data, viewable inside the app itself; and the equipment library grows a rigorous shell-and-tube exchanger rating mode plus a Tank vessel. Alongside those: two stream-viscosity correlations were corrected, imported cases can carry their own convergence tolerance, and pumparounds ramp in automatically instead of failing outright.
Faster: distillation columns, dramatically
A week-long engineering campaign on the column solvers, measured end-to-end on real hardware at every step:
- The routine column test tier runs ~7× faster (5+ minutes → ~44 seconds).
- The heavy tier — wide multi-component towers, coupled side strippers, reflux sweeps — runs 8× faster (46 minutes → about 5½).
- The extreme cases moved the most: a 34-pseudo-component tower with coupled side draws went from 13 minutes to 9 seconds; a 20-stage high-reflux pinch column from 19 minutes to under 5.
- A class of off-design columns that previously failed to converge at all — open-top strippers far from their design point — now solves in seconds, via a new rescue path that re-seeds from an easier operating point and walks back to the one you asked for.
Under the hood this came from three things: the thermodynamic engine stopped recomputing quantities it already knew, solvers now start each pass from the previous pass’s full solution instead of from scratch, and the Newton engine measures its sensitivities on a much cheaper thermodynamic basis — with automatic fallback to the proven method the moment a column doesn’t like it, so converged answers are unchanged. Every step of the campaign was gated by the full test suite before it was kept.
New: built-in validation — see the evidence yourself
A simulator is only as good as its answers, so the app now carries its proof with it:
- A new top-level Validations menu. Validation Cases opens the full verification report inside the app — every check colour-coded with PASS/FAIL badges, kept open beside your flowsheet if you want to reproduce a case yourself. Open Full Report in Browser gives you the same document standalone.
- The report currently covers 600+ checks and over 26,000 individual assertions: pure-component properties, phase equilibrium against published measurements, and complete flowsheets checked against published results and other simulators.
- Every check declares what it was measured against and to what tolerance, and the report regenerates from the live test suite on every release — what you read is what this exact build passed.
New: shell-and-tube exchanger rating
The heat exchanger gains a type selection. Simple is today’s behaviour — pick a specification (duty, UA, an outlet temperature) and solve. The new shell-and-tube (rating) type computes the exchanger from its geometry instead:
- Two new tabs, Shell and Tubes: diameters, passes, baffle type and spacing, tube count, layout, pitch, fouling factors, wall material.
- The rating loop uses the published Bell-Delaware shell-side method with standard tube-side correlations, so the overall coefficient, both outlet temperatures, and both pressure drops are computed results, not inputs.
- The Results tab breaks the answer open the way an exchanger engineer checks it: tube-side film, wall, shell-side film, and fouling resistances separately, both Reynolds numbers, the LMTD correction factor, effectiveness, and the two pressure drops.
- DWSIM cases that carry shell-and-tube geometry now import it directly (with unit conversion handled), so a rated exchanger arrives rated — previously such cases imported with the other simulator’s converged answers as fixed inputs.
New: Tank, and smarter vessels
- A Tank vessel joins the palette. Steady-state behaviour matches the commercial convention: one inlet, one outlet, pressure carried through.
- Separators and tanks now take their role from how you connect them: a vented vessel (vapour line connected) behaves as a two-outlet separator; a sealed one as a single-outlet tank — with the name and icon following the role automatically, and staying put once you rename it yourself.
- New sample case: Petroleum Distillation with Reboiler Heating Fluid — a four-draw petroleum column heated by a Therminol hot-oil circulation loop (pump, heaters, tank, recycle), previously un-importable, now solving end to end.
Fixed: stream viscosity correlations
Two published viscosity correlations were implemented with unit errors — liquid viscosity (Letsou-Stiel) read far too low and vapour viscosity (Lucas) far too high, on every stream. Both are corrected and now match published data. If you compared viscosities from earlier versions against literature and frowned, this was why; anything derived from viscosity (the new exchanger’s film coefficients included) is computed on the corrected values.
New: imported cases can carry their own tolerance
Some published cases were built and solved in other simulators at a deliberately relaxed convergence tolerance, and demanding tighter convergence than the original makes them look unsolvable when they aren’t. Imports now bring that tolerance along:
- A DWSIM case that specifies its own loop tolerance imports with a Case Accept Tol field on the column panel (shown only when the case sets one; you can edit it).
- The solvers still aim for full tightness first. If they land inside the case’s own band instead, the column reports converged at the case’s tolerance, with a visible note in Diagnostics — instead of a red failure.
- Proving case: an industrial natural-gas demethanizer with an 11-stage temperature pinch, published and solved at 0.1 tolerance, now imports and solves cleanly.
Improved: pumparounds on difficult columns
Pumparounds on hard, high-reflux columns previously either converged or failed with little in between. Now:
- The circulation ramps in automatically: if a pass fails, the solver retreats toward the last working rate, then closes back in on the full specification.
- If the full rate is genuinely infeasible on that column, you get an honest verdict naming the maximum feasible circulation it found — a number you can design against — instead of an unexplained failure.
Fixes and reliability
- Corrected the Oil Manager’s bulk specific-gravity consistency check to the proper mixing formula.
- Fixed a crash (access violation) that could occur through a unit- registry lifetime edge case.
- The column solvers now distinguish honestly-can’t-converge from gave up too early — several internal stall conditions were replaced with explicit, explained exits.
- Test suite grown and hardened throughout: the full 577-case validation gate now completes in about 7½ minutes, so every future release gets the complete check.
Version 1.3.3
Previous public release: 1.3.2 (built 20 August 2026).
This release covers roughly ten days of work. The headline items are a new Python Script unit operation, a COCO/COFE case importer, a validated oil-and-gas benchmark, and a large internal units campaign.
New: Python Script unit operation
A scriptable unit operation. Write Python against the flowsheet’s own unit API to compute what a built-in block cannot — custom correlations, bespoke duty calculations, property post-processing, or a whole ad-hoc model — and have it solve inline with the rest of the flowsheet.
It also gives imported cases somewhere to land: DWSIM custom unit operations (CustomUO) now import, and IronPython scripts inside them are transpiled to this app’s unit API automatically. The transpiler is case-agnostic, not tuned to any one sample. Spec ties let a script drive or read another block’s specification.
New: COCO / COFE case importer (.fsd)
File → Import COCO / COFE Case (.fsd) reads a saved COFE flowsheet offline — no COCO installation, no COM, no CAPE-OPEN — and rebuilds it as a native case: units, streams, connectivity, PFD layout, conditions, compositions, component slate and property package.
Because COFE stores its converged results inline, an imported case can be re-solved and compared against COCO’s own answer stream by stream, the same validation loop the DWSIM importer offers. Pseudo-components are synthesized from the case’s embedded ChemSep constants rather than dropped, so oil-and-gas cases import with their heavy ends intact.
Two structural differences are handled explicitly and disclosed in the import report: COCO reactors have a single effluent where this app has separate vapour and liquid ports, so a small recombination mixer is added; and COFE tears recycle loops internally with no explicit recycle block, so a Recycle unit is inserted at each detected tear and seeded from the case’s converged values.
Validation — Andreasen oil-and-gas benchmark
The Andreasen (2025) oil-and-gas separation base case — 55 streams, 41 unit operations, Peng-Robinson with 8 petroleum pseudo-components — now solves end to end. Significant stream deviations against the reference fell from 33 (worst case 27,789%) to 2.
A ported ASTM D323 Reid Vapour Pressure calculation reproduces the reference’s stored answer to 0.008%. On a three-way comparison against Andreasen’s published HYSYS numbers, the liquid export stream lands inside the commercial-simulator spread.
The case is now a permanent headless regression test, so it is re-checked on every build rather than by hand.
Thermodynamics and solver
- Supercritical light gases. A quantum-gas alpha treatment for hydrogen and other light supercritical components, calibrated against ChemSep’s own behaviour. On an ammonia-synthesis case this moved product-stream deviation from 6.1% to 0.6%, worst temperature difference 0.91 K.
- Three-phase flash fix. A vapour-slate defect in the VLLE flash was producing a phantom 500 t/h recirculation on vapour-dominated feeds.
- Coordinated loop solver for flowsheets with interacting recycles.
- Recycle tear tolerance tightened from 1e-3 to 1e-5, with the pass ceiling raised to match.
- Ideal-gas Cp for petroleum pseudo-components via Lee-Kesler, replacing a weaker estimate.
- Separator energy balance. Fixed an imbalance caused by re-flashing saturated phase compositions.
- Gibbs reactor now works with any fluid, not only syngas species — component formulas are wired through from the component database.
Importers
- COCO importer: kinetic CSTR beds, Arrhenius rate parsing, splitter fraction normalisation, heat-exchanger hot/cold side resolution, and binary-interaction indexing all corrected.
- DWSIM importer: custom unit operations, script transpilation, and Lee-Kesler Cp for pseudo-components.
- Imported flowsheets no longer arrive with icons stacked or touching — a minimum icon spacing is enforced across all importers, and blocks the importer adds are placed clear of their neighbours.
Interface
- PFD Worksheet: fixed a hang when bulk-deleting cells; the first keystroke is no longer lost when you type directly into a cell; leading-dot decimals such as
.5are accepted; and with several column headers selected, double-clicking a border now auto-fits each column to its own content instead of forcing them all to one width. - Live heat-and-material-balance tables on the canvas now update as a paced solve runs, and no longer double the solve time when present.
- Valve P-H diagram now renders its two-phase dome. Both the in-panel tab and the on-canvas copy were affected.
- Stale import-validation dialogs no longer persist after opening another case.
- Reset All now clears the status chip on all five reactor types.
Under the hood
- A strict-SI units campaign completed across every unit operation and reactor: state is stored in SI base units internally, with conversion only at the display boundary.
- A new headless state-layer test suite compiles the full application state layer without a UI, so importer and solver behaviour is now regression tested directly.
Documentation
- New Help topic: Importing from COCO / COFE (.fsd).
- New User’s Guide chapter 20 covering the COCO importer, including the blocks it adds and the known limits.
Bundled sample cases (25)
Four added this release:
| File | Format | Notes |
|---|---|---|
OGSP_Andreasen_2025.fsd | COCO/COFE | Oil-and-gas separation benchmark |
Ammonia_synthesis_Andreasen_2025.fsd | COCO/COFE | Supercritical-hydrogen loop |
EthylBenzene.fsd | COCO/COFE | Kinetic CSTR case |
Andreasen_base_case_bechmark.dwxmz | DWSIM | Benchmark base case |
Samples install beside the executable and are copied into Documents\AI Process Simulator\saves\samples on first run. Upgrading users receive the four new cases automatically; files you have edited are never overwritten.