Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Penalty for secondary energy share deviation in sectors #1762

Open
wants to merge 28 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
2ab0f65
add support for penalty for secondary energy share deviation in sectors
Renato-Rodrigues Aug 1, 2024
c0d6f20
improve parameter description
Renato-Rodrigues Aug 2, 2024
016be5f
fix error
Renato-Rodrigues Aug 2, 2024
7419dea
fixing uncontrolled set
Renato-Rodrigues Aug 2, 2024
78f9be9
removing set under control
Renato-Rodrigues Aug 2, 2024
6a777e3
changing the exponential function to support negative base values
Renato-Rodrigues Aug 2, 2024
21180f3
bugfixes for testing
Renato-Rodrigues Aug 2, 2024
d435ad6
revert change
Renato-Rodrigues Aug 2, 2024
6186200
improving documentation
Renato-Rodrigues Aug 2, 2024
af62339
improving documentation
Renato-Rodrigues Aug 2, 2024
5e8ba6e
initilize share parameters to help the solver
Renato-Rodrigues Aug 3, 2024
6f8ce9f
replacing reference to deprecated toolIterativeEDGETransport
Renato-Rodrigues Aug 3, 2024
fbe2f46
apply deviation penalization to entySeBio and entySeSyn
Renato-Rodrigues Aug 3, 2024
4ca8f89
adapt se dsirtibtuion incentive to use shares calculated over seAgg i…
Renato-Rodrigues Aug 5, 2024
a74fcc9
defining secondary energy share incentives in entyfe
Renato-Rodrigues Aug 16, 2024
dc3e1aa
Merge branch 'remindmodel:develop' into seFeSectorSharePenalization
Renato-Rodrigues Aug 16, 2024
b4b9899
Merge branch 'remindmodel:develop' into seFeSectorSharePenalization
Renato-Rodrigues Aug 20, 2024
9581f80
exclude years before or equal 2020 from bio+syn incentive shares
Renato-Rodrigues Aug 20, 2024
42f8c13
change the default method toi define the se shares incentives
Renato-Rodrigues Aug 20, 2024
fc95f9e
setting cm_INCONV_PENALTY_FESwitch to off to avoid conflict with seFe…
Renato-Rodrigues Aug 20, 2024
2511c23
Merge branch 'remindmodel:develop' into seFeSectorSharePenalization
Renato-Rodrigues Aug 30, 2024
7c8b457
Merge branch 'remindmodel:develop' into seFeSectorSharePenalization
Renato-Rodrigues Sep 2, 2024
6febf16
Merge branch 'remindmodel:develop' into seFeSectorSharePenalization
Renato-Rodrigues Sep 12, 2024
2f3642f
Merge branch 'remindmodel:develop' into seFeSectorSharePenalization
Renato-Rodrigues Sep 19, 2024
72ff3b9
adding comments suggested by reviewer
Renato-Rodrigues Sep 20, 2024
b3fc126
reverting merge overwritte
Renato-Rodrigues Sep 20, 2024
a7a973b
adding comments suggested by reviewer - round 2
Renato-Rodrigues Sep 20, 2024
39c2641
additional description to consider reviewers' comments
Renato-Rodrigues Sep 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions core/declarations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,8 @@ pm_shFeCes(ttot,all_regi,all_enty,all_in,all_teEs) "Final energy shares for CE

