#!/usr/bin/env python # coding: utf-8 # #

Visualization of CDIAC-Data on global CO2 Emissions

# # # #

This notebook is intended to visualize the data on global CO2 emissions from the "carbon dioxide information and analysis center" (CDIAC) over the last centuries. It is inspired mainly as a means to scrutinize the claims given in the positional white paper on animal agriculture and climate change by Stanford alumni Dr. Sailesh Rao. Therein he claims, that the share of emissions caused by animal agriculture amounts to 87% of all anthropogenic green house gas (GHG) as a lower bound, blaming the IPCC reports of being imprecise and full of error. While 87% is a sheer unbelievably high amount on the one side, he makes some excellent points in his paper. Honoring, the royal societies' motto "Nullius in verba" (Latin for 'Take nobody's word for it') I wanted to check the presented data myself.

# # # #

This python notebook is intended to check in particular his points on opportunity cost through land use and the way to reverse climate change by restoration of natural habitats, in areas which are nowadays mostly used to grow animal feed. I will recreate the data visualized in figures 2.3 and 2.4 in the white paper based on the given sources. The text in this notebook can be followed without reading Dr Rao's paper. However, I would strongly recommend reading it. In the notebook, I will also try to describe briefly what the shown code does, as not every reader can be expected to understand the python programming language.

# # # #

The following python code is used to call the data from the cited sources and do the necessary processing to visualize it using the Plotly module. Thereby, presenting the code in this jupyter notebook also serves as means of transparency and traceability.

# # #

Preparation and loading of data from web sources

# # # #

First we import necessary modules for loading, processing and displaying the data. The Pandas module comes in very handy as a “fast, powerful, flexible and easy to use open-source data analysis and [processing] tool". It has almost everything built in that we need. Plotly is a graphing library intended for web-grade data visualization, with a mouse-over readout function.

# # In[1]: import pandas as pd import plotly.io as pio import plotly.graph_objects as go from plotly.subplots import make_subplots import urllib import numpy as np import ssl from scipy.interpolate import UnivariateSpline pd.options.plotting.backend = "plotly" ssl._create_default_https_context = ssl._create_unverified_context # needed for ssl connections # #

I'll call the data directly from the online sources given in the following URLs by CDIAC. CDIAC is a governmental data archive on the issue of climate change by the US government. The data is currently being transitioned to U.S. Department of Energy’s (DOE) Environmental System Science, but for the time being the data can be collected from CDIAC.

# # # #

The URL below is taken from the hyperlink to the "Latest Published Global Estimates" on this page. An inspection of the file header (the first 37 lines of the file from the URL printed below) is useful to examine the data structure and units of the data acquisition. Credit is due to the authors cited in the text file.

# # In[2]: url_fossils = "https://cdiac.ess-dive.lbl.gov/ftp/ndp030/global.1751_2014.ems" # In[3]: # print header i.e. first couple lines of txt file with some data fossil_rawfile = urllib.request.urlopen(url_fossils) txt_lines = fossil_rawfile.readlines() for line in zip(range(37),txt_lines): print(line[1][:-1].decode('utf-8')) # The header of the land use data can be inspected in the same manner. More information on the methods of assessment of the data can be found in the original article by Houghten et al. in the Wiley Online Library. # In[4]: url_landuse = "https://cdiac.ess-dive.lbl.gov/trends/landuse/houghton/Global_land-use_flux-1850_2005.xls" # In[5]: # print header i.e. first couple lines of txt file with some data fossil_rawfile = urllib.request.urlopen("https://cdiac.ess-dive.lbl.gov/trends/landuse/houghton/1850-2005.txt") txt_lines = fossil_rawfile.readlines() for line in zip(range(25),txt_lines): print(line[1][:-1].decode('utf-8')) # Teragrams ($10^{12}$ grams) and a million metric tons amount to the same mass of carbon. The terms "positive carbon flux to the atmosphere" and "carbon emissions" both describe the yearly addition of carbon atoms to the atmosphere. Note that we can also simply multiply the data by a factor of 3.667 to obtain the units of CO2 as stated in the header from the first file. A CO2 molecule has 3.667 times the mass of a carbon atom. # ## Import # The following cells import the data into two pandas dataframes, which we can use as objects for data handling. # In[6]: # import data in million metric tonnes carbon per Year carbon_fossil_emissions = pd.read_csv(url_fossils, skiprows=33, sep='\s+', index_col=0) # In[7]: # data: 10^12 g is million metric tonnes carbon per year carbonflux_from_landuse = pd.read_excel(url_landuse, sheet_name='net fluxes', index_col='Year') # #

