Land Application¶
[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)
import warnings
warnings.filterwarnings('ignore')
Model document¶
Finished compost and dewatered, stabilized WWT solids are both suitable for land application. Once these materials are land applied, PFAS may volatize, be released to surface or ground- water, or sorbed to the soil/waste stream mixture. The flow of PFAS from land application is modeled using a liquid-solid partition coefficient normalized to the amount of organic carbon, combined with a water balance to track the flow of PFAS from the soil. 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 volatilizes. It is further assumed that the land applied material is well mixed with the top layer of soil (thickness is a user input). 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 PFAS runs off or is leached to the groundwater (i.e., it is assumed that annual precipitation is uniform throughout the year and continuously removes PFAS from the mixture). The user enters a run-off coefficient based on the soil type, land use, grade, and vegetation. The run-off is assumed to be released to surface water. Another fraction of the precipitation is removed via evapotranspiration (ET) based on the local climate and vegetation. The remaining precipitation is assumed to leach into groundwater. The PFAS remaining in the soil may be taken up by and bioaccumulate in plants. While PFAS uptake by plants was not modeled in this initial version of the SAT, it may be an important PFAS fate pathway as plants may enter the food chain depending on what is grown.
Assumptions and Limitations:¶
The organic carbon-normalized partition coefficient assumes that the organic carbon in the soil has the same PFAS sorption capacity as the organic carbon in either the compost or the dewatered, stabilized WWT solids in the land applied material.
The water balance model is averaged over a year and ignores potential effects from intense rains that may lead to substantial additional erosion and loss of solids and associated PFAS.
Apart from precipitation, the water balance does not consider other external water inputs such as irrigation. This could be included by adjusting the precipitation input value.
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 model to account for changes in the organic C content of over time as land-applied materials decompose, and to account for episodic precipitation events.
The loading rate for the land application of dewatered WWT solids will vary based on solids properties among other factors. The loading rate default values given here reflect a typical annual loading rate for application to agricultural land growing corn.
Input Parameters for Land Application model¶
[2]:
LandApp = pspd.LandApp()
LandApp.InputData.Data[['Category','Dictonary_Name','Parameter Name', 'Parameter Description', 'amount', 'unit','minimum','maximum','Reference']]
[2]:
Category | Dictonary_Name | Parameter Name | Parameter Description | amount | unit | minimum | maximum | Reference | |
---|---|---|---|---|---|---|---|---|---|
0 | Log partition coefficient | LogPartCoef | PFOA | PFOA Log Koc (soils/sediments) | 2.190 | log L/kg OC | 1.300 | 4.500 | [2,3,4,5] |
1 | Log partition coefficient | LogPartCoef | PFOS | PFOS Log Koc (soils/sediments) | 3.040 | log L/kg OC | 2.400 | 4.700 | [2,3,4,5] |
2 | Log partition coefficient | LogPartCoef | PFBA | PFBA Log Koc (soils/sediments) | 1.880 | log L/kg OC | 1.300 | 1.880 | [2,3,4,5] |
3 | Log partition coefficient | LogPartCoef | PFPeA | PFPeA Log Koc (soils/sediments) | 1.370 | log L/kg OC | NaN | NaN | [2,3,4,5] |
4 | Log partition coefficient | LogPartCoef | PFHxA | PFHxA Log Koc (soils/sediments) | 1.770 | log L/kg OC | 1.310 | 2.100 | [2,3,4,5] |
5 | Log partition coefficient | LogPartCoef | PFHpA | PFHpA Log Koc (soils/sediments) | 1.970 | log L/kg OC | NaN | 2.190 | [2,3,4,5] |
6 | Log partition coefficient | LogPartCoef | PFNA | PFNA Log Koc (soils/sediments) | 2.630 | log L/kg OC | 2.300 | 3.180 | [2,3,4,5] |
7 | Log partition coefficient | LogPartCoef | PFDA | PFDA Log Koc (soils/sediments) | 3.240 | log L/kg OC | 2.650 | 3.780 | [2,3,4,5] |
8 | Log partition coefficient | LogPartCoef | PFBS | PFBS Log Koc (soils/sediments) | 1.510 | log L/kg OC | NaN | 1.790 | [2,3,4,5] |
9 | Log partition coefficient | LogPartCoef | PFHxS | PFHxS Log Koc (soils/sediments) | 2.790 | log L/kg OC | 2.050 | 2.875 | [2,3,4,5] |
10 | Land application | LandApp | appl_dens | kg dry applied per area | 2.000 | kg TS/m2 | 0.800 | 18.000 | [7] |
11 | Land application | LandApp | depth_mix | Depth of soil mixed | 0.100 | m | 0.050 | 0.200 | [8] |
12 | Soil Properties | SoilProp | bulk_dens | Soil bulk density - wet | 1300.000 | kg/m3 | 1100.000 | 1800.000 | [9] |
13 | Soil Properties | SoilProp | ts_cont | Soil total solids content -wet | 0.850 | kg TS/kg | 0.700 | 1.000 | [10] |
14 | Soil Properties | SoilProp | C_cont | Soil organic C content -dry | 0.015 | fraction TS | 0.005 | 0.050 | [9] |
15 | Precipitation Data | Precip | ann_precip | Annual precipitation | 1.000 | m/yr | NaN | NaN | [11] |
16 | Precipitation Data | Precip | frac_runoff | Run-off fraction of precipitation | 0.050 | frac | NaN | NaN | [12] |
17 | Precipitation Data | Precip | frac_ET | Evapotranspiration fraction of precipitation | 0.500 | frac | 0.033 | 1.000 | [13] |
18 | Volatilization | Volatilization | frac_vol_loss | Fraction of PFAS lost to volatilization | 0.000 | fraction | NaN | NaN |
Incoming Compost to land application¶
[3]:
IncominWaste = pspd.IncomFlow()
IncominWaste.set_flow('Compost', 1000)
IncominWaste.calc()
Compost = IncominWaste.Inc_flow
Compost.report()
[3]:
Parameter | Unit | Amount | |
---|---|---|---|
0 | Mass flow | kg | 1000 |
1 | Solids flow | kg | 600.0 |
2 | Moisture flow | kg | 400.0 |
3 | VS flow | kg | 360.0 |
4 | Carbon flow | kg | 168.0 |
5 | PFOA | μg | 5240.0 |
6 | PFOS | μg | 7375.0 |
7 | PFBA | μg | 3267.0 |
8 | PFPeA | μg | 3424.0 |
9 | PFHxA | μg | 16407.0 |
10 | PFHpA | μg | 826.0 |
11 | PFNA | μg | 1045.0 |
12 | PFDA | μg | 2710.0 |
13 | PFBS | μg | 7360.0 |
14 | PFHxS | μg | 190.0 |
PFAS balance in land application¶
[4]:
LandApp.calc(Inc_flow=Compost)
LandApp.report(normalized=True)
[4]:
Volatilized | Remaining in Soil | Leachate | Runoff | |
---|---|---|---|---|
PFOA | 0.0 | 25.35 | 67.19 | 7.47 |
PFOS | 0.0 | 81.56 | 16.60 | 1.84 |
PFBA | 0.0 | 7.10 | 83.61 | 9.29 |
PFPeA | 0.0 | 0.10 | 89.91 | 9.99 |
PFHxA | 0.0 | 3.68 | 86.69 | 9.63 |
PFHpA | 0.0 | 11.14 | 79.98 | 8.89 |
PFNA | 0.0 | 59.62 | 36.34 | 4.04 |
PFDA | 0.0 | 87.89 | 10.90 | 1.21 |
PFBS | 0.0 | 0.45 | 89.59 | 9.95 |
PFHxS | 0.0 | 69.75 | 27.22 | 3.02 |
[5]:
LandApp.plot_sankey()

[6]:
LandApp.plot_sankey_report(margin=0.5)
