Skip to content
TwinProcessAI

Application: available

Fired heater optimisation.

The one application running today, and the page a process engineer should judge us by. Everything here comes from a model you can inspect rather than a case study you have to take on trust.

The design point

What the twin represents today. Yours will differ, and that difference is what a pilot resolves.

Duty
53.4 MW absorbed
Feed
195,000 kg/h of 34 API crude
Temperatures
40 C to 400 C
Coil
120 radiant tubes, two bare plus 13 finned convection rows
Efficiency
90.7 % LHV at 15 % excess air on a clean coil
Stack and bridgewall
164 C stack, 773 C bridgewall
Radiant flux
26.5 kW/m2 average radiant flux
Tube metal
468 C peak tube metal
Standard
All inside the API 560 bands

Solved by the firedheater module, not fitted. First-principles simulation of a 53.4 MW crude preheat heater driven through 120 days of hourly operation. Not a plant installation.

Four levers

Two you can move this shift, one you schedule, one you have to find first.

  1. 01

    Excess air

    The lever that matters most and the one available this shift. Air above what the burners need is nitrogen heated to stack temperature and vented.

    Controls 22 % of CO2 variation and 16 % of efficiency variation

  2. 02

    Convection cleaning

    A fouled bank sends heat up the stack that should have gone to the process. The twin infers the fouling index continuously, so the decoke can be timed on condition rather than on the calendar.

    Dominates tube metal temperature at 19 % of its variation

  3. 03

    Burner condition

    Degraded tips and skewed registers push CO up without moving the stack O2 reading. Found by comparing CO against what a healthy heater would make at the same duty.

    Drives 42 % of CO variation through register imbalance alone

  4. 04

    Fouling-aware scheduling

    The safe lean-air limit moves as the bank fouls. Optimising air and cleaning together is worth more than optimising either alone.

    The reason cleaning value is quoted at the re-optimised air rate

Shares from ml_metrics.json, key actionable_split, which separates what an operator controls from what the schedule imposes.

What it produces.

Two consecutive hours from the history, exactly as the engine wrote them. Both recommendations, the price on each, the limit that bounds the move and the reasoning. Nothing here is edited for the website.

Operator recommendation
Efficiency
87.1 %
Stack O2
3.73 %
Stack temp
233 C
CO
20 ppm
Feed
189,546 kg/h
Outlet
415 C
Fouling
0.75
Detected fault
fuel_upset

Trim excess air 19.8 % to 9.9 % (stack O2 3.73 % to 2.08 %)

$45.44/h~$381,710/yr at this state

  • +1.26 ptsefficiency
  • −1.52 %fuel
  • −0.617 t/hCO2

Watch Move in steps and hold. Stop if CO passes 100 ppm before the O2 target, or if the stack falls below 98 C.

Why +

Every percent of excess air above what the burners need is nitrogen heated from 20 C to the 233 C stack and vented. Cutting stack O2 by 1.65 points removes that parasitic mass flow, which is why the stack falls 16 C and dry flue-gas loss drops with it. The duty is unchanged, so the whole of the recovered loss shows up as less fuel through the burners. The move stops where it does because CO 167 ppm at the 200 ppm limit.

Clean the convection section (fouling index 0.75 to 0.00)

$104.74/h~$879,828/yr at this state

  • +3.87 ptsefficiency
  • −4.40 %fuel
  • −1.119 t/hCO2
Why +

A fouling index of 0.75 is an insulating layer on the convection tubes. Heat that the bank should have recovered leaves up the stack instead, so the stack temperature rises at constant duty and the burners make up the difference. Restoring a clean bank returns that heat to the process. Because a clean bank also pulls the stack temperature down, the safe lean-air limit moves as well, and the figure quoted is at the re-optimised air rate rather than the current one.

Limited byCO 167 ppm at the 200 ppm limit
Operator recommendation
Efficiency
87.2 %
Stack O2
3.64 %
Stack temp
232 C
CO
22 ppm
Feed
188,953 kg/h
Outlet
416 C
Fouling
0.75
Detected fault
fuel_upset

Trim excess air 19.2 % to 9.9 % (stack O2 3.64 % to 2.08 %)

$44.77/h~$376,092/yr at this state

  • +1.18 ptsefficiency
  • −1.43 %fuel
  • −0.633 t/hCO2

Watch Move in steps and hold. Stop if CO passes 100 ppm before the O2 target, or if the stack falls below 98 C.

Why +

Every percent of excess air above what the burners need is nitrogen heated from 22 C to the 232 C stack and vented. Cutting stack O2 by 1.56 points removes that parasitic mass flow, which is why the stack falls 15 C and dry flue-gas loss drops with it. The duty is unchanged, so the whole of the recovered loss shows up as less fuel through the burners. The move stops where it does because CO 167 ppm at the 200 ppm limit.

Clean the convection section (fouling index 0.75 to 0.00)

$104.80/h~$880,302/yr at this state

  • +3.78 ptsefficiency
  • −4.30 %fuel
  • −1.158 t/hCO2
Why +

A fouling index of 0.75 is an insulating layer on the convection tubes. Heat that the bank should have recovered leaves up the stack instead, so the stack temperature rises at constant duty and the burners make up the difference. Restoring a clean bank returns that heat to the process. Because a clean bank also pulls the stack temperature down, the safe lean-air limit moves as well, and the figure quoted is at the re-optimised air rate rather than the current one.

Limited byCO 167 ppm at the 200 ppm limit

Source: thermotwin/artifacts/ml/operator_recommendations.json, verbatim.

Nine labelled fault classes

Six are real physics the twin has to learn. Three are broken instruments the cleaning step has to find and throw away.

ClassKindHoursSignature in the data
fouling_spikeprocess105Stack temperature rises, efficiency falls at constant duty
burner_degradationhidden from O2process56CO climbs while the stack O2 analyser still reads normal
register_imbalancehidden from O2process46CO climbs while the stack O2 analyser still reads normal
high_excess_airprocess43Efficiency falls, dry flue-gas loss rises
fuel_upsetprocess28Heavy gas slug, LHV drops, Wobbe shifts
air_deficiencyprocess6CO breaks through, stack O2 falls
stack_temp_biassensor56Stack temperature reading drifts or offsets
o2_sensor_stucksensor35Stack O2 reading frozen
flow_spikesensor6Feed flow transient that the process never saw

The two marked hidden from O2 are the pairing that catches operators out. Burner degradation and register imbalance both push CO up while the stack analyser, which reads the mixed average, stays comfortable. Trim air on that reading and the worst burner goes richer still. Our interlock blocks the trim outright when it sees that pattern.

Hours from ml_metrics.json, key fault_classifier.class_counts. Dataset: 2,880 rows over 120 days at hourly resolution, 97 sensor-fault rows dropped, 2,783 clean, 284 process-fault rows deliberately kept.

What one heater returns

Physics-corrected, averaged over every hour, with the assumptions on the page.

$96k
Per heater, per year
Averaged across every hour of a 120-day history, then scaled by the 0.839 of predicted saving that physics delivered. Fuel at 6 USD/GJ, carbon at 40 USD/t, 8,400 operating hours per year.
805 t/yr
CO2 avoided per heater
Physics-corrected. First-principles simulation of a 53.4 MW crude preheat heater driven through 120 days of hourly operation. Not a plant installation.
2,675 of 2,783
Hours where a move was available
108 hours were interlocked, 47 of those because a combustion anomaly was detected and trimming air would have been unsafe.

Run it against your heater.

Ninety days of tags and a datasheet is enough to start. We will tell you what the unit is leaving on the table and where our model disagrees with your plant.