Inspection

# # # #

It is helpful to inspect the imported data frames, which can be done by calling it with the .head() or .tail() methods, to show either the beginning or the end of the frame. This is particularly handy for large data sets.

# # In[8]: carbon_fossil_emissions.tail() # When skipping the first 33 lines during the pandas import, it did cut off part of the columns names. The full column names will be reinstated with a dictionary to replace the column names above with the key values from a dictionary, like so: # In[9]: # better readabillity for labels in plots, also fix broken labels from truncated txt-file coldict={'Production':'Cement', 'Solids':'Coal', 'Liquids': 'Oil', 'Total': 'Fossil total'} carbon_fossil_emissions.rename(columns=coldict, inplace=True) # In[11]: carbon_fossil_emissions.tail() # #

I took the liberty to rename 'Solids' to 'Coal' and 'Liquids' to 'Oil', which is what they essentially are.

# # # #

Let's also inspect the data frame on CO2 flux from land use:

# # In[12]: carbonflux_from_landuse.head() # In[13]: carbonflux_from_landuse.tail() # #

It is noteworthy that at the beginning of our century the US, Europe and China sequestered more carbon by land use than they emitted by land use. This means that woods and nature are seemingly growing more than they are cut down. This is of course a welcome fact, but the 12 and 32 million tons of sequestration per year can hardly compensate the output of billion tons of fossil carbon.

# # # #

In the other hand, we can see that areas like south and Central America, tropical Africa or south-east Asia, which are largely considered as regions of great biodiversity and sequestration potential, are considered falsely so. Together, they emit more than 1.5 billion tons of carbon per year. This is due to political reasons and the effects of globalization in agriculture. European and American cattle farmers buy animal feed like soy and oil palm seeds, largely from South America and the other aforementioned regions. They in turn cut down their natural habitats in order to grow monocultures and meet the demand for animal feed. Research calls this externalized carbon cost, which can be attributed to products like meat and dairy products.

# # #

Processing

# # # #

Much processing of the data in the databases is not required. To get from tons of carbon to tons of CO2 there is just a factor of 3.667 as stated above. Dividing by 1000 converts the entries from a million tons to a billion tons. This is of advantage, especially when emissions are cumulated over time.

# # In[14]: co2flux_from_landuse = carbonflux_from_landuse.applymap(lambda x: x * 3.667 * 1e-3) co2_fossil_emissions = carbon_fossil_emissions.applymap(lambda x: x * 3.667 * 1e-3) # I'll use linear extrapolation to fill the gap with the missing emissions from land use from 2006 to 2014, so that data on land use and fossil emission cover the same time frame. Admittedly this is not real data, but it's a fair assumption that land use for animal feed increased between 2006 and 2014 when demand for meat was also increasing. For correct numbers, new research data is required, which is currently not available to my knowledge. # In[15]: #linear extrapolation (trend) of co2 flux from land use for 2006 to 2014 co2flux_from_landuse_expl_fnc = UnivariateSpline(co2flux_from_landuse['Global'].index, co2flux_from_landuse['Global'].values, k=1, ext='extrapolate') co2flux_from_landuse_expl = co2flux_from_landuse.reindex(np.arange(1850,2015)) co2flux_from_landuse_expl.loc[2006:2014,'Global'] = co2flux_from_landuse_expl_fnc(np.arange(2006,2015)) # In[16]: co2flux_from_landuse_expl.tail() # A distinction between gas and flaring gas is of no particular interest for a comparison of fossil and non-fossil atmospheric carbon sources. I'll just add them up to total gas. # In[17]: # sum gas and flaring gas emissions to total gas co2_fossil_emissions['Gas'] = co2_fossil_emissions['Gas'] + co2_fossil_emissions['Flaring'] # drop unneeded columns co2_fossil_emissions.drop(columns=['Capita', 'Flaring'],inplace=True) # For ease of use, I'll combine the two databases into one. co2_emissions will hold the global emissions, where each column shows the emissions of CO2 in a billion metric tons per year, with regard to the various carbon sources. Also, for the total global emissions, I will include the emissions by land use, so we have to add the global CO2 flux from land use to the fossil total in order to gain the total including land use. # In[18]: # joint dataframe for fossil and landuse data co2_emissions = co2_fossil_emissions.copy() co2_emissions['Land use'] = co2flux_from_landuse_expl['Global'] # just the gobal data is relevant for comparison co2_emissions['Total'] = co2_fossil_emissions['Fossil total'] + co2flux_from_landuse_expl['Global'] # In[19]: co2_emissions = co2_emissions[['Gas', 'Oil', 'Coal', 'Cement', 'Fossil total', 'Land use', 'Total']] # A quick view to the years 2001 to 2014 shows: # In[20]: co2_emissions.loc[2001:2014] # #