pm_shfe_up(ttot,all_regi,all_enty,emi_sectors) "Final energy shares exogenous upper bounds per sector"
pm_shfe_lo(ttot,all_regi,all_enty,emi_sectors) "Final energy shares exogenous lower bounds per sector"
p_shSeFe(ttot,all_regi,all_enty) "Initial share of energy carrier subtype in final energy demand of the aggregated carrier type (eg 'the share of bio-based FE liquids in all FE liquids') [0..1]"
p_shSeFeSector(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "Initial share of energy carrier subtype in final energy demand of the aggregated carrier type for each sector/emiMarket combination (eg 'bio-based FE liquids share in all FE liquids within ETS transport') [0..1]"
pm_shGasLiq_fe_up(ttot,all_regi,emi_sectors) "Final energy gases plus liquids shares exogenous upper bounds per sector"
pm_shGasLiq_fe_lo(ttot,all_regi,emi_sectors) "Final energy gases plus liquids shares exogenous lower bounds per sector"

Expand Down Expand Up @@ -424,6 +426,8 @@ v_shGreenH2(ttot,all_regi) "share of green hydrogen in all hydrogen by 2030 [0
v_shBioTrans(ttot,all_regi) "Share of biofuels in transport liquids from 2025 onwards. Value between 0 and 1."

v_shfe(ttot,all_regi,all_enty,emi_sectors) "share of final energy in sector total final energy [0..1]"
v_shSeFe(ttot,all_regi,all_enty) "share of energy carrier subtype in final energy demand of the aggregated carrier type (eg 'the share of bio-based FE liquids in all FE liquids') [0..1]"
v_shSeFeSector(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "share of energy carrier subtype in final energy demand of the aggregated carrier type per sector/emiMarket combination (eg 'the share of bio-based FE liquids in all FE liquids used in ETS-covered transport') [0..1]"
v_shGasLiq_fe(ttot,all_regi,emi_sectors) "share of gases and liquids in sector final energy [0..1]"

vm_emiCdrAll(ttot,all_regi) "all CDR emissions"
Expand All @@ -442,7 +446,17 @@ vm_demFeForEs(ttot,all_regi,all_enty,all_esty,all_teEs) "Final energy which
vm_prodEs(ttot,all_regi,all_enty,all_esty,all_teEs) "Energy services (unit determined by conversion factor pm_fe2es)."
vm_transpGDPscale(ttot,all_regi) "dampening factor to align edge-t non-energy transportation costs with historical GDP data"

$ifthen.seFeSectorShareDev not "%cm_seFeSectorShareDevMethod%" == "off"
v_penSeFeSectorShare(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "penalty cost for secondary energy share deviation between sectors, for each sector/emiMarket combination"
vm_penSeFeSectorShareDevCost(ttot,all_regi) "total penalty cost for secondary energy share deviation between sectors"
$endif.seFeSectorShareDev

$ifthen.minMaxSeFeSectorShareDev "%cm_seFeSectorShareDevMethod%" == "minMaxAvrgShare"
v_NegPenSeFeSectorShare(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "min-max negative penalty for secondary energy share deviation in sectors"
v_PosPenSeFeSectorShare(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "min-max positive penalty for secondary energy share deviation in sectors"
$endif.minMaxSeFeSectorShareDev
;

***----------------------------------------------------------------------------------------
*** EQUATIONS
***----------------------------------------------------------------------------------------
Expand Down Expand Up @@ -548,6 +562,8 @@ q_shGreenH2(ttot,all_regi) "share of green hydrogen in all hydrogen"
q_shBioTrans(ttot,all_regi) "Define the share of biofuels in transport liquids from 2025 on."

q_shfe(ttot,all_regi,all_enty,emi_sectors) "share of final energy carrier in the sector final energy"
q_shSeFe(ttot,all_regi,all_enty) "share of energy carrier subtype in final energy demand of the aggregated carrier type (eg 'the share of bio-based FE liquids in all FE liquids')"
q_shSeFeSector(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "share of energy carrier subtype in final energy demand of the aggregated carrier type for each sector/emiMarket combination (eg 'the share of bio-based FE liquids in all FE liquids within ETS-covered transport"
q_shGasLiq_fe(ttot,all_regi,emi_sectors) "share of gases and liquids in sector final energy"

q_shbiofe_up(ttot,all_regi,all_enty,emi_sectors,all_emiMkt) "share of biomass per carrier in sector final energy (upper bound)"
Expand All @@ -561,6 +577,15 @@ $IFTHEN.sehe_upper not "%cm_sehe_upper%" == "off"
q_heat_limit(ttot,all_regi) "equation to limit maximum level of secondary energy district heating and heat pumps use"
$ENDIF.sehe_upper

$ifthen.seFeSectorShareDev not "%cm_seFeSectorShareDevMethod%" == "off"
q_penSeFeSectorShareDevCost(ttot,all_regi) "total penalty cost for secondary energy share deviation in sectors"
q_penSeFeSectorShareDev(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "penalty for secondary energy share deviation in sectors"
$endif.seFeSectorShareDev

$ifthen.minMaxSeFeSectorShareDev "%cm_seFeSectorShareDevMethod%" == "minMaxAvrgShare"
q_minMaxPenSeFeSectorShareDev(ttot,all_regi,all_enty,all_enty,emi_sectors,all_emiMkt) "min-max penalty balance for secondary energy share deviation in sectors"
$endif.minMaxSeFeSectorShareDev

***----------------------------------------------------------------------------------------
***----------------------------------------------trade module------------------------------

Expand Down
120 changes: 114 additions & 6 deletions core/equations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -1054,32 +1054,52 @@ q_shBioTrans(t,regi)..
;

***---------------------------------------------------------------------------
*' Share of final energy carrier in sector
*' Shares of final energy carrier in sector
***---------------------------------------------------------------------------

q_shfe(t,regi,entyFe,sector)$(pm_shfe_up(t,regi,entyFe,sector) OR pm_shfe_lo(t,regi,entyFe,sector))..
v_shfe(t,regi,entyFe,sector)
* sum(emiMkt$sector2emiMkt(sector,emiMkt),
sum(se2fe(entySe,entyFe2,te)$(entyFe2Sector(entyFe2,sector)),
vm_demFeSector(t,regi,entySe,entyFe2,sector,emiMkt)))
vm_demFeSector_afterTax(t,regi,entySe,entyFe2,sector,emiMkt)))
=e=
sum(emiMkt$sector2emiMkt(sector,emiMkt),
sum(se2fe(entySe,entyFe,te),
vm_demFeSector(t,regi,entySe,entyFe,sector,emiMkt)))
vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt)))
;

q_shSeFe(t,regi,entySe)$(entySeBio(entySe) OR entySeSyn(entySe) OR entySeFos(entySe)).. !! share of energy carrier subtype in final energy demand of the aggregated carrier type (eg 'the share of bio-based FE liquids in all FE liquids')
v_shSeFe(t,regi,entySe)
* sum((sector,emiMkt)$sector2emiMkt(sector,emiMkt),
sum(seAgg$seAgg2se(seAgg,entySe), !! determining the aggregate SE carrier type (liquids, gases, ...)
sum(entySe2$seAgg2se(seAgg,entySe2), !! summing over the bio/fos/syn variants of the chosen SE carrier"
sum(entyFe$(sefe(entySe2,entyFe) AND entyFe2Sector(entyFe,sector)),
vm_demFeSector_afterTax(t,regi,entySe2,entyFe,sector,emiMkt)))))
=e=
sum((sector,emiMkt)$sector2emiMkt(sector,emiMkt),
sum(entyFe$(sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector)),
vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt)))
;

