Diagnostic Codes¶
Every check DWSIM runs on a flowsheet reports a code, one line on what is wrong with the
object in question, and one line on what to do. This page is the longer version of each code:
what it means, why it happens, and how to fix it. The Flowsheet Check window (Flowsheet Analysis
menu, or F8), the MCP tool dwsim_flowsheet_check and the assistant's /api/flowsheet/check
route all link here.
Findings come in three severities:
| Severity | Meaning |
|---|---|
| Blocker | The solver cannot produce a meaningful result until this is fixed. |
| Warning | The solve will run, but the result is likely to disappoint. |
| Info | Worth knowing; nothing has to change. |
An empty list means nothing known to be wrong. It is not a promise that the solve converges.
Degrees of freedom¶
The second tab of the Flowsheet Check window lists, for every object, the specifications its calculation mode reads and whether each one has a value. A sequential-modular simulator solves one unit at a time from its feeds and its specifications, so the degrees of freedom of a unit are the values it still needs from you:
- A feed stream needs two intensive state variables (temperature and pressure, or pressure and vapour fraction, and so on), one flow and a composition: four in all.
- A computed stream needs nothing; the unit upstream sets every value on it.
- A unit operation needs whatever its calculation mode reads. A heater in Outlet Temperature mode needs the outlet temperature; the same heater in Heat Added mode needs the duty. The pressure drop and the efficiency have defaults, so they are listed as optional.
- A mixer and a separator need nothing: the balances fix their outlets.
- An adjust frees one specification and imposes one target, so the count does not change.
SPEC_MISSING is the finding that goes with a non-zero remaining count.
Setup¶
EMPTY_FLOWSHEET¶
Empty flowsheet
There is nothing on the flowsheet to solve.
Why it happens. A simulation is a set of streams and unit operations connected in the order the material flows. Until at least one stream exists there is nothing for the solver to compute.
How to fix it. Add the compounds, choose a property package, then insert a material stream and the first unit operation.
See also: Your First Simulation
NO_COMPOUNDS¶
No compounds
The flowsheet has no chemical compounds, so no stream can carry any material.
Why it happens. Every stream is a mixture of the compounds selected for the flowsheet. Compositions, flows and properties all refer to that list, so it has to exist before anything else.
How to fix it. Open the simulation settings and add the compounds. Add every species that appears anywhere in the process, including products of reactions.
See also: Your First Simulation
NO_PROPERTY_PACKAGE¶
No property package
The flowsheet has no thermodynamic model, so no stream can be flashed and no property can be computed.
Why it happens. A property package is the set of equations that turns temperature, pressure and composition into phases, enthalpies, densities and everything else. Without one the simulator cannot say whether a stream is liquid or vapour.
How to fix it. Add a property package in the simulation settings. The choice depends on the compounds and the conditions: an equation of state such as Peng-Robinson for hydrocarbons and gases, an activity coefficient model such as NRTL or UNIQUAC for polar liquids at low pressure, Steam Tables for water only.
See also: Property Packages Guide
DUPLICATE_TAG¶
Duplicate tag
Two or more objects have the same name.
Why it happens. Names are how adjusts, specifications, scripts and the automation tools refer to an object. When two objects share one, whichever is found first wins and the other is unreachable by name.
How to fix it. Rename the objects so every tag is unique. A prefix per equipment type (H-101, P-201) keeps them tidy.
Connectivity¶
STREAM_DANGLING¶
Dangling stream
A stream is not connected to anything at either end.
Why it happens. A stream only has meaning as the inlet or outlet of a unit operation. One that touches nothing is not part of the process; it is a leftover from an edit, or a stream that was meant to be connected and was not.
How to fix it. Drag the stream onto a port of the unit it belongs to, or delete it. A feed is connected at its outlet only; a product at its inlet only.
See also: Mixer Basics
ENERGY_STREAM_HALF_CONNECTED¶
Energy stream with a loose end
An energy stream is attached to a unit at one end only.
Why it happens. An energy stream carries a duty: heat into a heater, work into a pump, heat out of a cooler. A unit in Energy Stream mode reads its duty from the stream, so the stream needs a value from somewhere. One loose end means the duty comes from nowhere, or goes nowhere.
How to fix it. Connect the other end, set the duty on the stream by hand if it is a boundary energy input, or delete the stream if the unit computes its own duty from a temperature specification.
See also: Heater Cooler
UNIT_UNCONNECTED¶
Unconnected unit operation
A unit operation has no stream attached to any of its ports.
Why it happens. The solver walks from the feeds through the units in flow order. A unit with no connections is not on any path, so it never receives anything to compute.
How to fix it. Connect an inlet stream and an outlet stream, or remove the unit.
See also: Mixer Basics
UNIT_NO_FEED¶
Unit without a feed
A unit operation has an outlet but no inlet stream.
Why it happens. A unit transforms what enters it. With no inlet there is no material, no temperature and no composition to work from, so the outlet cannot be computed.
How to fix it. Connect a material stream to one of the inlet ports. If the unit is the first in the process, that stream is a feed and you specify it by hand.
See also: Mixer Basics
UNIT_NO_PRODUCT¶
Unit without a product
A unit operation has an inlet but no outlet stream.
Why it happens. The result of the unit is written to its outlet streams. With none attached the result has nowhere to go, and the units downstream have nothing to read.
How to fix it. Connect a material stream to the outlet port. A separator needs one outlet per phase it produces.
See also: Mixer Basics
Feeds¶
FEED_NO_PRESSURE¶
Feed without a pressure
A feed stream has no pressure, so its state cannot be computed.
Why it happens. A feed is where you tell the simulator what enters the process. Its state needs two intensive variables, and pressure is one of them in almost every specification pair.
How to fix it. Open the stream and enter its pressure. Remember it is absolute: 1 atm is 101325 Pa, and a gauge reading of 0 means 1 atm.
See also: Your First Simulation
FEED_NO_TEMPERATURE¶
Feed without a temperature
A feed stream is specified by temperature and has none.
Why it happens. With temperature and pressure the simulator runs a flash and finds the phases, the enthalpy and every other property. Without the temperature it cannot start.
How to fix it. Enter the temperature, or change the specification to pressure and vapour fraction if what you know is that the feed is a saturated liquid or vapour.
See also: Your First Simulation
FEED_NO_FLOW¶
Feed without a flow
A feed stream carries no material, so everything downstream of it is empty.
Why it happens. Flow is the extensive variable of a stream. The state (temperature, pressure, composition) says what the material is; the flow says how much of it. Zero flow gives zero duties and zero products everywhere downstream, with no error.
How to fix it. Enter a mass, molar or volumetric flow. One basis is enough; the others follow.
See also: Your First Simulation
FEED_NO_COMPOSITION¶
Feed without a composition
Every compound in a feed stream is at zero.
Why it happens. The composition says which compounds the stream carries and in what proportion. All zeros is no material at all, so the flash has nothing to work with.
How to fix it. Open the stream, choose a basis (mole or mass fractions, or flows per compound) and enter the composition. The fractions are normalised to sum to 1.
See also: Your First Simulation
FEED_COMPOSITION_NOT_NORMALISED¶
Composition does not sum to 1
The mole fractions of a feed do not add up to 1.
Why it happens. Fractions are relative amounts, so they have to sum to one. This usually happens after editing one compound without adjusting the others, or after entering percentages where fractions were expected.
How to fix it. Re-enter the composition and let the editor normalise it, or enter flows per compound instead and let the simulator compute the fractions.
See also: Your First Simulation
VAPOR_FRACTION_OUT_OF_RANGE¶
Vapour fraction outside 0 to 1
A feed is specified by a vapour fraction below 0 or above 1.
Why it happens. The vapour fraction is the mole fraction of the stream that is vapour: 0 for a saturated liquid, 1 for a saturated vapour, anything between for a two-phase mixture. Values outside that range have no physical meaning, and 50 was probably meant as 0.5.
How to fix it. Enter a value between 0 and 1. If the feed is a subcooled liquid or a superheated vapour, specify temperature and pressure instead.
See also: Simple Flash Drum
Specifications¶
SPEC_MISSING¶
Missing specification
A unit operation is in a calculation mode that reads a value you have not given.
Why it happens. Each unit has degrees of freedom: the number of values you must supply before it can be solved. The calculation mode decides which values those are. A heater in Outlet Temperature mode needs the outlet temperature; the same heater in Heat Added mode needs the duty instead. Setting a value the mode does not read leaves the real specification empty.
How to fix it. Open the editor, look at the calculation mode, and fill in the values listed for it. If you know a different value, change the mode to the one that reads it. The Degrees of Freedom panel lists every slot per object.
See also: Heater Cooler
EFFICIENCY_OUT_OF_RANGE¶
Efficiency outside 0 to 100 %
A pump, compressor, expander, heater or cooler has an efficiency at or below 0 % or above 100 %.
Why it happens. Efficiency compares the real duty with the ideal one. It is entered in percent, so 75 means 75 %. Entering 0.75 gives an almost useless machine, and 0 divides by nothing.
How to fix it. Enter the efficiency as a percentage between 0 and 100. Typical values: 70 to 85 % for pumps and compressors, 100 % for a heater whose losses you ignore.
SPLITTER_RATIOS_NOT_NORMALISED¶
Split ratios do not sum to 1
The split ratios of a splitter do not add up to 1 over its connected outlets.
Why it happens. A splitter divides one stream into several with the same state and composition. The ratios are the fractions of the feed flow going to each outlet, so they have to sum to one; otherwise mass is created or lost.
How to fix it. Set one ratio per connected outlet, between 0 and 1, adding up to 1. If you know a flow instead, switch the splitter to a flow specification mode.
See also: Mixer Basics
REACTOR_NO_REACTIONS¶
Reactor without reactions
A reactor has no reaction set, or its set has no active reaction.
Why it happens. A reactor is a flash with chemistry. The chemistry lives in the reaction manager: each reaction has stoichiometry and a conversion, an equilibrium constant or a rate. The reactor only points at a set of those reactions. Without the set it is an expensive pipe.
How to fix it. Create the reactions in the reaction manager, add them to a reaction set, and select that set on the reactor. Check that the reaction type matches the reactor type: conversion reactions for a conversion reactor, kinetic ones for a CSTR or PFR.
See also: Reaction Systems
Logical objects¶
RECYCLE_NO_ESTIMATE¶
Recycle without an estimate
A recycle block starts iterating from an empty stream.
Why it happens. A recycle breaks a loop: the solver guesses the recycled stream, solves the loop, compares the result with the guess and repeats until they agree. Starting from zero flow is a poor guess, so the loop takes many iterations, and on a sensitive process it may never settle.
How to fix it. Solve the flowsheet once without the recycle stream to see roughly what comes back, then enter those values on the recycle outlet. Even a rough estimate cuts the iterations sharply.
See also: Recycle Loops
LOGICAL_TARGET_MISSING¶
Adjust or specification without a target
An adjust or a specification block does not name both the variable it reads and the one it writes.
Why it happens. An adjust changes one variable (the manipulated one) until another (the controlled one) reaches a set-point. A specification block copies a value from a source to a target through an expression. Either one with a side missing simply does nothing, and the solver does not complain.
How to fix it. Open the block and select both objects and both properties. For an adjust, also set the set-point and sensible bounds for the manipulated variable.
See also: Recycle Loops
After solving¶
SOLVER_EXCEPTION¶
Solver exception
A unit operation raised an error while being calculated.
Why it happens. The message comes from the unit itself and names what it could not do: a flash that did not converge, a pressure that went negative, a specification it cannot meet. The cause is usually one step upstream, in the feed or the specification of that unit.
How to fix it. Read the message, open the unit it names, and check its specification against its feed. Solve the flowsheet up to that unit and look at the inlet stream: is it in the phase and at the conditions you expected?
See also: Troubleshooting
INFINITE_LOOP¶
Loop without a recycle
The solver found a cycle of units it cannot order.
Why it happens. A sequential-modular solver computes units one after another, each from its inlets. When a unit's inlet depends on its own outlet, through a loop, there is no first unit to start from. A recycle block tears the loop by supplying a guess for one stream.
How to fix it. Insert a Recycle block on one stream of the loop, usually the one with the smallest flow or the one you can estimate best.
See also: Recycle Loops
NOT_CONVERGED¶
Unit not solved
A unit operation finished the run without a converged result.
Why it happens. The unit either never received a solved inlet, because something upstream failed, or its own iteration hit the limit without meeting the tolerance. The first unconverged unit in flow order is the one to look at; the ones after it are usually casualties.
How to fix it. Find the first unit in the list, read its error message, and check its specification and its feed. For a column, look at the initial estimates and the specifications; for a recycle, the tolerances.
See also: Troubleshooting
STREAM_NOT_FINITE¶
Stream with an invalid number
A solved stream carries a flow that is not a finite number.
Why it happens. NaN or infinity in a result means an operation divided by zero or overflowed somewhere upstream. The stream that shows it is rarely the one that produced it.
How to fix it. Start at the first unconverged unit, or the first stream with zero flow, and work forward.
See also: Troubleshooting
NEGATIVE_FLOW¶
Negative flow
A solved stream carries a negative mass flow.
Why it happens. Mass does not flow backwards. A negative flow means a specification asked a unit to take more out than came in: a split ratio above 1, a component recovery above 100 %, a product flow on a column above its feed.
How to fix it. Check the split fractions, recoveries and product flow specifications of the unit upstream against its feed flow.
STATE_NOT_PHYSICAL¶
Temperature or pressure at or below zero
A solved stream has an absolute temperature or pressure at or below zero.
Why it happens. Absolute temperature and pressure are positive quantities. A pressure drop larger than the inlet pressure, or a duty the stream cannot absorb, drives the state out of the physical range.
How to fix it. Look at the unit upstream: compare its pressure drop with the inlet pressure, and its duty with what the stream can give up.
UNIT_HAD_NO_EFFECT¶
Unit had no effect
A heater, cooler, pump, compressor, expander or valve left its outlet identical to its inlet.
Why it happens. Each unit reads its specification from the field its calculation mode names. A cooler is created in Heat Removed mode, so giving it an outlet temperature and leaving the mode alone leaves the duty at zero: the unit solves, reports no error, and does nothing.
How to fix it. Open the unit, set the calculation mode to the one that reads the value you know, then check the value itself.
See also: Heater Cooler
Physical plausibility¶
HEATER_COOLED¶
Heater that cooled its stream
A heater lowered the temperature of the stream passing through it.
Why it happens. A heater adds heat. Its duty is positive and its outlet is hotter than its inlet. The solver does not enforce that: a negative duty, or an outlet temperature below the inlet, gives a heater that behaves as a cooler, with the wrong sign on the energy balance.
How to fix it. If you meant to cool, replace the heater with a cooler. If you meant to heat, check the sign of the duty and the outlet temperature against the inlet.
See also: Heater Cooler
COOLER_HEATED¶
Cooler that heated its stream
A cooler raised the temperature of the stream passing through it.
Why it happens. A cooler removes heat. Its duty is entered as a positive number and its outlet is colder than its inlet. An outlet temperature above the inlet, or a negative duty, turns it into a heater.
How to fix it. If you meant to heat, use a heater. Otherwise check the outlet temperature and the sign of the duty.
See also: Heater Cooler
PRESSURE_WRONG_DIRECTION¶
Pressure moved the wrong way
A pump or compressor lowered the pressure, or a valve or expander raised it.
Why it happens. Pumps and compressors add work to raise the pressure; valves and expanders let it fall. The simulator computes whatever the specification says, so an outlet pressure below the inlet on a pump gives negative work, and a valve with a negative pressure drop gives free compression.
How to fix it. Check the outlet pressure or the pressure change against the inlet pressure. If the pressure really has to move the other way, use the equipment that does that.
See also: Heater Cooler
HX_TEMPERATURE_CROSS¶
Temperature cross in a heat exchanger
One outlet of a heat exchanger went past the inlet temperature of the other side.
Why it happens. Heat flows from hot to cold, so the hot outlet can approach the cold inlet and the cold outlet can approach the hot inlet, and neither can pass it. In a real exchanger that limit is the minimum temperature approach; a cross means the specified outlet temperature or duty asks for more heat than the temperature driving force allows.
How to fix it. Relax the outlet temperature or the duty, increase the flow of the side that limits, or check that the streams are on the sides you intended.
See also: Heat Exchanger Design
HX_HEAT_FLOW_REVERSED¶
Heat flowing from cold to hot
The hot side of a heat exchanger left hotter, or the cold side left colder, than it came in.
Why it happens. Without work, heat flows only from the hotter stream to the colder one. A reversed flow means a specified outlet temperature was put on the wrong side, or a duty was entered with the wrong sign.
How to fix it. Check which stream is on which side, then the outlet temperature specification and the sign of the duty.
See also: Heat Exchanger Design
TEMPERATURE_BELOW_FREEZING¶
Liquid below its freezing point
A liquid stream is colder than the melting point of its main compound.
Why it happens. Most property packages model vapour and liquid only. Below the freezing point they keep reporting a liquid, with properties extrapolated from above the melting point, where a real process would have ice, wax or a solid deposit.
How to fix it. Check the temperature. If the stream really is that cold, expect a solid there, and use a property package with solids if the solid matters to the result.
See also: Property Packages Guide
COLUMN_REFLUX_BELOW_MINIMUM¶
Reflux below the minimum
A shortcut column is set to a reflux ratio below the minimum for the separation.
Why it happens. The minimum reflux ratio is the reflux at which the separation would need infinitely many stages. Below it no number of stages achieves the specified key recoveries. Real columns run at 1.2 to 1.5 times the minimum, trading reflux (energy) against stages (capital).
How to fix it. Raise the reflux ratio above the minimum the column reports, or loosen the key recoveries.
See also: Distillation Column
MIXER_PRESSURE_MISMATCH¶
Mixer inlets at different pressures
The streams entering a mixer arrive at noticeably different pressures.
Why it happens. Streams can only mix at one pressure. The mixer takes the lowest inlet pressure by default, so a high-pressure stream is silently let down to the lowest one, and the pressure drop happens with no valve to account for it.
How to fix it. Put a valve on the high-pressure inlet, or a pump on the low-pressure one, so the mixing pressure is a decision. If the drop is intended, the finding can be ignored.
See also: Mixer Basics