Approximately 35 billion tons of total emissions including land use in 2005 is in line with the data we have from the IPCC. If we subtract land use, we get about 30 gigatons (= billion tons), which is what is reported by other sources by Friedlingstein et al. In 2020 emissions amounted to 36 gigatons from fossils according to the IPCC, so worldwide emissions are still increasing, in spite of the Parisian climate accords.

# # # #

Looking at the data above again, note in 2005 we emitted worldwide double the amount of CO2 from coal or gas than we emitted from land use or gas. This is particularly noteworthy if we look at the cumulated shares later.

# # #

Accumulation of CO2 in the atmosphere

# # # #

Instead of asking how much anthropogenic CO2 we put into the atmosphere yearly, we should ask, how much of the CO2 ends up staying there due to the various sources, as lingering CO2 is what causes global warming. In other words: In order to reduce emissions, which source would be the most effective to focus to cut down on. Two facts are important: First, roughly 65% of all the airborne CO2 gets sequestered by surface-plants, algae (e.g. diatoms), coral and the micro-biome living in the soil each year. That means only 45% of the CO2 let into the atmosphere stays there. This is called the airborne fraction of CO2. Secondly, non-sequestered stays in the atmosphere basically forever. Energetically, CO2 is a very stable molecule, which gets hardly altered except through the use of external energy. Remember, that we already subtracted 65% that are sequestered by means of the sun's energy and photosynthesis. Also, CO2 has a relatively high mass, so that dissipation into open space in the upper atmosphere is negligible.

# # # #

In consequence, to gain an estimate for the anthropogenic CO2 in the atmosphere, we just have to sum the emissions for each of the sources and multiply by 0.45.

# # In[21]: co2_cumulated_emissions = co2_emissions.cumsum() co2_atmospheric_remainder = co2_cumulated_emissions.applymap(lambda x: x * 0.45) # In[22]: co2_atmospheric_remainder.loc[2001:2011] # The following code plots the data from the data frame object directly, using plotly's syntax to get a better picture. Beginning with the yearly emissions over time with parameterized sources: # In[23]: fig1 = co2_emissions.plot(labels=dict(index="Year", value="CO2-Emission [Billion Tons per Year]", variable="Source"), template='none') fig1.update_xaxes(range=[1750, 2020]); fig1.update_layout( font=dict(size=14), legend=dict( yanchor="top", y=0.95, xanchor="left", x=0.05, title='Source:' ), template='plotly_dark'); fig1.show() # In[24]: fig1.write_image("co2_emissions_per_sources.png") # #

You can mouse-hover each of the plotted curves and read the respective values and labels from a context box.
In this representation, it looks as if land use were not playing a big role, being only a fraction of the emissions from coal alone. However, as we can see from the plot, historical emissions from land use have been much higher than emissions from fossil sources before 1900. This will play a role when summing up emissions to gain the airborne fraction of CO2, as described above.

# # # #

NaN-Values from the data frames are not plotted. Hence, the traces for 'total' and 'land use' only begin in the year 1850, because there is no earlier data available. Of course, emissions from land use took place before 1850. They even took place long before 1750 since the onset of agricultural revolution. There is just no data for that available in the data set. We'll have to keep this in mind, especially for the final assessment, when we look at cumulated or airborne CO2 fractions due to sources as indicated above. There will be a larger-than-100-years time frame in which actual emissions from land use will not get weighed in, unless we extrapolate the above data for years before 1850. However, without additional knowledge, such an extrapolation for will not be well-founded in evidence. The curve could have any shape, what we don't know about.

