Would like to know why the code is written in this way

Problems with syntax of GAMS
Post Reply
Jubeyer
User
User
Posts: 41
Joined: 4 years ago

Would like to know why the code is written in this way

Post by Jubeyer »

Hi,

I am a pretty new user of GAMS. Recently I have come across a code snippet which is follows:
$IFI '%SUSD_TRAJECTORY_CHECK%' == YES Q_SU_PUMP_RAMPDOWN_TRAJECTORY0(CONVENTIONAL_STORAGE_GEN,INTERVAL)$(ORD(INTERVAL) EQ 1)..
$IFI '%SUSD_TRAJECTORY_CHECK%' == YES STORAGEVALUE(CONVENTIONAL_STORAGE_GEN,"INITIAL_PUMP_MW") - CONVENTIONAL_PUMP_SCHEDULE(CONVENTIONAL_STORAGE_GEN,INTERVAL)
$IFI '%SUSD_TRAJECTORY_CHECK%' == YES =L= INTERVAL_LENGTH*60*STORAGEVALUE(CONVENTIONAL_STORAGE_GEN,"PUMP_RAMP_RATE")*
$IFI '%SUSD_TRAJECTORY_CHECK%' == YES (STORAGEVALUE(CONVENTIONAL_STORAGE_GEN,"INITIAL_PUMP_STATUS")
$IFI '%SUSD_TRAJECTORY_CHECK%' == YES - SUM(H$(ORD(H) GE ORD(INTERVAL) AND (ORD(H) LE (ORD(INTERVAL) )))
$IFI '%SUSD_TRAJECTORY_CHECK%' == YES ;

Now I would like to know why it is written in this way, since it is only a single equation but why the conditional statements are written that many times instead of just once.

Regards,
User avatar
bussieck
Moderator
Moderator
Posts: 1033
Joined: 7 years ago

Re: Would like to know why the code is written in this way

Post by bussieck »

The "$IFI ..." is done at compilation time, so a compile time switch SUSD_TRAJECTORY_CHECK (not unlike the "#if defined ... #endif" in the C preprocessor) decides if a piece of code is included in the GAMS program or not. This seems to be old GAMS code before there was a block $ifThen. Nowadays, one would write this as:

Code: Select all

$IfThenI '%SUSD_TRAJECTORY_CHECK%' == YES 
Q_SU_PUMP_RAMPDOWN_TRAJECTORY0(CONVENTIONAL_STORAGE_GEN,INTERVAL)$(ORD(INTERVAL) EQ 1)..
  STORAGEVALUE(CONVENTIONAL_STORAGE_GEN,"INITIAL_PUMP_MW") - CONVENTIONAL_PUMP_SCHEDULE(CONVENTIONAL_STORAGE_GEN,INTERVAL)
  =L= INTERVAL_LENGTH*60*STORAGEVALUE(CONVENTIONAL_STORAGE_GEN,"PUMP_RAMP_RATE")*
  (STORAGEVALUE(CONVENTIONAL_STORAGE_GEN,"INITIAL_PUMP_STATUS")
  - SUM(H$(ORD(H) GE ORD(INTERVAL) AND (ORD(H) LE (ORD(INTERVAL) )))
;
$endIf
-Michael
Jubeyer
User
User
Posts: 41
Joined: 4 years ago

Re: Would like to know why the code is written in this way

Post by Jubeyer »

Thanks a lot.
Post Reply