Source code for hestia_earth.calculation.emissions.co2ToAirLimeAndUreaIpcc2006

from hestia_earth.calculation.abstract_model import Model
from hestia_earth.utils.api import download_hestia
from hestia_earth.calculation.utils import summation
from hestia_earth.calculation.data.constants.generic import ATOMIC_WEIGHT_CONVERSIONS

MODEL_KEY = 'co2ToAirLimeAndUreaIpcc2006'


[docs]class CO2ToAirLimeAndUreaIpcc2006(Model): def __init__(self): # Define model tier self.tier = 1 self.term = download_hestia(MODEL_KEY) # Define model requirements self.total_lime = None self.total_dolomiticLime = None self.ureaAsN = None self.ureaAmmoniumNitrateAsN = None self.ureaAmmoniumSulphateAsN = None # Instantiate variables self.co2ToAirLimeHydrolysis = None self.co2ToAirUreaHydrolysis = None # Define model coeffients self.co2c_co2 = ATOMIC_WEIGHT_CONVERSIONS['Conv_Mol_CO2C_CO2'] self.co2_lime_factor = 0.12 self.co2_dolomite_factor = 0.13 self.co2_urea_factor = ATOMIC_WEIGHT_CONVERSIONS['Conv_Mol_CO2C_CO2'] * 12.012 / (14.007 * 2) self.conv_fert_UAN_Urea = 0.5 self.conv_fert_UAS_Urea = 0.8 def calculate_co2ToAirLimeHydrolysis(self): # Calculate CO2 emissions self.co2ToAirLimeHydrolysis = self.total_lime * self.co2_lime_factor * self.co2c_co2 + \ self.total_dolomiticLime * self.co2_dolomite_factor * self.co2c_co2 return self.co2ToAirLimeHydrolysis def calculate_co2ToAirUreaHydrolysis(self): # Calculate CO2 emissions self.co2ToAirUreaHydrolysis = (self.ureaAsN + self.ureaAmmoniumSulphateAsN * self.conv_fert_UAS_Urea + self.ureaAmmoniumNitrateAsN * self.conv_fert_UAN_Urea) *\ self.co2_urea_factor return self.co2ToAirUreaHydrolysis def complete(self, completeness): self.total_lime = 0 if self.total_lime == {} and completeness['soilAmendments'] else self.total_lime self.total_dolomiticLime = 0 if self.total_dolomiticLime == {} and completeness['soilAmendments'] else\ self.total_dolomiticLime self.ureaAsN = 0 if self.ureaAsN == {} and completeness['fertilizer'] else self.ureaAsN self.ureaAmmoniumNitrateAsN = 0 if self.ureaAmmoniumNitrateAsN == {} and completeness['fertilizer'] else\ self.ureaAmmoniumNitrateAsN self.ureaAmmoniumSulphateAsN = 0 if self.ureaAmmoniumSulphateAsN == {} and completeness['fertilizer'] else\ self.ureaAmmoniumSulphateAsN def check_co2ToAirLimeHydrolysis(self, cycle): # Get inputs inputs = cycle['inputs'].evalues() soilAmends = [input for input in inputs if input['term']['termType'] == "soilAmendment"] self.total_lime = summation([sum(input['value']) for input in soilAmends if input['term']['@id'] == "lime" or input['term']['@id'] == "aragonite" or input['term']['@id'] == "agriculturalLimestone" or input['term']['@id'] == "hydratedLime" or input['term']['@id'] == "burntLime"]) # Calculate total dolomitelime input self.total_dolomiticLime = summation([sum(input['value'])for input in soilAmends if input['term']['@id'] == "dolomiticLime"]) self.complete(cycle['dataCompleteness']) return self.total_lime != {} and self.total_dolomiticLime != {} def check_co2ToAirUreaHydrolysis(self, cycle): # Get inputs inputs = cycle['inputs'].evalues() self.ureaAsN = summation([sum(input['value']) for input in inputs if input['term']['termType'] == "inorganicFertilizer" and input['term']['@id'] == "ureaAsN"]) self.ureaAmmoniumNitrateAsN = summation([sum(input['value']) for input in inputs if input['term']['termType'] == "inorganicFertilizer" and input['term']['@id'] == "ureaAmmoniumNitrateAsN"]) self.ureaAmmoniumSulphateAsN = summation([sum(input['value']) for input in inputs if input['term']['termType'] == "inorganicFertilizer" and input['term']['@id'] == "ureaAmmoniumSulphateAsN"]) self.complete(cycle['dataCompleteness']) return self.ureaAsN != {} and self.ureaAmmoniumNitrateAsN != {} and self.ureaAmmoniumSulphateAsN != {}