# # # #

Before I'll carry out the accumulation, I'll try to create another representation of the data from fig1, that has more semblance with the plot presented in Dr. Rao's white paper in figure 2.3, just to illustrate we are really looking at the same data. This so-called area plot can be created and visualized as follows:

# # In[25]: new_cols = ['Land use', 'Coal', 'Oil', 'Gas', 'Cement'] co2_emissions_sorted = co2_emissions[new_cols] #new DF with colums in order of new_cols # sum along colums axis to get total emissions per year co2_emissions_sorted_sum = co2_emissions_sorted.cumsum(axis=1) co2_emissions_sorted_sum.dropna(inplace=True) # In[26]: fig2 = go.Figure() last_col = None cols = co2_emissions_sorted_sum.columns for col in cols: if last_col is None: cursor_value = co2_emissions_sorted_sum[col] else: cursor_value = co2_emissions_sorted_sum[col] - co2_emissions_sorted_sum[last_col] fig2.add_trace(go.Scatter(x = co2_emissions_sorted_sum.index.values, y = co2_emissions_sorted_sum[col], fill='tonexty', mode= 'none', name=col, text=cursor_value, hovertemplate = '%{x}: %{text:.2f} gigatons/year')) last_col = col fig2.update_xaxes(title='Year'); fig2.update_yaxes(title='CO2 emission [billion tons per year] '); fig2.update_layout(template='none') fig2.update_layout( font=dict(size=14), legend=dict( yanchor="top", y=0.95, xanchor="left", x=0.05, title='Source:' ), template='plotly_dark' ) fig2.show() # In[27]: fig2.write_image("co2_emissions_area_plot.png") # #

A comparison of above's image to the figure 2.3 in Dr. Rao's white paper shows that they match and Dr. Raos presentation is in line with the data from CDIAC. Personally, I find this representation in an area plot quite confusing. If not familiar with this kind of plot, one might read them wrong. E.g. looking at the ordinate for the year 2000 for coal, one might think that the emission value for coal was roughly 14 billion tons, when it actually was 8.5 billion tons. The code above is written in a way, that the actual emission value per year can be read out with the mouse-cursor in a mouse-hover event on the specific coordinate. Fig2 may look more appealing graphically, yet I still prefer the representation in fig1 for clarity.

# # # #

As discussed above, the data in the data frame co2_atmospheric_remainder represents the amount of CO2 which remains in the atmosphere each year. Plotting this data set like before, we get the following representation:

# # In[28]: fig3 = co2_atmospheric_remainder.plot(labels=dict(index="Year", value="anthropogenic CO2 in atmosphere [billion tons]", variable="Source"), template='none') fig3.update_xaxes(range=[1800, 2015]); fig3.update_layout( font=dict(size=14), legend=dict( yanchor="top", y=0.95, xanchor="left", x=0.05, title='Source:' ), template='plotly_dark' ) fig3.show() # In[29]: fig2.write_image("anthropogenic_co2_in_asmosphere.png") # #

The plot from fig3 shows that the mount of CO2 in the atmosphere from land use exceeded that of all other sources up until the year 2005, and is roughly the same for the following years, according to the extrapolation. This is also in line with Dr. Rao's argumentation on figure 2.4 in his white paper.

# # # #

I consider his claims concerning the share of land use in global CO2-emissions as confirmed.
Relating the estimated atmospheric CO2 level of 257 Gt in 2005 from land use sources to the combined total of 783 Gt from fossil sources and land use reveals a share of CO2 levels from land use of 33 percent.

Again, keep in mind, that this conclusion is drawn without data for land-use emissions prior to 1850. If we were to include more data on land-use emissions from earlier, the percentage would increase. The current research indicated that the agricultural revolution began roughly 8000 years ago, while the industrialization began little over 200 years ago. This means much more time for CO2 from land use to accumulate. Hence, the 33 percent can be considered a lower bound.

# # # #

This is already much greater than the IPCC's estimation of only 18 percent, and shows the report's error. On the other hand, 33 percent is far from Dr. Rao's figure of 87 percent. This discrepancy is due to the fact, that we considered only pure CO2 emissions and remaining levels. Climate change however is also driven by other greenhouse gases like methane, which largely stem from the animal industry. Another effect is the cooling though so-called aerosols, which also arise from fossil burning. All of these effects are covered in the original white paper and are not within the scope of this notebook.

