$Title examples of operationalizing carbon pricing in a ge

$ontext

This model implements alternative methods for pricing carbon:
	-An excise tax on the fuel (gasoline) based on the 
	carbon coefficient.
	-An emissions allowance input which is modeled 
	in a Leontief nest with the fuel.

We see that the formulations are identical and we never see
increases in emissions when we properly calibrate the cost
function (reference price of allowances at the benchmark 
should be an order below the solution accuracy/tolerance).  

Misconception 1: CGE models operate on $s not real quantities
	We calibrate the model to $4.00 per gallon gasoline,
	with an input quantity in the X sector of 5 gallons.

Misconception 2: MPSGE does not handle excise tax formulations 
	of carbon pricing.

Misconception 3: CGE models indicate emissions increases for 
	low carbon prices when we use Leontief allowances
	to track carbon inputs when the cost functions
	are properly calibrated.

$offtext


Set i different carbon prices per ton 
	/bmk,"0.0001","0.001","0.01","0.1", 
	 1, 10, 100/;

Parameter 
	mu	"carbon coefficient (tCO2 per gallon of gasoline)",
	bmkemit  benchmark emissions (gallons times mu);

*	19.4 pounds of CO2 per gallon of Gasoline combustion
*	1 metric ton = 2205 lbs.
*	conversion tCO2/gallon =tCO2/lbCO2	* lbCO2/gallon 
*			        1/2205		* 19.4;

mu = 1/2205 * 19.4;
bmkemit = 5*mu;

*Logical switches to control the method for introducing 
*	carbon pricing

Parameter
	excise Excise tax on Gasoline,
	leo   Leontief carbon allowance calibrated to low reference price;

excise=yes;leo=no;

Parameter 
	PCO2	exogenous policy instrument;

PCO2 = 0;

$ontext
$Model:emit

$Sectors:
	X !sector with emissions
	F !fuel production
	U !Utility index
	EMIS$leo ! Emissions

$Commodities:
	P		! true cost of living index
	PX		! price of output
	PL		! wage index
	PR		! price of resourse 
	PFUEL		! price of gasoline
	PCARB$leo	! price of carbon allowance
	PCARBE$leo	! price on allowance endowment

$Consumers:
	ra 

$Auxiliary:
	CO2tax$excise	! Tax instrument
	CLIM$leo	! Rationing instrument on allowances

$prod:X s:0.5 oil:0
	o:px	q:100
	i:pl	q:80
	i:pfuel		q:5	 p:4    oil: a:RA n:CO2tax$excise
	i:PCARB$leo	q:(5*mu) p:1e-6 oil:

$constraint:CO2tax$excise
	CO2tax*PFUEL =e= pco2*mu*PL;

$constraint:CLIM$leo
	pco2*PL-PCARB =e= 0;

$prod:EMIS$leo
	o:PCARB		q:1
	i:PCARBE	q:1
	i:pl		q:(1e-6)

$prod:F s:0.9
	o:pfuel	q:1
	i:pl	q:2
	i:pr	q:2

$prod:U s:1.5
	o:p	q:200
	i:pl	q:100
	i:px	q:100

$demand:RA
	d:p
	e:pl	 q:190
	e:pr	 q:10
	e:PCARBE$leo q:(5*mu) R:CLIM


$offtext
$sysinclude mpsgeset emit

*These defaults are not one so we have to set the level
*	The price of gasoline is $4/gallon and the 
*	economy uses 5 gallons.
pfuel.l = 4;
F.l = 5;

*Numeraire
pl.fx = 1;

emit.iterlim=0;
$include emit.gen
Solve emit using mcp;


*Test the benchmark with a nonbinding cap
excise = no;leo = yes;
PCARB.l = 0;
PCARBE.l = 0;
EMIS.l = 5*mu;
CLIM.l = 1;

emit.iterlim=0;
$include emit.gen
Solve emit using mcp;

excise = yes;leo = no;

Parameter rpt(*,*,*) "Reports (row is exogenous carbon price)";

$onechov >report.gms
rpt("%2","%1","Fuel_g") = F.l;
rpt("%2","%1","Pfuel_$/gal")=Pfuel.l; 
rpt("%2","%1","emit_lbs")=F.l*mu*2205;
rpt("%2","%1","pctD_emit")=100*(F.l*mu/(5*mu) -1); 
$offecho

$set cat extax
$set scn bmk
$batinclude report %scn% %cat% 


*----------
$set scn 0.0001
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

$set scn 0.001
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

$set scn 0.01
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

$set scn 0.1
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

$set scn 1
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

$set scn 10
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

$set scn 100
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

*----------------
$set cat leo
$set scn bmk
excise = no;leo = yes;

PCO2=0;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

*----------
$set scn 0.0001
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

$set scn 0.001
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

$set scn 0.01
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

$set scn 0.1
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

$set scn 1
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

$set scn 10
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

$set scn 100
PCO2 = %scn%;
emit.iterlim=1000;
$include emit.gen
Solve emit using mcp;
$batinclude report %scn% %cat% 

display rpt;