Electrolyser Modelling
#46
Thanks a lot, I am also working on it and will look into. It will be very helpful. Thank you for your time to explain.
Reply
#47
Thought to share with others who want to do partial load modelling. Efficiency parameter in VEDA for partial load modelling  is EFF and not ACT_EFF. Hope it would be useful.
Reply
#48
Well, that is not at all true.
In TIMES, you must define the efficiency by using ACT_EFF if you want to model partial load efficiencies.  And ACT_EFF can be used well under VEDA-FE. See my two VEDA examples in this thread, where ACT_EFF is used. "EFF" can also be used in VEDA-FE, but it will be translated to ACT_EFF anyway, for TIMES.

In other words, in VEDA you can use ACT_EFF for modelling the process efficiencies with partial load losses, just like in TIMES, and you can also use the VEDA aliases EFF and CEFF.
Reply
#49
I found this

ACT_EFF in DD file when one using EFF parameter in VEDA ACT_EFF in DD file when one using ACT_EFF parameter in VEDA
REG1.2015.TESTELSR_new.ACT.ANNUAL 0.017288462 REG1.2030.TESTELSR_new.HYGNtcs.ANNUAL 0.017627
REG1.2030.TESTELSR_new.ACT.ANNUAL 0.017627 REG1.2050.TESTELSR_new.HYGNtcs.ANNUAL 0.01798
REG1.2050.TESTELSR_new.ACT.ANNUAL 0.01798 REG1.2015.TESTELSR_new.HYGNtcs.ANNUAL 0.017288462

One is at activity level and one at commodity level. I will look into your explanation in the earlier thread.
Reply
#50
(19-05-2019, 01:15 AM)Anjana Wrote: I found this

ACT_EFF in DD file when one using EFF parameter in VEDA      
REG1.2015.TESTELSR_new.ACT.ANNUAL 0.017288462
REG1.2030.TESTELSR_new.ACT.ANNUAL 0.017627
REG1.2050.TESTELSR_new.ACT.ANNUAL 0.01798      

ACT_EFF in DD file when one using ACT_EFF parameter in VEDA
REG1.2030.TESTELSR_new.HYGNtcs.ANNUAL 0.017627
REG1.2050.TESTELSR_new.HYGNtcs.ANNUAL 0.01798
REG1.2015.TESTELSR_new.HYGNtcs.ANNUAL 0.017288462


One is at activity level and one at commodity level. I will look into your explanation in the earlier thread.
Reply
#51
I already explained above that you should not define ACT_EFF on the PCG (HYGNtcs), but on the flow(s) on the shadow side. "ACT" refers to the default shadow group, and so it works well.

So, defining any one of these would work well under VEDA:
 • ACT_EFF(ACT) = 0.017627
 • ACT_EFF(NRG) = 0.017627
 • ACT_EFF(ELC) = 0.017627

But as I have explained, this will not work for partial load efficiencies (when HYGNtcs is the PCG):
 • ACT_EFF(HYGNtcs) = 0.017627

So, you only need to make sure not to define ACT_EFF on the PCG (the only choice that will not work).
Reply
#52
(18-05-2019, 09:35 PM)Antti, Thank you for this explanation and thank you for all your help, without this we could not crack the last one. Antti-L Wrote: @Anjana: Please find below my explanations to the equation coefficients:

The input parameter involved in the equations are :
 •ACT_EFF(r,y,p,cg,s) – activity efficiency of process p, group cg, timeslice s
 •ACT_MINLD(r,y,p) – minimum operating load level
 •ACT_LOSPL(r,y,p,cg,'FX') – proportional  increase  in  specific consumption at minimum operating load level
 •ACT_LOSPL(r,y,p,cg,'UP') –  fraction of feasible load range above the minimum op. level, below which the efficiency losses occur.
 •ACT_LOSPL(r,y,p,cg,'LO') –  minimum operating level used for the partial load efficiency function, default = MAX(0.1,ACT_MINLD(r,y,p))

The variables involved in the equations are :
 • VAR_CAP(r,t,p) – capacity of process p
 • VAR_ACT(r,v,t,p,s) – activity of process p, timeslice s
 • VAR_FLO(r,v,t,p,c,s) – flow of process p, commodity c, timeslice s
 • VAR_UPS(r,v,t,p,s,'N') – off-line capacity of process p, timeslice s
 • VAR_UPS(r,v,t,p,s,'FX') – efficiency loss of process p, timeslice s, divided by ACT_LOSPL(r,y,p,cg,'FX')

Note that as you have not defined ACT_LOSPL(LO), the default is MAX(0.1,ACT_MINLD(r,y,p)) = 0.1;