q_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt)$((entySeBio(entySe) OR entySeSyn(entySe) OR entySeFos(entySe)) AND (sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt)))..
v_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt)
* sum(entySe2$sefe(entySe2,entyFe),
vm_demFeSector_afterTax(t,regi,entySe2,entyFe,sector,emiMkt))
=e=
vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt)
;

q_shGasLiq_fe(t,regi,sector)$(pm_shGasLiq_fe_up(t,regi,sector) OR pm_shGasLiq_fe_lo(t,regi,sector))..
v_shGasLiq_fe(t,regi,sector)
* sum(emiMkt$sector2emiMkt(sector,emiMkt),
sum(se2fe(entySe,entyFe,te)$(entyFe2Sector(entyFe,sector)),
vm_demFeSector(t,regi,entySe,entyFe,sector,emiMkt)))
vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt)))
=e=
sum(emiMkt$sector2emiMkt(sector,emiMkt),
sum(se2fe(entySe,entyFe,te)$(SAMEAS(entyFe,"fegas") OR SAMEAS(entyFe,"fehos")),
vm_demFeSector(t,regi,entySe,entyFe,sector,emiMkt)))
vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt)))
;


*limit secondary energy district heating and heat pumps
$IFTHEN.sehe_upper not "%cm_sehe_upper%" == "off"
q_heat_limit(t,regi)$(t.val gt 2020)..
Expand Down Expand Up @@ -1129,4 +1149,92 @@ q_shbiofe_lo(t,regi,entyFe,sector,emiMkt)$(pm_secBioShare(t,regi,entyFe,sector)
sum((entySeBio,te)$se2fe(entySeBio,entyFe,te), vm_demFeSector_afterTax(t,regi,entySeBio,entyFe,sector,emiMkt))
;

***---------------------------------------------------------------------------
*' Penalty for secondary energy share deviation in sectors
***---------------------------------------------------------------------------

$ifthen.seFeSectorShareDev "%cm_seFeSectorShareDevMethod%" == "sqSectorShare"
q_penSeFeSectorShareDev(t,regi,entySe,entyFe,sector,emiMkt)$(
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( (NOT(sameas(sector,"build") AND (t.val le 2020)))
OR (NOT(sameas(sector,"indst") AND (t.val le 2020)))
OR (NOT(sameas(sector,"cdr") AND (t.val le 2020)))
) AND !!disable share incentives for historical years in buildings, industry and CDR as this should be handled by historical bounds
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
)..
v_penSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
=e=
power(v_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt) ,2)
* (1$sameas("%c_seFeSectorShareDevUnit%","share") + ( vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt) )$(sameas("%c_seFeSectorShareDevUnit%","energy")) ) !!define deviation in share or energy units
;
$elseIf.seFeSectorShareDev "%cm_seFeSectorShareDevMethod%" == "sqSectorAvrgShare"
q_penSeFeSectorShareDev(t,regi,entySe,entyFe,sector,emiMkt)$(
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( (NOT(sameas(sector,"build") AND (t.val le 2020)))
OR (NOT(sameas(sector,"indst") AND (t.val le 2020)))
OR (NOT(sameas(sector,"cdr") AND (t.val le 2020)))
) AND !!disable share incentives for historical years in buildings, industry and CDR as this should be handled by historical bounds
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
)..
v_penSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
=e=
power(v_shSeFe(t,regi,entySe) - v_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt) ,2)
* (1$sameas("%c_seFeSectorShareDevUnit%","share") + ( vm_demFeSector_afterTax(t,regi,entySe,entyFe,sector,emiMkt) )$(sameas("%c_seFeSectorShareDevUnit%","energy")) ) !!define deviation in share or energy units
;
$elseIf.seFeSectorShareDev "%cm_seFeSectorShareDevMethod%" == "minMaxAvrgShare"
q_penSeFeSectorShareDev(t,regi,entySe,entyFe,sector,emiMkt)$(
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( (NOT(sameas(sector,"build") AND (t.val le 2020)))
OR (NOT(sameas(sector,"indst") AND (t.val le 2020)))
OR (NOT(sameas(sector,"cdr") AND (t.val le 2020)))
) AND !!disable share incentives for historical years in buildings, industry and CDR as this should be handled by historical bounds
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
)..
v_penSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
=e=
v_NegPenSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
+ v_PosPenSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
;