# # #

Interpretation

# # # #

According to the underlying data, historical emissions due to coal and land use amount to 250 billion tons, which is roughly one third of all anthropogenic GHGs in the atmosphere today. That means, with 160 billion tons of CO2 from oil, land-use even has a far bigger impact than all burning of oil, which includes the whole transportation sector, including airplanes.

# # # #

Again, keeping in mind, that within CDIAC's data set, the emissions from land use are not available for the years before 1850. If we were to extrapolate or raise the data on land use emissions before 1850 it could be easily argued, that land use would remain the biggest chunk of GHGs in the atmosphere even today. In fact, there is evidence that global temperatures began to rise even earlier than the industrial revolution.

# # # #

This makes a strong case for those who say that a system change in agriculture is at least equally important as a system change in the energy industry and the transportation sector, because agriculture is the main contributor to land use.

# # # #

On the other hand, we saw that yearly emissions due to coal or oil exceed the emissions from land use by a factor of two. Only by cumulating past emissions, emissions from land use became comparable to coal. We can't change what is in the past. We can only change current emissions. This leads to the assumption that we need to tackle the big current contributors like coal and oil burning first. However, this underestimates the huge potential of carbon sequestration, when reversing land use.

# # # #

Sequestration potential of natural habitats and ecosystems

# # # #

To address the climate crisis, policies are in place to reduce all net carbon flow from fossil sources to the atmosphere. However, even if fossil fuel emissions where zero, land use were still adding a whopping 5 billion tons of CO2 to the atmosphere, each year and the earth would still get warmer.

# # # #

But as Dr. Rao points out in the article, something else is even more important: Land use is the only carbon source that can actually serve as a carbon sink instead. A good estimate of its potential is currently the subject of scientific debate. Much of the debate consider ecosystems like forests or soil organic carbon in agriculture individually. If the estimates are correct, each of them alone has the potential to sequester almost all anthropogenic fossil carbon in our atmosphere.

# # # #

This article discusses that all fossil airborne carbon could be sequestered sufficiently on cropland. Sequestration rates of 0.2 to 0.5 tonnes of carbon per year and in hectare are supposedly possible, if we used less intrusive methods of agriculture (e.g. tilling) in crop lands. Calculating from these numbers, we could cancel at about 37 billion tons of CO2 emissions per year. That is already more than our current fossil emissions, just by changing the way we treat our cropland. How much more carbon could be sequestered if we left large ecosystems to themselves to restore their natural habitats and biodiversity?

# # # #

At least 80 % of all global farm land is used to raise animal feed, while animals contribute only to 13 % of calories consumed by humans. This is a clear waste of area, which could otherwise serve as natural habitat and help stabilize the natural carbon cycle. In fact, agricultural monocultures are one of the main drivers for the loss of biodiversity and towards the 6th major mass extinction.

# # # #

Concerning forests: We know from literature that currently 35 million km$^2$ and 25 million km$^2$ are used for cropland and pasture respectively, most of which have been cleared from forests. Through reports by FAO we also know that forests have a carbon sequestration potential depending on their region, ranging from 0.8 to 2.4 tons of carbon per year and hectare in boreal forests and 3.2 to 10 tons for tropical forests. Restoring 70% of that area, leaving 30% to grow food for 14 billion people (instead of 70 billion cows, pigs and poultry), the CO2 sequestration range would somewhere near 38 billion tons of CO2. Again, more than we currently emit.

# # In[30]: pasture_sqkm, cropland_sqkm = 30e6, 20e6 restored_forest_area_ha = (pasture_sqkm * 100 + cropland_sqkm * 100)* 0.7 ["{:.2f} ".format(carbon_seq_rate * restored_forest_area_ha / 1e9 * 3.667) for carbon_seq_rate in (0.8,3,10)] # #

