Piecewise linear heat rate curves
Implement piecewise linear heat rate curves with no load heat requirement. Wilmar code for same below:
QGFUELUSE2(IAGK_Y(IA,IGSLOPES),INT(NODE,T))$(ORD(T)>1).. VGFUELUSAGE_NT(IA,IGSLOPES,NODE,T) =E= $ifi '%JMM_MIP%' == Yes IFUELUSAGE_SECTION(IA,IGSLOPES)*IGELECCAPEFF(IA,IGSLOPES,T)* VGONLINE_NT(IA,IGSLOPES,NODE,T) $ifi Not '%JMM_MIP%' == Yes IFUELUSAGE_SECTION(IA,IGSLOPES)* VGONLINE_NT(IA,IGSLOPES,NODE,T) + SUM (IHRS $(ORD(IHRS) LE GDATA(IA,IGSLOPES,'GDFE_NSLOPES')),FE_SLOPE_APPROX(IA,IGSLOPES,IHRS) * VGOUTPUT_APPROX_NT(IA,IGSLOPES,IHRS,NODE,T)) $ifi '%JMM_MIP%' == Yes + FE_SLOPE_APPROX(IA,IGSLOPES,'IHRS01')*GDATA(IA,IGSLOPES,'GDMINLOADFACTOR')*IGELECCAPEFF(IA,IGSLOPES,T)* VGONLINE_NT(IA,IGSLOPES,NODE,T) $ifi Not '%JMM_MIP%' == Yes + FE_SLOPE_APPROX(IA,IGSLOPES,'IHRS01')*GDATA(IA,IGSLOPES,'GDMINLOADFACTOR')* VGONLINE_NT(IA,IGSLOPES,NODE,T) ; QGFUELUSE3(IAGK_Y(IA,IGONESLOPE),INT(NODE,T))$(ORD(T)>1).. VGFUELUSAGE_NT(IA,IGONESLOPE,NODE,T) =E= $ifi '%JMM_MIP%' == Yes IFUELUSAGE_SECTION(IA,IGONESLOPE)*IGELECCAPEFF(IA,IGONESLOPE,T)* VGONLINE_NT(IA,IGONESLOPE,NODE,T) $ifi Not '%JMM_MIP%' == Yes IFUELUSAGE_SECTION(IA,IGONESLOPE)* VGONLINE_NT(IA,IGONESLOPE,NODE,T) + IFUELUSAGE_SLOPE(IA,IGONESLOPE)* VGOUTPUT_NT(IA,IGONESLOPE,NODE,T) ; QUC07(IAGK_Y(IA,IGSLOPES),INT(NODE,T))$(ORD(T)>1).. VGOUTPUT_NT(IA,IGSLOPES,NODE,T) =E= SUM(IHRS $( ORD(IHRS) LE GDATA(IA,IGSLOPES,'GDFE_NSLOPES')), VGOUTPUT_APPROX_NT(IA,IGSLOPES,IHRS,NODE,T)) $ifi %UnitCmin%==yes + GDATA(IA,IGSLOPES,'GDMINLOADFACTOR')*IGELECCAPEFF(IA,IGSLOPES,T)* VGONLINE_NT(IA,IGSLOPES,NODE,T) $ifi Not %UnitCmin%==yes + GDATA(IA,IGSLOPES,'GDMINLOADFACTOR')* VGONLINE_NT(IA,IGSLOPES,NODE,T) ; QUC08(IAGK_Y(IA,IGSLOPES),INT(NODE,T))$(ORD(T)>1).. VGOUTPUT_APPROX_NT(IA,IGSLOPES,'IHRS01',NODE,T) =L= (FE_RIGHTBORDER_APPROX(IA,IGSLOPES,'IHRS01') - GDATA(IA,IGSLOPES,'GDMINLOADFACTOR'))*IGELECCAPEFF(IA,IGSLOPES,T) ; QUC09(IAGK_Y(IA,IGSLOPES),IHRS,INT(NODE,T)) $( (ORD(IHRS) LE GDATA(IA,IGSLOPES,'GDFE_NSLOPES')) AND (ORD(IHRS) GT 1 ) AND (ORD(T)>1)).. VGOUTPUT_APPROX_NT(IA,IGSLOPES,IHRS,NODE,T) =L= (FE_RIGHTBORDER_APPROX(IA,IGSLOPES,IHRS) - FE_RIGHTBORDER_APPROX(IA,IGSLOPES,IHRS-1))*IGELECCAPEFF(IA,IGSLOPES,T) ; LOOP (IAGK_Y(IA,IGONESLOPE), IFUELUSAGE_SLOPE(IA,IGONESLOPE) = GDATA(IA,IGONESLOPE,'GDFE_SLOPE'); ); LOOP (IAGK_Y(IA,IGELECPARTLOAD), IFUELUSAGE_SECTION(IA,IGELECPARTLOAD) = GDATA(IA,IGELECPARTLOAD,'GDFE_SECTION'); ); LOOP (IAGK_Y(IA,IGELECNOPARTLOAD), IFUELUSAGE_SLOPE(IA,IGELECNOPARTLOAD) = 1/(GDATA(IA,IGELECNOPARTLOAD,'GDFULLLOAD')); IFUELUSAGE_SECTION(IA,IGELECNOPARTLOAD) = 0; ); LOOP (IAGK_Y(IA,IGHEATONLY), IFUELUSAGE_SLOPE(IA,IGHEATONLY) = 1/(GDATA(IA,IGHEATONLY,'GDFULLLOAD')); IFUELUSAGE_SECTION(IA,IGHEATONLY) = 0; );