OSeMOSYS / OSeMOSYS_GNU_MathProg

The GNU MathProg implementation of OSeMOSYS
Apache License 2.0
9 stars 15 forks source link

CFR and PVA terms in Undiscounted Storage Investment Cost Calculation #105

Open trevorb1 opened 2 weeks ago

trevorb1 commented 2 weeks ago

Hi! I have a question relating to investment accounting of Storage in OSeMOSYS;

Technology Investment Cost Accounting

For technology cost account, the non-discounted capital investment is calculated as (taken from the objective equation):

CapitalCost[r,t,y] * NewCapacity[r,t,y] * CapitalRecoveryFactor[r,t] * PvAnnuity[r,t]

where the DiscountRate and DiscountRateIdv are defined as:

param DiscountRate{r in REGION};
param DiscountRateIdv{r in REGION, t in TECHNOLOGY}, default DiscountRate[r];

and the CFR and PVA are defined as:

param CapitalRecoveryFactor{r in REGION, t in TECHNOLOGY} :=
    (1 - (1 + DiscountRateIdv[r,t])^(-1))/(1 - (1 + DiscountRateIdv[r,t])^(-(OperationalLife[r,t])));
param PvAnnuity{r in REGION, t in TECHNOLOGY} :=
    (1 - (1 + DiscountRate[r])^(-(OperationalLife[r,t]))) * (1 + DiscountRate[r]) / DiscountRate[r];

Storage Investment Cost Accounting

For storage cost account, the non-discounted capital investment is calculated as (taken from the objective equation):

CapitalCostStorage[r,s,y] * NewStorageCapacity[r,s,y]

ie. There is no CRF and PVA term

My Question

My question is why we include the CRF and PVA terms in the technology investment accounting, but not the storage capital investment accounting? There already exists a DiscountRateStorage parameter, so I would think we should be including these terms?

Solution

I believe we would need to modify the storage investment term in the objective equation to be:

CapitalCostStorage[r,s,y] * NewStorageCapacity[r,s,y] * CapitalRecoveryFactorStorage[r,s] * PvAnnuityStorage[r,s]

where the DiscountRate, DiscountRateStorage and OperationalLifeStorage parameters would retain the same definitions that already exist:

param DiscountRate{r in REGION};
param DiscountRateStorage{r in REGION, s in STORAGE};
param OperationalLifeStorage{r in REGION, s in STORAGE};

and the storage CFR and PVA parameters are added as follows:

param CapitalRecoveryFactorStorage{r in REGION, s in STORAGE} :=
    (1 - (1 + DiscountRateStorage[r,s])^(-1))/(1 - (1 + DiscountRateStorage[r,s])^(-(OperationalLifeStorage[r,s])));
param PvAnnuityStorage{r in REGION, s in STORAGE} :=
    (1 - (1 + DiscountRate[r])^(-(OperationalLifeStorage[r,s]))) * (1 + DiscountRate[r]) / DiscountRate[r];
trevorb1 commented 2 weeks ago

Tagging @tniet as we had a brief in person discussion about this

willu47 commented 2 weeks ago

That sounds sensible to me. Tagging also @robertodawid who implemented the technology-specific discounting and maybe has something else to add?

robertodawid commented 1 week ago

Hi @trevorb1, a straightforward approach! With these additional parameters, it is possible to represent most storage systems, dams, bess, pump hydro, and even thermal storage better (@ShravanKumar23). However, it is necessary to consider the individual assumptions for every single storage system; for example, in bess, the OperationalLifeStorage is based on cycles (charge-discharge), but a reasonable assumption could be one cycle per day, for example, see assumptions for commercial battery storage from NREL