But forests and soil are not the only means so absorb carbon. As I said, the main stabilizing element for climate is natures diversity. Proving that is well beyond that scope of a text like this. Sir David Attenborough makes some excellent points in his documentary My life on this planet. It may serve as a staring point for personal investigations for the reader.
There is also a particular example, from another series, that I like to share: It goes to show that symbiotic relationships between ecosystems can extend by thousands of miles stretching between realms: Have you heard of the stream in the clouds that's feeding the diatoms in the sea? In short: Evaporation of water from the Amazon rain forest, builds up to form clouds just at the top of the canopy, which drift west and then rain down at the Andes. There, the water washes out sediment from the mountains, runs downstream though the Amazon basin, taking up more nutrients from the tropical forest and bringing them into the sea, where they feed diatom algae. Those in turn photosynthesize carbon and produce oxygen and water. Diatoms around the globe produce 50% of all oxygen in our atmosphere.

# # # #

Diatom's carbon sequestration capability is estimated to be 100 to 250 tons CO2 per hectare per year. That amount's to 5 to 10 Gigatons of carbon sequestered only from the diatoms of the coast of Brazil. Yet we are breaking that cycle by clearing the Amazon and hindering the cloud stream from feeding the diatoms and expanding their full sequestration potential.

# # # #

In another instance salmon, when they swim upstream into the forests of the Northern Hemisphere, in their death fertilize the forests, hence carrying nutrients from the sea to the forest by means of their dead bodies. Right now, the northern territories in Canada are dying. By fishing salmon on a large scale, humans are preventing that those nutrients to reach these canadian forrests. This in turn compromises the northern woods in their capability to sequester as much carbon as they could. Unfortunately so far I've only found a German-speaking documentary on this subject.

# # # #

Those are just two anecdotal examples of the complex relations of ecosystems that happen everywhere in the world. We haven't even considered coral, phytoplankton or soil organic carbon in woodlands areas. Each of them has a huge carbon binding potential on their own, if we only left them undisturbed.

# # # #

Unfortunately almost all of them are disturbed by agriculture, our food system and the "killing machine". Estimates see yearly sequestration rates above 200 Gigatons for a world in which we stop animal killing and the exploitation of animals.

# # # #

Let's see what that means for atmospheric levels extending to years up to 2050 into the future:

# # In[31]: co2_netzero_fossil_scenario = co2_emissions.reindex(range(1751,2051)) # But renatured land and oceans and let them play out their full carbon binding potential. Let's check for various rates, say 18, 36 or 72 billion tons per year. All of them well within the ranges discussed above # ### Future Projections # In[32]: sequestrion_rate_examples = [-36,-72] # In[33]: multi_index = pd.MultiIndex.from_product([sequestrion_rate_examples,range(1751,2051)],names=['Seq_Rate_Gt_per_year', 'Year']) cols = ['Gas', 'Oil', 'Coal', 'Cement','Land use'] co2_biosphere_scenarios = pd.DataFrame(index=multi_index, columns=cols) co2_biosphere_scenarios.sort_index(level=['Seq_Rate_Gt_per_year','Year'], ascending=[1, 1], inplace=True) # In[34]: co2_netzero_fossil_scenario.loc[2015:2050,['Gas', 'Oil', 'Coal', 'Cement','Fossil total']] = 0 co2_netzero_fossil_scenario.loc[2015:2050,['Land use']] = np.reshape(co2flux_from_landuse_expl_fnc(np.arange(2015,2051)), (-1,1)) co2_netzero_fossil_scenario.loc[2015:2050,['Total']] = np.reshape(co2flux_from_landuse_expl_fnc(np.arange(2015,2051)), (-1,1)) co2_zerofossil_zerokilling_scenario = co2_emissions.reindex(range(1751,2051)) co2_zerofossil_zerokilling_scenario.loc[2015:2050,['Gas', 'Oil', 'Coal', 'Cement','Fossil total']] = 0 co2_zerofossil_zerokilling_scenario.loc[2015:2050,['Land use','Total']] = -50 co2_zerofossil_zerokilling_scenario_sum = co2_zerofossil_zerokilling_scenario.applymap(lambda x: x * 0.45).cumsum(axis=0) # Assuming we kept fossil emissions roughly at the current level... # In[35]: for seq_rate in sequestrion_rate_examples: for col in cols: co2_biosphere_scenarios.loc[(seq_rate,slice(1751,2014)), col] = co2_emissions[col].values co2_biosphere_scenarios.loc[(seq_rate,slice(2015,2050)), col] = co2_emissions.loc[2014, col] co2_biosphere_scenarios.loc[(seq_rate,slice(2015,2050)),'Land use'] = seq_rate # and calculate the new negative totals # In[36]: co2_biosphere_scenarios['Total'] = co2_biosphere_scenarios.sum(axis=1) # In[37]: co2_biosphere_scenarios_sum = co2_biosphere_scenarios.groupby(['Seq_Rate_Gt_per_year']).apply(lambda x: x.cumsum() * 0.45) # In[38]: co2_netzero_fossil_scenario_sum = co2_netzero_fossil_scenario.applymap(lambda x: x * 0.45).cumsum(axis=0) # In[39]: fig5 = go.Figure() fig5.add_trace(go.Scatter(x = co2_netzero_fossil_scenario_sum.index, y = co2_netzero_fossil_scenario_sum['Total'].values, mode = 'lines', name='1) Zero fossil burning, continued animal killing')) for seq_rate in sequestrion_rate_examples: fig5.add_trace(go.Scatter(x = co2_biosphere_scenarios_sum.index.levels[1], y = co2_biosphere_scenarios_sum.loc[(seq_rate,slice(None)),'Total'], mode= 'lines', name="2) Continued fossil burning, stopped animal killing: Sequestration rate {} Gt/a".format(seq_rate), text=cursor_value)) fig5.add_trace(go.Scatter(x = co2_zerofossil_zerokilling_scenario_sum .index, y = co2_zerofossil_zerokilling_scenario_sum ['Total'].values, mode = 'lines', name='3) Zero fossil burning, stopped animal killing')) fig5.update_xaxes(title='Year',range=(1800,2050)); fig5.update_yaxes(title='anthropogenic CO2 in atmosphere [billion tons]'); fig5.update_layout(template='none') fig5.update_layout( font=dict(size=14), legend=dict( yanchor="top", y=0.99, xanchor="left", x=0.02, title='Scenarios:' ), template='plotly_dark') fig5.show() # In[40]: fig5.write_image('anthropogenic_CO2_sequestrion_potential_sczenarios.png') # #

