Thermal Treatment¶
[1]:
import PFAS_SAT_ProcessModels as pspd
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import Image
import pandas as pd
pd.set_option('display.max_colwidth', 0)
Model document¶
Combustion systems include mass burn incinerators for MSW, hazardous solid waste, and medical waste, as well as cement kilns. The combustion process model in the SAT framework was designed so that by changing default parameters, a variety of conventional and emerging thermal treatment processes can be represented. In addition to MSW incinerators, other potential thermal processes include gasification/pyrolysis systems, and thermomechanochemical systems, which may include mechanical and chemical processing prior to combustion. To begin, the incoming materials are partially or fully combusted. During combustion, a fraction of the PFAS may be volatilized and/or destroyed, but data on destruction and release of volatilized PFAS and/or products of incomplete combustion are limited. The volatilized compounds may be transformed into chlorofluorocarbons, which deplete stratospheric ozone and are potent greenhouse gases. The incineration process produces combustion residuals that may include bottom ash, fly ash, and air pollution control (APC) residues. The mass of PFAS flows are modeled using a destruction and removal efficiency (DRE), and fraction of the DRE that remains in the residual. Based on these inputs, the model calculates the PFAS destroyed, released to the air and remaining in the ash. The ash is then sent to landfill.
Assumptions and Limitations¶
The model assumes a single DRE and fraction remaining on the residual for each material and type of PFAS. Data is relatively limited, but this can be readily updated as more data becomes available.
The model assumes there is a single ash stream with a common set of parameters.
The model assumes a single VS destruction efficiency, but this could vary by material.
The model does not consider transformations of PFAS.
Input Parameters for Thermal Treatment model¶
[2]:
ThermalTreatment = pspd.ThermalTreatment()
ThermalTreatment.InputData.Data[['Category','Parameter Name', 'Parameter Description', 'amount', 'unit','Reference']]
[2]:
Category | Parameter Name | Parameter Description | amount | unit | Reference | |
---|---|---|---|---|---|---|
0 | Total destruction and removal efficiency | PFOA | DRE of PFOA | 0.97 | fraction | |
1 | Total destruction and removal efficiency | PFOS | DRE of PFOS | 0.97 | fraction | |
2 | Total destruction and removal efficiency | PFBA | DRE of PFBA | 0.97 | fraction | |
3 | Total destruction and removal efficiency | PFPeA | DRE of PFPeA | 0.97 | fraction | |
4 | Total destruction and removal efficiency | PFHxA | DRE of PFHxA | 0.97 | fraction | |
5 | Total destruction and removal efficiency | PFHpA | DRE of PFHpA | 0.97 | fraction | |
6 | Total destruction and removal efficiency | PFNA | DRE of PFNA | 0.97 | fraction | |
7 | Total destruction and removal efficiency | PFDA | DRE of PFDA | 0.97 | fraction | |
8 | Total destruction and removal efficiency | PFBS | DRE of PFBS | 0.97 | fraction | |
9 | Total destruction and removal efficiency | PFHxS | DRE of PFHxS | 0.97 | fraction | |
10 | Fraction of not destroyed and removed that remains in residuals | PFOA | Fraction of PFOA remained in residuals | 0.33 | fraction | |
11 | Fraction of not destroyed and removed that remains in residuals | PFOS | Fraction of PFOS remained in residuals | 0.33 | fraction | |
12 | Fraction of not destroyed and removed that remains in residuals | PFBA | Fraction of PFBA remained in residuals | 0.33 | fraction | |
13 | Fraction of not destroyed and removed that remains in residuals | PFPeA | Fraction of PFPeA remained in residuals | 0.33 | fraction | |
14 | Fraction of not destroyed and removed that remains in residuals | PFHxA | Fraction of PFHxA remained in residuals | 0.33 | fraction | |
15 | Fraction of not destroyed and removed that remains in residuals | PFHpA | Fraction of PFHpA remained in residuals | 0.33 | fraction | |
16 | Fraction of not destroyed and removed that remains in residuals | PFNA | Fraction of PFNA remained in residuals | 0.33 | fraction | |
17 | Fraction of not destroyed and removed that remains in residuals | PFDA | Fraction of PFDA remained in residuals | 0.33 | fraction | |
18 | Fraction of not destroyed and removed that remains in residuals | PFBS | Fraction of PFBS remained in residuals | 0.33 | fraction | |
19 | Fraction of not destroyed and removed that remains in residuals | PFHxS | Fraction of PFHxS remained in residuals | 0.33 | fraction | |
20 | Combustion parameters | frac_vs_to_res | Fraction of incoming Volatile Solids to Combustion Residuals | 0.05 | fraction | |
21 | Combustion parameters | res_ts_cont | Solids content of residuals | 0.85 | fraction |
Incoming MSW to Thermal Treatment¶
[3]:
IncominWaste = pspd.IncomFlow()
IncominWaste.set_flow('MSW', 1000)
IncominWaste.calc()
MSW = IncominWaste.Inc_flow
MSW.report()
[3]:
Parameter | Unit | Amount | |
---|---|---|---|
0 | Mass flow | kg | 1000 |
1 | Solids flow | kg | 254.0 |
2 | Moisture flow | kg | 746.0 |
3 | VS flow | kg | 134.62 |
4 | Carbon flow | kg | 84.074 |
5 | PFOA | μg | 1070.0 |
6 | PFOS | μg | 840.0 |
7 | PFBA | μg | 0.0 |
8 | PFPeA | μg | 0.0 |
9 | PFHxA | μg | 0.0 |
10 | PFHpA | μg | 0.0 |
11 | PFNA | μg | 0.0 |
12 | PFDA | μg | 0.0 |
13 | PFBS | μg | 0.0 |
14 | PFHxS | μg | 0.0 |
PFAS balance in Thermal Treatment¶
[4]:
ThermalTreatment.calc(Inc_flow=MSW)
ThermalTreatment.report(normalized=True)
[4]:
Air Emission | Combustion Residuals | Destructed | |
---|---|---|---|
PFOA | 2.01 | 0.99 | 97.0 |
PFOS | 2.01 | 0.99 | 97.0 |
PFBA | NaN | NaN | NaN |
PFPeA | NaN | NaN | NaN |
PFHxA | NaN | NaN | NaN |
PFHpA | NaN | NaN | NaN |
PFNA | NaN | NaN | NaN |
PFDA | NaN | NaN | NaN |
PFBS | NaN | NaN | NaN |
PFHxS | NaN | NaN | NaN |
[5]:
ThermalTreatment.plot_sankey()

[6]:
ThermalTreatment.plot_sankey_report(margin=.5, gap=.3)