First, your EQE_ACTEFF:
EQE_ACTEFF  =E=  Process Activity Efficiency (=), example equations are:
EQE_ACTEFF(REG1,2018,2018,TESTELSR,NRG,IN,SD)..  - 57.8420451744059*VAR_ACT(REG1,2018,2018,TESTELSR,SD) + VAR_FLO(REG1,2018,2018,TESTELSR,ELC,SD) - 56.8420140553856*VAR_UPS(REG1,2018,2018,TESTELSR,SD,FX) =E= 0 ;


The equation defines the process activity efficiency in 2018, for timeslice SD. You efficiency for TESTELSR is ACT_EFF(ACT)= 0.017288462. The coefficient 57.8420451744059 for VAR_ACT is obtained as the inverse of that, i.e. 57.8420451744059 = 1/0.017288462.  The coefficient 1 for VAR_FLO is obtained from the fact that you have not defined any commodity-specific efficiency, and so 1 is assumed. The coefficient 56.8420140553856 for VAR_UPS is obtained as ACT_LOSPL(FX)/ACT_EFF(ACT) = 0.982711 / 0.017288462 = 56.8420140553856. The interpretation is straightforward: The activity is equal to the ELC input flow multiplied by the efficiency and subtracted by the activity loss due to partial load.

Second, your EQ_CAPLOAD(LO):
EQ_CAPLOAD(REG1,2018,2018,TESTELSR,SD,LO)..  VAR_ACT(REG1,2018,2018,TESTELSR,SD) - 0.378617286213058*VAR_CAP(REG1,2018,TESTELSR) + 0.378617286213058*VAR_UPS(REG1,2018,2018,TESTELSR,S,N) =G= 0 ;
The equation defines the minimum load in 2018, for timeslice SD. The coefficient is always 1 for VAR_ACT. The coefficient for the online capacity (VAR_CAP−VAR_UPS(S)) is PRC_CAPACT×YRFR×ACT_MINLD = 151.446914485223 × 0.25 × 0.01= 0.378617286213058. The interpretation is straightforward: The load cannot go below the online capacity multiplied by the minimum load level.

Third, your EQ_CAPLOAD(UP):
EQ_CAPLOAD(REG1,2018,2018,TESTELSR,SD,UP)..  - VAR_ACT(REG1,2018,2018,TESTELSR,SD) + 37.8617286213058*VAR_CAP(REG1,2018,TESTELSR) - 37.8617286213058*VAR_UPS(REG1,2018,2018,TESTELSR,S,N) =G= 0 ;
The equation defines the maximum load in 2018, for timeslice SD. The coefficient is always 1 for VAR_ACT. The coefficient for the online capacity (VAR_CAP−VAR_UPS(S)) is PRC_CAPACT×YRFR×COEF_AF(UP) = 151.446914485223 × 0.25 × 1 = 37.8617286213058. The interpretation is straightforward: The load cannot exceed the online capacity multiplied by the maximum availability.

Fourth , your EQ_ACTPL :
EQ_ACTPL(REG1,2018,2018,TESTELSR,SD)..  0.392896432500393*VAR_ACT(REG1,2018,2018,TESTELSR,SD) - 5.27374667249148*VAR_CAP(REG1,2018,TESTELSR) + 5.27374667249148*VAR_UPS(REG1,2018,2018,TESTELSR,S,N) + VAR_UPS(REG1,2018,2018,TESTELSR,SD,FX) =G= 0 ;
The equation defines the efficiency loss in 2018, for timeslice SD. The loss variable VAR_UPS(FX) always has the coefficient 1.  The coefficient for the online capacity (VAR_CAP−VAR_UPS(S)) is defined by ACT_LOSPL(UP), and is obtained as PRC_CAPACT×YRFR × (ACT_LOSPL(UP)+ACT_LOSPL(LO) × (1-ACT_LOSPL(UP))) / (ACT_LOSPL(UP) × (1/ACT_LOSPL(LO)−1)) = 151.446914485223 × 0.25 × (0.2828 + 0.1 × (1−0.2828)) / (0.2828 × (1/0.1−1)) = 5.27374667249148.
The coefficient for the activity VAR_ACT is obtained as 1 / (ACT_LOSPL(UP) × (1/ACT_LOSPL(LO)−1)) = 1 / (0.2828 × (1/0.1−1)) = 0.3928964325.