Scenario 1: Net Zero Fossil Emission, with Continuation of Animal Agriculture

# # # #

Fig5 depicts the estimated atmospheric CO2 levels over time for various projected scenarios. The first scenario (blue curve) is the discontinuation of fossil burning in the year 2015, while animal agriculture is assumed to continue with a yearly increase extrapolated from prior data.
As we can see, just stopping fossil emissions will significantly reduce emissions, but cannot halt it at a constant levels in spite of large efforts from industry and economy. Due to continuing emissions from land use, CO2 levels continue to rise and consequently increase average temperatures at slower rates.

# # # #

Scenario 2: Continuing Fossil Emissions, while Stopping Animal Agriculture

# # # #

In this scenario, it is assumed that fossil burning is continued at the rate of 36.1 Gt per year from 2014 until 2050. However, animal agriculture is assumed to halt as humankind transitions (within a year) to an almost exclusively plant based food production system and/or laboratory meat. As described earlier, this will lead to a restoration of large areas that are now cropland or pasture, to natural biosphere. As the estimation of sequestration rates underlies a large uncertainty, two average yearly sequestration rates of -36 and -72 Gt per year are arbitrarily chosen.

# # # #

As we can see from the orange and green curves, we have the potential not only cancel emissions to a net-zero with constant CO2 levels. We are also able to reduce CO2 levels to values we measured at the beginning of the last century. All of that is possible by just reviving natural ecosystems, even while continuing fossil emissions at current levels. This is not to say that we could or should get away with continuing fossil emissions. We should halt oil drilling and coal mining as they are responsible for large damage to our ecosystems.
The scenario shows however, that there is far more potential in battling climate change trough land use than with the current policies of net-zero fossil emissions alone (scenario 1).
In all of these scenarios we have to keep in mind, that even with an increase of average temperatures of only 1 °C that we are measuring today, the situation is already now dramatic for a lot of people in the global south. Food shortages, floods, extreme weather events etc. Even local cold snaps can be connected to global warming, as arctic air that is 20 to 40 °C to warm for the arctic but 10 °C to cold for us is pushed from the poles to medium latitudes in Northern Europe, the United States or Russia.

# # # #

So with halting emissions and keeping CO2 levels at the current levels, we can only stop things from getting even worse. Yet, we need to reverse emissions to actually improve the situation for the people in the global south. That will also be beneficial to the people in the Northern Hemisphere, as zoonotic diseases like the new coronavirus are less likely to spread or develop on a biologically diverse planet.

