JGCRI / gcam-core

GCAM -- The Global Change Analysis Model
http://jgcri.github.io/gcam-doc/
Other
263 stars 159 forks source link

Oil refining inputs: non-energy-use-capture-component #365

Closed dobrien13 closed 6 months ago

dobrien13 commented 6 months ago

Good afternoon team,

I've been thinking through CCS implementation in the GCAM oil refining subsector. In order to determine the capture rate, I was considering the energy inputs (GJ input per GJ refined liquids): electricity (0.005), gas (0.02), and oil (1.06). Given oil's input/output ratio is much higher than the other two, I guessed that part of the input is used as the feedstock being refined.

If this is the case, I guessed that I would see a non-energy-use-capture-component applied to denote a share of the carbon content not being emitted as CO2, but don't see this tag in the refining XML. Could you advise if I'm making a mistake here / if the primary oil being refined is not actually captured by that energy input / some other reason? Thanks so much for your input.

pkyle commented 6 months ago

The input-output coefficients and carbon densities of each fuel in the generic oil refining technology can be interpreted as follows: 1.06 19.6 + 0.02 14.2 + 0.005 0 - 1 19.6 = 1.46 kgC/GJ = 5.35 kg CO2/GJ It's a pretty simple representation of the oil refining production technology, abstracted from all of the specific transformations of energy that take place at oil refineries. One could absolutely define a similar technology that captures this 5.35 kg of CO2 per GJ of fuels produced. You'd just assign a capture fraction (i.e., what portion of this emissions stream is captured) and ideally also increase the non-energy cost and input-output coefficients, particularly electricity, to reflect the additional costs and energy requirements of CO2 capture and compression. There should not be any "non-energy-use-capture-component" here because oil refineries by definition are producing commodities considered as energy commodities, even if their downstream uses end up being non-energy. In other words the decision to use the outputs of petroleum refining for non-energy purposes is made downstream of the oil refineries. In GCAM, non-energy carbon sequestration refers to the use of petroleum products for non-energy purposes wherein the carbon in the fuel is not emitted as CO2. An example is asphalt/bitumen for road construction. At the refinery gate it's considered an energy commodity, and it has a combustible energy content, but as an input to the construction industry it's considered a feedstock (non-energy) and assigned a non-energy sequestration fraction.

dobrien13 commented 6 months ago

Thanks for the feedback, @pkyle . This all makes sense, I didn't think to account for the energy output in that equation.

One follow-up: I've added a new tech, "oil refining CCS," and have been attempting to require a share of oil refining output in a region to come from CCS tech, either by a RES or subsidy like I do with other sectors & techs. The model is having particular difficulty solving. It doesn't appear simply economic, as I tried keeping the non-energy input cost on par with standard oil refining as a test and had the same result. I've been sure to turn global & regional shareweights on where appropriate. In earlier years with RES/subsidy policies requiring smaller amounts of CCS, "carbon-storage" markets often fail (esp in Japan, Middle East) and the policies fail with supply ~= 0. In later years with higher shares of CCS required, many markets fail, economy-wide. Do you have any ideas as to what I might be missing here? (example input XML attached as .txt)

Thank you again for your feedback. en_transformation.txt

pkyle commented 6 months ago

If the CO2 price of some region/time period is zero then by default the cost of any technology that captures CO2 will be very high. It's from this block of code:

    // If there is no carbon market, return a large number to disable the
    // capture technology.
    if( carbonMarketPrice == Marketplace::NO_MARKET_PRICE || carbonMarketPrice == 0.0 ){
        return util::getLargeNumber();
    }

Where getLargeNumber() returns 1e6. If this behavior is not desired (i.e., CCS tech share of zero when CO2 price is zero), then you could either comment out that code and re-compile the executable, or you could run with a small CO2 price, e.g. $1/tC, that wouldn't trigger that cost adder to CCS technologies but that also wouldn't seriously impact the modeled decisions in most sectors.

dobrien13 commented 6 months ago

That explains it; thanks for all your help. Happy holidays!