It is easy to see, by simple calculus, that when the activity is equal to the upper point (ACT_LOSPL(UP)+ACT_LOSPL(LO) × (1-ACT_LOSPL(UP))) = 0.2828+0.1×(1−0.2828))= 0.35452, the loss variable is zero, and when the activity is equal to the lower point ACT_LOSPL(LO), the loss variable is equal (or ≥) to the activity, as designed.
Reply
#53
(17-05-2019, 10:24 PM)Antti-L Wrote: Yes, I understand you are a beginner.  I am happy to try and help beginners on this Forum when I have time (that is in my free time; am I not getting paid for giving this kind of help).

So, in the beginning of this long thread I gave you an example for defining partial load efficiencies. In the example I suggested using ACT_EFF(NRG), which would have worked perfectly, but you chose not to follow my suggestion. Then you came back and complained that the model does not work...  So, seems like I wasted my time?

The primary group (PCG) defines the activity in terms of some process flows.  Assume that the NRG outputs define the activity. In that case the shadow side is the input side. For defining the process transformation, you then also need to define the relation on that other side, i.e. between the main process flows on the shadow side and the activity. This is what ACT_EFF does.  And that's why in ACT_EFF you specify how much activity is produced per one unit of flow(s) of a single commodity or group of commodities on the shadow side, not on the PCG side.

So, for example, specifying ACT_EFF(NRG)=0.6 would define that 0.6 units of activity is produced per 1 unit of NRG inputs. Similarly, specifying ACT_EFF(ELC)=0.4 would define that 0.4 units of activity is produced per 1 unit of ELC input.

In this context, your ACT_EFF(HYGNtc)=0.017288462 would seem to be meaningless, because HYGNtc is not an input commodity (it is not on the shadow side).  But defining such is nonetheless supported for the special purpose I have described (as a multiplier for defining differentiated efficiencies for each PCG commodity produced). But if you define such, you cannot model partial load efficiencies (that's the documented limitation of the current implementation).

For the other question, please see my suggestion below. Feel free to disregard my  suggestion, and try something else.
Hello Antti,

I have a question on electrolyser modelling.

1) In TIMES, by default, an existing or newly installed capacity gets decommissioned gradually till the end of it's life time. However, in reality this is not the case. How is this justified? I find problem because of this representation since I am also trying to represent electrolyser stack reinvestment every 7 years. Because I wanted a new investment for the stack (same capacity as new electrolyser capacity) whenever a new capacity of electrolyser is investment. I feel that to represent this correctly, only option for me is to delay the decommissioning of the electrolysers till the end of their life. what do you think about this approach? I hope this can be done by using NCAP_DLAG, right? 

Thanks & Regards
Abi Afthab
Reply
#54
Abi Afthab Wrote:In TIMES, by default, an existing or newly installed capacity gets decommissioned gradually till the end of it's life time.
No, that is not the case, I cannot confirm your statement. Why do you say that the capacity gets decommissioned gradually till the end of its lifetime? If the lifetime is, say 25 years, the full capacity remains available from the installation year k until k+24 (inclusive), and is then phased out at once. Decommissioning does not take place at all, unless you define NCAP_DCOST (decommissioning costs), and so the plant just gets closed (taken out of service), at once. Decommissioning can be defined to take several years, but it does not sound like you refer to that.

Please provide a reproducible example (*.DD, *.RUN), which demonstrates the issue you are seeing, and explain also how it demonstrates it. Unless you explain it, I don't really understand the rest of your questions.
Reply
#55
(06-06-2019, 10:25 PM)Antti-L Wrote:
Abi Afthab Wrote:In TIMES, by default, an existing or newly installed capacity gets decommissioned gradually till the end of it's life time.
No, that is not the case, I cannot confirm your statement. Why do you say that the capacity gets decommissioned gradually till the end of its lifetime? If the lifetime is, say 25 years, the full capacity remains available from the installation year k until k+24 (inclusive), and is then phased out at once. Decommissioning does not take place at all, unless you define NCAP_DCOST (decommissioning costs), and so the plant just gets closed (taken out of service), at once. Decommissioning can be defined to take several years, but it does not sound like you refer to that.

Please provide a reproducible example (*.DD, *.RUN), which demonstrates the issue you are seeing, and explain also how it demonstrates it. Unless you explain it, I don't really understand the rest of your questions.

When we represent an existing power plant capacity in terms of 'STOCK' (PRC_RESID), isn't the existing capacity gets retired gradually till the end of its life time? Sorry for the newly installed capacity it stays till the end of it's life time.
Reply
#56
PRC_RESID defines the residual existing capacity, by period. With PRC_RESID you can define the phase-out of capacity any way you want, for example, as a constant capacity from 2015 to 2040.  The lifetime specified (NCAP_TLIFE) does not affect at all the phase-out of PRC_RESID capacites (unless you define only a single point).  If you define the existing capacities by PRC_RESID, and the capacity gets retired gradually till the end of its life time, why do you then define them that way, if you don't want them that way?