# # # #

The situation in the global south is part of the reason, why I get personally quite upset when politicians speak of a CO2 budget. There is no budget! A budget is something that you can spend at your own expenses. In reality, we are in a loan-type of situation with debts way over our head. And we let others pay for our personal welfare. Science calls this externalized cost.
By letting nature and biodiversity thrive, we can actually follow the green curve, improve conditions for people around the globe and pay our debt back.

# # # #

Of course, these assumed sequestration rates in this scenario rates are rather wild guesses. They were in this case deliberately chosen to showcase the discussed scenarios and the great potential of land use in battling climate change. But as pointed out in the section about natures means to sequester carbon, the order of magnitude of possible sequestration rates is well grounded in evidence. Therefore, this kind of future really is within our grasp.
In fact, our best current estimates show, that carbon is sequestered by at least 2400 gigatons each year by soil alone. That means that an increase of nature's sequestration rate by a demanded 72 gigatons per year, relates to an increase of not more than 3%. Yet, it seems to be exactly that kind of percentage by which our species is hindering the biosphere to absorb what is excessively emitted. Again, if we let the green biosphere grow and be diverse instead of cutting it down for animal feed year after year, we would quite possibly be on constant rather than rising CO2-levels.
Similar ideas have already been proposed by french minister of agriculture Stéphane Le Foll at the 2015 climate summit. It was called the 4-per-mille-initiative, as the necessary increase at that time was only 0.4%. But the initiative's goal was only cancellation (yellow curve) rather than reversal (green curve).

# # # #

Think about it: damage that has slowly been done over a 200 to 2000 year time frame could be mitigated within the next 20 to 30 years! Many of us could live to see that happen.
It's almost as with chain-smoking. Depending on the degree of damage done, a smoker's lung can be fully reverted if the smoker just stops damaging themselves day after day. The body heals itself, if we let it. In that sense, our planet behaves similarly. Provided that it's not already too late and the "cancer" has not already spread. The striking difference is, that with GHGs and ecosystems we have an actual means to take the harmful substance out of the system, while the body just accomplishes that, if we stop putting it there. This fact cannot be stressed enough!

# # # #

All of this goes to show, that the best means to tackle the climate crisis as a species is how we treat animals and use the land and the oceans.
If only we had the will to do what is right? Isn't it a striking coincidence, that the ethically right thing to do just so happens to be the same thing that can save us from living in droughts and food shortages and suffering from wars of distribution and mass migrations?

# # # #

I don't believe that needed change in agriculture will be induced by policymakers. They don't even see the problem. In the land use data we saw that Europe, the US and China showed negative emissions, while total land use emissions were positive. So these governments will consider their slate clean.
Of course, the assumption that these three did not contribute to climate change trough land use is still wrong. Due to globalization and market effects, cheep animal feed (i.e. soy or oil plants) is bought mainly from South America, by exactly those three.
But the amount of imported feed and therefor the used area is only dictated by the demand for meat and dairy products - by us! Again, externalized costs!

# # # #

The discussion so far only looked at carbon emissions, both in fossil emissions and opportunity cost from land-use. When considering what climate scientists call the radiative forcing of all GHGs including methane, the evidence, that agriculture is the main driver behind and at the same time best means to avert the climate crisis, becomes even more compelling. Dr. Rao explains this in his white paper and clearly shows with his linear sensitivity analysis, that there is scientific bias even in the international panel on climate change (IPCC). I will not go into methane sequestration mechanisms or the details on radiative forcing. However, methane is primarily caused by agriculture, which is again supported by consumer demand for animal products.

# # # #

Hence, consumers hold the true power to turn around climate change by simply rethinking or reinventing their taste. The only problem is, that everybody need to do their part. Personally, I'd rather see a vegan world than a non-vegan world. Mostly because of the evolution of my morality. But from a climate system's point-of-view, there is no black and white. If this text shows anything, then that reducing meat and animal consumption is far more effective than refraining from long-distance flights or optimizing or reducing our heating and electricity. Again, I'm not saying we shouldn't do all of this. But if the numbers laid out in Dr. Rao's paper and in this document are correct, then it might just not be enough.

# # In[ ]: