gcam-core icon indicating copy to clipboard operation
gcam-core copied to clipboard

What is the functional form of generic waste biomass in the model?

Open wangyingying1227 opened this issue 3 years ago • 2 comments

What is the functional form of generic waste biomass in the model?

wangyingying1227 avatar Sep 12 '22 01:09 wangyingying1227

The formula for the annual production (EJ/yr) as a function of the price (1975$/GJ) of biomass which is a smooth-renewable-subresource is AnnualProduction = maxSubResource * (Price^CurveExponent / (MidPrice^CurveExponent + Price^CurveExponent)) Note that the mid-price can be reduced by the techChange parameter (looks like it's zero by default) and the supply calculated from that formula is increased by the gdpSupplyElast, which is the ratio of the GDP in the given period to the baseGDP, raised to the exogenous gdpSupplyElast exponent. Note that the biomass market consists of the sum of generic waste biomass, residue biomass from agriculture and forestry, and in future periods purpose-grown biomass. All three markets share a price but the contributions from each source need to be queried separately.

pkyle avatar Sep 12 '22 06:09 pkyle

Thank you for your reply! I have other questions to ask: Price-elasticity is percent change in output / percent change in price. Is it possible that gdpSupplyElast is percent change in generic waste biomass production / percent change in GDP? Is CurveExponent exogenous data? How is it calculated? It seems that the AnnualProduction of generic waste biomass needs to be multiplied by gpdSupplyExpansion, and the contents of gpdSupplyExpansion are as follows. How is gpdSupplyExpansion written in functional form?

double gpdSupplyExpansion = std::pow( aGDP->getApproxGDP( aPeriod ) / aGDP->getApproxGDP( 0 ),
                                     mGdpSupplyElasticity );

// now convert to absolute value of production
double annualProd = fractionAvailable * mMaxAnnualSubResource[aPeriod] * gpdSupplyExpansion;
if( annualProd < util::getSmallNumber() ) {
    // the curve can be extremely flat close to zero
    // so instead we will cut off production at getSmallNumber
    // which has also be used in getLowestPrice so that in
    // conjunction we can let the solver effectively ignore
    // supply/demand mismatch below this value
    annualProd = 0.0;
}
mAnnualProd[ aPeriod ] = annualProd;

currTech->production( aRegionName, aResourceName, mAnnualProd[ aPeriod ], 1.0, aGDP, aPeriod );

wangyingying1227 avatar Sep 12 '22 07:09 wangyingying1227