NCAP_PASTI is the standard way of defining past investments into new capacity.  The past installed capacities work the same way as newly installed capacities: The capacity remains constant until the end of their lifetime.

BTW: I looked at the results from your model, and found that the stack capacity was indeed exactly equal to the electrolyser capacity, in all periods, although the stack lifetime is only 7 years.
Reply
#57
Hello Antti,

Could you explain me why there is no partial load efficiency loss for alkELSRMOBDECEN in the file attached?  I am a bit confused now about your earlier explanation. My earlier model, when we discussed in the beginning was in different units. Now all are in PJ.

Earlier you told me partial loads are measured in proportional to the maximum load of each season. Since I do not have a constant demand profile. I calculated my load in every season. I have 480 time slices with 20 seasons as you could see in the attached model. For example, I checked my season 1, time slice S01Q02, the commodity fraction is 0. Then if the partial load is measured in proportion to the maximum load, my process should not work at all in this time slice, right? But still my process is working with full load efficiency. Why it is so?

Now if the partial load is measured according to the logic as explained below, still there are instances of low partial loads.
According to my understanding, I checked the partial loads in this file. I saw the capacity of my process alkELSRMOBDECEN  which is 42.05 PJ/a. Now my load as I understand would be hydrogen demand. In this case alkELSRMOBDECEN (however, in the results one more process alkELSRMOBCEN_new is also serving this demand) is serving the demand DEMCARMOBDECEN and HYGNTOTRUCKMOB which the demand values are 19305 and 750 millionVkm. So combining two the demand would be 20055 millionVkm in 2050. This will be translated to 16.39+6.73 PJ(considering my demand technologies truck and car efficiencies of 1177.77 and 111) = 23.12 PJ annual demand. And the load profile is not a constant one. So to check the partial load, I calculated my load in each time slice by multiplying the annual demand with commodity fraction. And then I divided this by the value which I got multiplying year fraction and 8760. This means I got the load in each hour. I divided this load every hour with my capacity 42.05/8760 Pj/hr. In this case I am getting values like 0.1 and 1.2 etc. When I get 0.1, then the process should not work at all, right?

Now my confusion is how partial loads are measured. which of the above the logics are used to calculate partial load. And why there is no partial load efficiency losses in my results. Let's take the year 2050 for example.

NB:- I have further simplified my storage processess and the model is at least solving now. I have also decided not to consider pipeline as storage by making some cost reductions for my seasonal storage. Now I have two seasonal storages in the model. Still it's taking more than 1 hour to solve. One surprising thing is thus just by changing my demand values (ELCDEM) by a few numbers the model solving time changed from 31 minutes to 1 hour and 21 minutes. If you have some time, could you see why still after lot of simplications, the model is taking time? 

Regards
Abi Afthab


Attached Files
.zip   model5.zip (Size: 509.55 KB / Downloads: 3)
Reply
#58
I think you should again consider reading the documentation, as I think you have been asking these same things before, although I think they have been well explained in the docs.

What I have said about partial loads being measured in proportional to the maximum load of each season, refers to the maximum load of the process in each season, not the total load of the commodity. I don't see how it would make sense to measure the partial load of an individual process in comparison to the total load of the commodity. In my understanding, partial load means that the production of a process is less than the maximum load of that process, not the total load of the commodity produced. In addition, please also bear in mind that no discrete unit sizes can be assumed in the LP formulation, as I have noted before.

I am very sorry for now being on vacation until mid-August, and so probably unable to answer all your questions. Please also understand that as basically none of your problems have been technical problems in the TIMES code, helping you so much has been a fully voluntary effort from my side.
Reply
#59
Ok, despite already having explained to you earlier the partial load efficiency functionality quite in detail, I will try to explain it once again, focusing on the process alkELSRMOBDECEN in 2050 as you requested.

Let's first look at the operational and capacity results of this process (using my results, which may slightly differ from yours). The installed capacity of the process in 2050 is 42.059 PJ = 1334 MW. The following table shows the maximum and minimum load, the online capacity and the load fraction of the minimum load in each season.
   
