10052019, 03:41 PM
Thanks a lot, yes I can see them now.
Electrolyser Modelling

10052019, 03:41 PM
Thanks a lot, yes I can see them now.
Abi Mohammed Wrote:Could you please have a look and give me some clarification on PCG and user defined PCGs.I am not sure what kind of clarification is needed here. As far as the TIMES model generator is concerned, defining the PCG is basically the sole responsibility of the modeller. Under VEDA you have some automation that might be helpful, but it is always safest to define the PCG explicitly. I am sure that by now you have also read the documentation which explains the PCG (Part II, section 2.2.1 Definition of the Reference Energy System (RES)): Part II, section 2.2.1 Wrote:The activity variable (VAR_ACT) of a standard process is in most cases equal to the sum of one or several commodity flows on either the input or the output side of a process. The activity of a process is limited by the available capacity, so that the activity variable establishes a link between the installed capacity of a process and the maximum possible commodity flows entering or leaving the process during a year or a subdivision of a year. The commodity flows that define the process activity are specified by the set prc_actunt(r,p,cg,u) where the commodity index cg may be a single commodity or a userdefined commodity group, and u is the activity unit. The commodity group defining the activity of a process is also called Primary Commodity Group (PCG).Usually, it would make no sense defining NRG or MAT as the PCG, because normally only the input(s) / output(s) should define the activity, not both (excluding storage). Again, here VEDA has some shortcuts (NRGI, NRGO, MATI, MATO etc.). Userdefined groups are needed when the individual commodities or the available shortcuts are not sufficient, for example, if you have three NRG outputs, but only two of them should be defining the activity (according to the model designer, i.e. you).
15052019, 09:00 PM
(12052019, 04:31 AM)AnttiL Wrote:Thanks Antti for the clarification.Abi Mohammed Wrote:Could you please have a look and give me some clarification on PCG and user defined PCGs.I am not sure what kind of clarification is needed here. As far as the TIMES model generator is concerned, defining the PCG is basically the sole responsibility of the modeller. Under VEDA you have some automation that might be helpful, but it is always safest to define the PCG explicitly. I have following questions related to the electrolyser modelling, 1) I need to represent the life time of electrolyser stack and electrolyser rest of systems separately. For example, my electrolyser life can be considered as 25 years, but the stack has to be replaced roughly in 7 years. So there is a repeated investment for the stack. Any suggestions how to model this? I tried something different by adding two additional processes other than the electrolyser process; one fictional process with zero cost converting the hydrogen produced by electrolyser back to electricity and then the next process representing additional investment (stack cost) which again produces hydrogen from this electricity. At first look, this seems to work fine (equal capacity is being invested for electrolyser process and for the process representing the stack which is what I wanted), but only when there is no partial load losses. However, when considering partial load efficiency, this approach has a problem. This is because my electrolyser produced hydrogen with a lower efficiency due to partial load and my fictional zero cost process which has to convert hydrogen back to electricity is working with a constant efficiency. 2) The partial load efficiency losses seems to work well for the existing electrolyser process. However, for the newly invested technologies, I am not able to see a drop in efficiency during low loads (even below the values defined by ACT_LOSPL~UP). Always there is zero offline capacity for these newly invested electrolyser technologies. Why this is happening?
Concerning 2), can you provide me the *.DD and *.RUN files to be able see what's going on and answer the question?
Concerning 1), I can try to answer that if 2) will be cleared. [EDIT:] I tested myself with your earlier example model but with a longer model horizon and investments into new electrolyzer capacity, and I am seeing the partial load efficiency losses for the newly invested capacity, just like for the existing capacity. Thus, I am not able to confirm your findings, sorry.
17052019, 12:54 PM
(10052019, 03:41 PM)Anjana Wrote: Thanks a lot, yes I can see them now. Dear Antti, Thank you once again for all your help on partial load modelling on electrolyser Abi Mohammed is carrying out. There are three sets of equiation developed for partial load modelling, 1) 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 ; (LHS = 0) EQE_ACTEFF(REG1,2018,2018,TESTELSR,NRG,IN,SN)..  57.8420451744059*VAR_ACT(REG1,2018,2018,TESTELSR,SN) + VAR_FLO(REG1,2018,2018,TESTELSR,ELC,SN)  56.8420140553856*VAR_UPS(REG1,2018,2018,TESTELSR,SN,FX) =E= 0 ; (LHS = 0) Then 2)  EQ_CAPLOAD =G= Augmented capacityactivity 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 ; (LHS = 0) 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 ; (LHS = 0) Then 3)  EQ_ACTPL =G= Activity partial loads 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 ; (LHS = 0) EQ_ACTPL(REG1,2018,2018,TESTELSR,SN).. 0.392896432500393*VAR_ACT(REG1,2018,2018,TESTELSR,SN)  5.27374667249148*VAR_CAP(REG1,2018,TESTELSR) + 5.27374667249148*VAR_UPS(REG1,2018,2018,TESTELSR,S,N) + VAR_UPS(REG1,2018,2018,TESTELSR,SN,FX) =G= 0 ; (LHS = 0) I tried to understand the coefficient and the equation meaning from the manual,, but could not make out. For example, First set of equation EQE_ACTEFF, is for calculation of the modified efficiency, how the coefficient of VAR_UPS is calculated ? I would be very grateful if you could help us to understand the coefficient calculation and interpretation of these equations. For parameter values, I enclose the dd file. Thanking you once again, Best regards Anjana
17052019, 01:50 PM
I think all the equations are explained in the documentation.
But yes, sure I can try and explain the coefficients in the equations, but it would be easier if I had all the model input files (*.DD and *.RUN). And, at the same time I would then be able to investigate the report by your colleague, which I don't understand and I am not able to reproduce: Abi Mohammed Wrote:However, for the newly invested technologies, I am not able to see a drop in efficiency during low loads.
17052019, 02:15 PM
(17052019, 01:50 PM)AnttiL Wrote: I think all the equations are explained in the documentation. Thanks Antii, Forum didnt allow me to upload .dd file, that is why I converted into docx file. ANyway, ABi will upload again.
17052019, 02:20 PM
(15052019, 10:32 PM)AnttiL Wrote: Concerning 2), can you provide me the *.DD and *.RUN files to be able see what's going on and answer the question? Hello Antti, Attached are the .dd and .run files. Please have a look, especially for the efficiency losses for the testelsr_new technology.
17052019, 06:26 PM
(17052019, 02:20 PM)MohammedAbiAfthab Wrote:Antti,(15052019, 10:32 PM)AnttiL Wrote: Concerning 2), can you provide me the *.DD and *.RUN files to be able see what's going on and answer the question? The equations posted by Anjana may be different from that of the model which I submitted to you. So please consider the model which I submitted as the final one. Regards Abi Afthab
17052019, 07:30 PM
Dear Antii, if someone does not define NCAP_ILED for a particular technology, does TIMES assign a default value on NCAP_ILED (e.g 3 or 5) for that technology or consider it as zero ?
Ok, thanks for the files.
It was easy to see where the problem was. The documentation says the following (bold emphasis added): 2.2.1. Endogenous partial load efficiency losses It should be noted, though, that the endogenous modelling of partial load efficiencies requires that the process has its efficiency modelled through the ACT_EFF parameter (on the shadow side of the process). 3.2.7. Partial load efficiency losses It should be noted that the modelling of endogenous partial load efficiency losses requires that the process has its efficiency modelled by the ACT_EFF r,v,t,p,s parameter (on the shadow side), while the penalty cost approach can be used for any process, regardless of how the process efficiency has been modelled. 5.4. USAGE NOTES FOR BASIC PARTIAL LOAD EFFICIENCY MODELLING The ACT_LOSPL(r,y,p,'FX') parameter can only be used for processes that have their efficiency modelled by the ACT_EFF parameter (on the shadow side). The process efficiency will then be endogenously modelled according to the actual load level in each timeslice. You have not defined ACT_EFF on the shadow side. The shadow side is at the opposite of the PCG, and your PCG for the testelsr_new technology is HYGNtcs. You are defining the efficiency on the PCG: Code: PARAMETER ACT_EFF / I tested by fixing the ACT_EFF, by raising the starting point for the losses higher, ACT_LOSPL('UP')=0.8, and the process then worked as expected, having large partial efficiency losses in the night timeslices.
17052019, 08:58 PM
(17052019, 07:37 PM)AnttiL Wrote: Ok, thanks for the files.Thank you Antti for finding the problem. If I have understood correctly, If I change the ACT_EFF to EFF for the TESTELSR_new, I should be able to see the partial load efficiency losses. I tried this and its working fine now. I am sorry. I am a beginner with TIMES and it's been only just more than a month I started working with TIMES.The work I am doing is part of my master's thesis. I have been going through most of the documentation and it's been a little tough for me to understand everything described. Could you kindly explain me what you mean by defining efficiency at the shadow side of a process (as u told opposite of the PCG)? I really didn't understand what it means. According to my understanding, efficiency, as it is output divided by input, I have defined efficiency for the process TESTELSR_new as the amount of HYGNtcs I will get with one unit input of ELC. In an earlier example which you suggested me, the output was HYGN and input was ELC. There you defined an ACT_EFF of 0.66 which I understand is the amount of HYGN we get for one unit input of ELC (here everything was in terms of energy). Could you kindly clarify? Also, in my earlier post I had mentioned about the problem of defining separate life time of electrolyser stack and electrolyser rest of the system. Could you give me some suggestions? Thanks and Regards Abi Afthab
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.
17052019, 10:49 PM
(17052019, 10:24 PM)AnttiL 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).Thank you very much Antti. I am very grateful to you. You have been replying for all my questions irrespective of the working hours. Without your support, it would have been difficult to proceed with my thesis. I am extremely sorry, I overlooked the NRG mentioned in the CommGrp in the example mentioned by you. That's why this happened. Now I understood what it means by the shadow side. Thanks for the suggestion on electrolyser stack modelling. I will test that with my model and see the results. Regards Abi Afthab
18052019, 09:35 PM
@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') – offline 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 commodityspecific 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) × (1ACT_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) × (1ACT_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. 
« Next Oldest  Next Newest »