q_minMaxPenSeFeSectorShareDev(t,regi,entySe,entyFe,sector,emiMkt)$(
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( (NOT(sameas(sector,"build") AND (t.val le 2020)))
OR (NOT(sameas(sector,"indst") AND (t.val le 2020)))
OR (NOT(sameas(sector,"cdr") AND (t.val le 2020)))
) AND !!disable share incentives for historical years in buildings, industry and CDR as this should be handled by historical bounds
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
)..
(
v_shSeFe(t,regi,entySe)
- v_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt)
+ v_NegPenSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
- v_PosPenSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
)
* !!define deviation in share or energy units
( 1$sameas("%c_seFeSectorShareDevUnit%","share") +
(sum(seAgg$seAgg2se(seAgg,entySe),
sum(entyFe2$(seAgg2fe(seAgg,entyFe2) AND entyFe2Sector(entyFe2,sector)),
sum(entySe2$(seAgg2se(seAgg,entySe2) AND sefe(entySe2,entyFe2) AND entyFe2Sector(entyFe2,sector)),
vm_demFeSector_afterTax(t,regi,entySe2,entyFe2,sector,emiMkt))))
)$sameas("%c_seFeSectorShareDevUnit%","energy")
)
=e=
0
;
$endif.seFeSectorShareDev

$ifthen.penSeFeSectorShareDevCost not "%cm_seFeSectorShareDevMethod%" == "off"
q_penSeFeSectorShareDevCost(t,regi)..
vm_penSeFeSectorShareDevCost(t,regi)
=e=
sum((entySe,entyFe,sector,emiMkt)$( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ),
v_penSeFeSectorShare(t,regi,entySe,entyFe,sector,emiMkt)
) * c_seFeSectorShareDevScale
;
$endif.penSeFeSectorShareDevCost

*** EOF ./core/equations.gms
31 changes: 31 additions & 0 deletions core/preloop.gms
Original file line number Diff line number Diff line change
Expand Up @@ -189,4 +189,35 @@ if (cm_startyear gt 2005,
Execute_Loadpoint 'input_ref' vm_capEarlyReti.l = vm_capEarlyReti.l;
);

*** initialize the carrier subtype shares in final energy demand such that the starting point for the model is "all sectors have the same bio/fos/syn shares for a given carrier type" when cm_seFeSectorShareDevMethod is enabled
p_shSeFe(t,regi,entySe)$((entySeBio(entySe) OR entySeSyn(entySe) OR entySeFos(entySe)) AND sum(seAgg$seAgg2se(seAgg,entySe), sum((sector,emiMkt)$sector2emiMkt(sector,emiMkt), sum(entySe2$seAgg2se(seAgg,entySe2), sum(entyFe$(sefe(entySe2,entyFe) AND entyFe2Sector(entyFe,sector)), vm_demFeSector.l(t,regi,entySe2,entyFe,sector,emiMkt))))) ) =
sum((sector,emiMkt)$sector2emiMkt(sector,emiMkt), sum(entyFe$(sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector)), vm_demFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)))
/
sum(seAgg$seAgg2se(seAgg,entySe), sum((sector,emiMkt)$sector2emiMkt(sector,emiMkt), sum(entySe2$seAgg2se(seAgg,entySe2), sum(entyFe$(sefe(entySe2,entyFe) AND entyFe2Sector(entyFe,sector)), vm_demFeSector.l(t,regi,entySe2,entyFe,sector,emiMkt)))));
v_shSeFe.l(t,regi,entySe)$p_shSeFe(t,regi,entySe) = p_shSeFe(t,regi,entySe);

$ifthen.penSeFeSectorShareDevCost not "%cm_seFeSectorShareDevMethod%" == "off"
vm_demFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)$(
( p_shSeFe(t,regi,entySe) ) AND
( entySeBio(entySe) OR entySeSyn(entySe) OR entySeFos(entySe) ) AND !! only redefine vm_demFeSector for entySeBio, entySeSyn and entySeFos items
( sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt) ) AND !!only create the equation for valid cobinations of entySe, entyFe, sector and emiMkt
( (entySeBio(entySe) OR entySeSyn(entySe)) ) AND !!share incentives only need to be applied to n-1 secondary energy carriers
( (NOT(sameas(sector,"build") AND (t.val le 2020)))
OR (NOT(sameas(sector,"indst") AND (t.val le 2020)))
OR (NOT(sameas(sector,"cdr") AND (t.val le 2020)))
) AND !!disable historical year share incentives to buildings, industry and CDR
( NOT(sameas(sector,"build") AND (sameas(entyFE,"fesos"))) ) !!disable buildings solids share incentives
) =
sum(entySe2$sefe(entySe2,entyFe), vm_demFeSector.l(t,regi,entySe2,entyFe,sector,emiMkt))
* p_shSeFe(t,regi,entySe);
vm_demFeSector_afterTax.l(t,regi,entySe,entyFe,sector,emiMkt) = vm_demFeSector.l(t,regi,entySe,entyFe,sector,emiMkt);
$endif.penSeFeSectorShareDevCost

p_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt)$((entySeBio(entySe) OR entySeSyn(entySe) OR entySeFos(entySe)) AND (sefe(entySe,entyFe) AND entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt)) AND sum(entySe2$sefe(entySe2,entyFe), vm_demFeSector.l(t,regi,entySe2,entyFe,sector,emiMkt)) ) =
vm_demFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)
/
sum(entySe2$sefe(entySe2,entyFe), vm_demFeSector.l(t,regi,entySe2,entyFe,sector,emiMkt))
;
v_shSeFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)$p_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt) = p_shSeFeSector(t,regi,entySe,entyFe,sector,emiMkt);

*** EOF ./core/preloop.gms
Loading
Loading