As you can see, in the seasons S10, S15, S17 and S19 the maximum load is 42.059 PJ, i.e. the full capacity is on-line and that full capacity is also fully utilized in some timeslices within those four seasons.  In other seasons, the maximum load is less than the installed capacity, which means that it is reasonable to have part or all of the installed capacity off-line. In seasons, S02, S06 and S13 the full capacity is off-line, and the load is thus zero in those seasons. But in all other seasons, we can see that the minimum load is exactly 59.8% of the on-line capacity.  One can thus immediately conclude that it is either not possible or it is too costly to operate the technology at loads below 59.8%.

To see why the load is always either zero or ≥59.8%, we can check how the partial load efficiencies have been modelled for this process.  According to your model files, ACT_MINLD=0.4, meaning that the minimum stable load is 40%, ACT_LOSSPL(FX)=0.99, meaning that the increase in specific fuel consumption is 99% at the minimum stable load, and ACT_LOSSPL(UP)=0.33, meaning that the efficiency losses start at the load of 0.4+0.33×(1−0.4)=59.8%. Consequently, we can now see that it would be possible to operate the technology at loads as low as 40%, but because the efficiency losses are so high, it would hardly ever be economically justified to operate it below 59.8% (unless the savings in variable O&M costs would be large enough to compensate for the efficiency loss). This can be clearly seen in the Figure below, illustrating the efficiency and input energy consumption as a function of the load level.
   
As you can see, the efficiency losses are so high that it would consume more input energy to produce at any lower load level than 59.8%, and thus it would not make much sense to operate at load levels below 59.8%. Thus, your partial load efficiency modeling appears to work quite effectively, as the model avoids the partial load efficiency losses by operating the technology at levels where they do not occur.

Of course, it might be more reasonable to model partial load efficiencies that would in some cases also be realized. The Figure below shows an example where fuel consumption under partial load efficiency losses always stays under the fuel consumption at any higher loads. In such cases the model might indeed choose to operate the technology at lower loads, even going down to the minimum stable load.
   
Reply
#60
(08-07-2019, 02:44 PM)Antti-L Wrote: Ok, despite already having explained to you earlier the partial load efficiency functionality quite in detail, I will try to explain it once again, focusing on the process alkELSRMOBDECEN in 2050 as you requested.

Let's first look at the operational and capacity results of this process (using my results, which may slightly differ from yours). The installed capacity of the process in 2050 is 42.059 PJ = 1334 MW. The following table shows the maximum and minimum load, the online capacity and the load fraction of the minimum load in each season.

As you can see, in the seasons S10, S15, S17 and S19 the maximum load is 42.059 PJ, i.e. the full capacity is on-line and that full capacity is also fully utilized in some timeslices within those four seasons.  In other seasons, the maximum load is less than the installed capacity, which means that it is reasonable to have part or all of the installed capacity off-line. In seasons, S02, S06 and S13 the full capacity is off-line, and the load is thus zero in those seasons. But in all other seasons, we can see that the minimum load is exactly 59.8% of the on-line capacity.  One can thus immediately conclude that it is either not possible or it is too costly to operate the technology at loads below 59.8%.

To see why the load is always either zero or ≥59.8%, we can check how the partial load efficiencies have been modelled for this process.  According to your model files, ACT_MINLD=0.4, meaning that the minimum stable load is 40%, ACT_LOSSPL(FX)=0.99, meaning that the increase in specific fuel consumption is 99% at the minimum stable load, and ACT_LOSSPL(UP)=0.33, meaning that the efficiency losses start at the load of 0.4+0.33×(1−0.4)=59.8%. Consequently, we can now see that it would be possible to operate the technology at loads as low as 40%, but because the efficiency losses are so high, it would hardly ever be economically justified to operate it below 59.8% (unless the savings in variable O&M costs would be large enough to compensate for the efficiency loss). This can be clearly seen in the Figure below, illustrating the efficiency and input energy consumption as a function of the load level.

As you can see, the efficiency losses are so high that it would consume more input energy to produce at any lower load level than 59.8%, and thus it would not make much sense to operate at load levels below 59.8%. Thus, your partial load efficiency modeling appears to work quite effectively, as the model avoids the partial load efficiency losses by operating the technology at levels where they do not occur.

Of course, it might be more reasonable to model partial load efficiencies that would in some cases also be realized. The Figure below shows an example where fuel consumption under partial load efficiency losses always stays under the fuel consumption at any higher loads. In such cases the model might indeed choose to operate the technology at lower loads, even going down to the minimum stable load.

Dear Antti,

Thanks a ton for the detailed reply. Here, according to my understanding, the maxload you are referring is the online capacity in each season, right? As you told earlier, this can be calculated by substracting the offline capacity (seen in GDX file) from the total capacity of the process. But how can I find the minimum load? Where can I see this?

Regards
Abi Afthab
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)