Landfill¶
[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¶
While the model describes a generic landfill, there are in practice four types of landfills (MSW, hazardous waste, C&D waste, ash). Each of these types of landfill includes the same basic processes as illustrated in Figure below and each type may be represented by adjusting default parameters. They may be unlined (e.g., many C&D landfills), have a single liner system (e.g., most MSW landfills), or be double-lined (e.g., hazardous waste landfills). The landfills may or may not have active gas collection and control systems. If there is an active gas control system utilizing a flare or engine, then some fraction of the volatilized or aerosolized PFAS may be destroyed. The PFAS that is not released remains stored in the landfill.
To calculate PFAS release, the disposed PFAS-containing waste material is assumed to be well mixed with the bulk MSW. The area occupied by the disposed waste is estimated based on a default parameter that represents the mass of total waste that can be disposed per unit area. The area occupied by the PFAS-containing waste mixed in with MSW is coupled with the leachate generation rate (volume/area-time) to estimate the volume of leachate produced. The partitioning of PFAS from the solid waste to the aqueous phase is modeled using a liquid-solid partition coefficient normalized to the amount of organic carbon. Model predictions are based on achievement of equilibrium. By default, it is assumed that no volatilization occurs, but a user can enter a fraction of PFAS that is volatilized.
The partition coefficient is used to estimate the concentration of PFAS in the liquid and solids. The concentration in the liquid changes throughout the year as is leached to the leachate collection system (i.e., it is assumed that leaching is uniform throughout the year and continuously removes PFAS from the mixture). The leachate collection efficiency is used to calculate the fraction of leachate that is collected and subsequently treated. The landfill process models in the SAT is designed so that by changing default parameters, a variety of landfill processes can be represented. For example, a C&D landfill without a liner would be modeled with no collection efficiency, all the generated leachate would be released to groundwater. A double-lined hazardous waste landfill could be modeled by increasing the leachate collection efficiency.
Assumptions and Limitations:¶
The organic carbon-normalized partition coefficient assumes that the organic carbon in different materials generally have the PFAS sorption capacity. However, material-specific coefficients were developed for activated carbon,
Volatilization is assumed to be zero by default due to a lack of data. However, the user may assign a fraction of the PFAS to be volatilized.
Future work is also required to implement a dynamic (i.e., non-equilibrium) model to account for changes in the organic C content of over time as landfilled materials decompose, and the effectiveness of cover system improves.
PFAS release is based on 1 year. A longer time horizon would result in additional PFAS release.
Input Parameters for Landfill model¶
[2]:
Landfill = pspd.Landfill()
Landfill.InputData.Data[['Category','Dictonary_Name','Parameter Name', 'Parameter Description', 'amount', 'unit','Reference']]
[2]:
Category | Dictonary_Name | Parameter Name | Parameter Description | amount | unit | Reference | |
---|---|---|---|---|---|---|---|
0 | LF MSW Properties | LFMSW | frac_of_msw | Fraction of PFAS containing waste mixed with MSW | 0.010 | fraction | |
1 | LF MSW Properties | LFMSW | bulk_dens | MSW bulk density - wet | 890.000 | kg/m3 | |
2 | LF MSW Properties | LFMSW | ts_cont | Total solids content of the bulk MSW in the landfill - wet | 0.746 | fraction wet weight | |
3 | LF MSW Properties | LFMSW | C_cont | MSW organic C content -dry | 0.331 | fraction TS | |
4 | LF Water Balance | Water_Blnc | leach_gpad | Leachate generation rate per area | 500.000 | gal/acre-day | |
5 | LF Water Balance | Water_Blnc | is_leach_col | Is leachate collected | 1.000 | 1:TRUE/0:FALSE | |
6 | LF Water Balance | Water_Blnc | frac_leach_col | Fraction of leachate collected | 0.998 | fraction | |
7 | Volatilization | Volatilization | frac_vol_loss | Fraction of PFAS lost to volatilization | 0.000 | fraction | |
8 | LF Parameters | LF | lf_ton_area | Landfill capacity per acre | 100000.000 | Mg/acre | |
9 | Log partition coefficient | LogPartCoef | PFOA | PFOA Log Koc (Landfill) | 2.190 | log L/kg OC | [2,3,4,5] |
10 | Log partition coefficient | LogPartCoef | PFOS | PFOS Log Koc (Landfill) | 3.040 | log L/kg OC | [2,3,4,5] |
11 | Log partition coefficient | LogPartCoef | PFBA | PFBA Log Koc (Landfill) | 1.880 | log L/kg OC | [2,3,4,5] |
12 | Log partition coefficient | LogPartCoef | PFPeA | PFPeA Log Koc (Landfill) | 1.370 | log L/kg OC | [2,3,4,5] |
13 | Log partition coefficient | LogPartCoef | PFHxA | PFHxA Log Koc (Landfill) | 1.770 | log L/kg OC | [2,3,4,5] |
14 | Log partition coefficient | LogPartCoef | PFHpA | PFHpA Log Koc (Landfill) | 1.970 | log L/kg OC | [2,3,4,5] |
15 | Log partition coefficient | LogPartCoef | PFNA | PFNA Log Koc (Landfill) | 2.630 | log L/kg OC | [2,3,4,5] |
16 | Log partition coefficient | LogPartCoef | PFDA | PFDA Log Koc (Landfill) | 3.240 | log L/kg OC | [2,3,4,5] |
17 | Log partition coefficient | LogPartCoef | PFBS | PFBS Log Koc (Landfill) | 1.510 | log L/kg OC | [2,3,4,5] |
18 | Log partition coefficient | LogPartCoef | PFHxS | PFHxS Log Koc (Landfill) | 2.790 | log L/kg OC | [2,3,4,5] |
19 | Log partition coefficient for GAC | LogPartCoef_GAC | PFOA | PFOA Log K (GAC) | 4.870 | log L/kg | |
20 | Log partition coefficient for GAC | LogPartCoef_GAC | PFOS | PFOS Log K (GAC) | 5.080 | log L/kg | |
21 | Log partition coefficient for GAC | LogPartCoef_GAC | PFBA | PFBA Log K (GAC) | 4.490 | log L/kg | |
22 | Log partition coefficient for GAC | LogPartCoef_GAC | PFPeA | PFPeA Log K (GAC) | 4.590 | log L/kg | |
23 | Log partition coefficient for GAC | LogPartCoef_GAC | PFHxA | PFHxA Log K (GAC) | 4.680 | log L/kg | |
24 | Log partition coefficient for GAC | LogPartCoef_GAC | PFHpA | PFHpA Log K (GAC) | 4.780 | log L/kg | |
25 | Log partition coefficient for GAC | LogPartCoef_GAC | PFNA | PFNA Log K (GAC) | 4.970 | log L/kg | |
26 | Log partition coefficient for GAC | LogPartCoef_GAC | PFDA | PFDA Log K (GAC) | 5.060 | log L/kg | |
27 | Log partition coefficient for GAC | LogPartCoef_GAC | PFBS | PFBS Log K (GAC) | 4.680 | log L/kg | |
28 | Log partition coefficient for GAC | LogPartCoef_GAC | PFHxS | PFHxS Log K (GAC) | 4.880 | log L/kg | |
29 | Log partition coefficient for Spent IER | LogPartCoef_SpentIER | PFOA | PFOA Log K (SpentIER) | 5.660 | log L/kg | |
30 | Log partition coefficient for Spent IER | LogPartCoef_SpentIER | PFOS | PFOS Log K (SpentIER) | 7.050 | log L/kg | |
31 | Log partition coefficient for Spent IER | LogPartCoef_SpentIER | PFBA | PFBA Log K (SpentIER) | 4.380 | log L/kg | |
32 | Log partition coefficient for Spent IER | LogPartCoef_SpentIER | PFPeA | PFPeA Log K (SpentIER) | 4.780 | log L/kg | |
33 | Log partition coefficient for Spent IER | LogPartCoef_SpentIER | PFHxA | PFHxA Log K (SpentIER) | 5.150 | log L/kg | |
34 | Log partition coefficient for Spent IER | LogPartCoef_SpentIER | PFHpA | PFHpA Log K (SpentIER) | 5.440 | log L/kg | |
35 | Log partition coefficient for Spent IER | LogPartCoef_SpentIER | PFNA | PFNA Log K (SpentIER) | 5.870 | log L/kg | |
36 | Log partition coefficient for Spent IER | LogPartCoef_SpentIER | PFDA | PFDA Log K (SpentIER) | 6.250 | log L/kg | |
37 | Log partition coefficient for Spent IER | LogPartCoef_SpentIER | PFBS | PFBS Log K (SpentIER) | 5.870 | log L/kg | |
38 | Log partition coefficient for Spent IER | LogPartCoef_SpentIER | PFHxS | PFHxS Log K (SpentIER) | 6.460 | log L/kg |
Incoming Waste to landfill¶
Here are the properties of the incoming waste to landfill.
[3]:
IncomingWaste = pspd.IncomFlow()
IncomingWaste.set_flow('MSW', 1000)
IncomingWaste.calc()
MSW = IncomingWaste.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 landfill¶
A substantial fraction of PFAS is stored in landfill for longterm.
[4]:
Landfill.calc(Inc_flow=MSW)
Landfill.report(normalized=True)
[4]:
Volatilized | Collected Leachate | Fugitive Leachate | Remaining in Landfill | |
---|---|---|---|---|
PFOA | 0.0 | 0.0180 | 0.0 | 99.9819 |
PFOS | 0.0 | 0.0026 | 0.0 | 99.9974 |
PFBA | NaN | NaN | NaN | NaN |
PFPeA | NaN | NaN | NaN | NaN |
PFHxA | NaN | NaN | NaN | NaN |
PFHpA | NaN | NaN | NaN | NaN |
PFNA | NaN | NaN | NaN | NaN |
PFDA | NaN | NaN | NaN | NaN |
PFBS | NaN | NaN | NaN | NaN |
PFHxS | NaN | NaN | NaN | NaN |
[5]:
Landfill.plot_sankey()

[6]:
Landfill.plot_sankey_report(margin=.5, ft=6)

Sensitivity to Leachate generation rate per area (default: 250 gal/acre-day)¶
[7]:
Landfill = ps.Landfill()
IncomingWaste = ps.IncomFlow()
LF_leach = np.linspace(100,50000,20)
PFAS_stored = []
IncomingWaste.set_flow('MSW', 1000)
IncomingWaste.calc()
for i in LF_leach:
Landfill.InputData.Water_Blnc['leach_gpad']['amount'] = i
Landfill.calc(IncomingWaste.Inc_flow)
PFAS_stored.append(Landfill.LF_storage.PFAS['PFOA']/Landfill.Inc_flow.PFAS['PFOA'] * 100)
plt.plot(LF_leach,PFAS_stored)
plt.ylim(98,101)
plt.xlim(100,50000)
plt.xlabel('Leachate generation rate per area (gal/acre-day)')
plt.ylabel('Percent of Incoming PFAS that \n remains in the landfill (%)')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-7-bb67ac9736d4> in <module>
----> 1 Landfill = ps.Landfill()
2 IncomingWaste = ps.IncomFlow()
3
4 LF_leach = np.linspace(100,50000,20)
5 PFAS_stored = []
NameError: name 'ps' is not defined