Skip to content

Commit bbbc562

Browse files
committed
Make MACRO_CONCURRENT a GAMS compile-time variable
1 parent c79cc3f commit bbbc562

File tree

1 file changed

+32
-24
lines changed

1 file changed

+32
-24
lines changed

message_ix/model/MACRO/macro_solve.gms

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -38,32 +38,40 @@ C.FX(node_macro, macro_base_period) = c0(node_macro) ;
3838
I.FX(node_macro, macro_base_period) = i0(node_macro) ;
3939
EC.FX(node_macro, macro_base_period) = y0(node_macro) - i0(node_macro) - c0(node_macro) ;
4040

41-
* Conditional execution based on solve_param
42-
if (solve_param = 1,
43-
* solving the model region by region
44-
node_active(node) = no ;
45-
LOOP(node $ node_macro(node),
46-
node_active(node_macro) = no ;
47-
node_active(node) = YES;
48-
* DISPLAY node_active ;
49-
* solve statement
50-
SOLVE MESSAGE_MACRO MAXIMIZING UTILITY USING NLP ;
51-
* write model status summary (by node)
52-
* status(node,'modelstat') = MESSAGE_MACRO.modelstat ;
53-
* status(node,'solvestat') = MESSAGE_MACRO.solvestat ;
54-
* status(node,'resUsd') = MESSAGE_MACRO.resUsd ;
55-
* status(node,'objEst') = MESSAGE_MACRO.objEst ;
56-
* status(node,'objVal') = MESSAGE_MACRO.objVal ;
57-
)
58-
elseif (solve_param = 2),
59-
*Solving model with all regions concurrently
60-
node_active(node_macro) = YES;
61-
* solve statement
62-
SOLVE MESSAGE_MACRO MAXIMIZING UTILITY USING NLP;
63-
* write model status summary
41+
$IFTHEN %MACRO_CONCURRENT% == "0"
42+
43+
DISPLAY "Solve MACRO for each node in sequence";
44+
45+
node_active(node) = NO ;
46+
47+
LOOP(node$node_macro(node),
48+
node_active(node_macro) = NO ;
49+
node_active(node) = YES ;
50+
* DISPLAY node_active ;
51+
52+
SOLVE MESSAGE_MACRO MAXIMIZING UTILITY USING NLP ;
53+
54+
* Write model status summary for the current node
55+
* status(node,'modelstat') = MESSAGE_MACRO.modelstat ;
56+
* status(node,'solvestat') = MESSAGE_MACRO.solvestat ;
57+
* status(node,'resUsd') = MESSAGE_MACRO.resUsd ;
58+
* status(node,'objEst') = MESSAGE_MACRO.objEst ;
59+
* status(node,'objVal') = MESSAGE_MACRO.objVal ;
60+
);
61+
62+
$ELSE
63+
64+
DISPLAY "Solve MACRO for all nodes concurrently";
65+
66+
node_active(node_macro) = YES;
67+
68+
SOLVE MESSAGE_MACRO MAXIMIZING UTILITY USING NLP;
69+
70+
* Write model status summary for all nodes
6471
* status('all','modelstat') = MESSAGE_MACRO.modelstat;
6572
* status('all','solvestat') = MESSAGE_MACRO.solvestat;
6673
* status('all','resUsd') = MESSAGE_MACRO.resUsd;
6774
* status('all','objEst') = MESSAGE_MACRO.objEst;
6875
* status('all','objVal') = MESSAGE_MACRO.objVal;
69-
) ;
76+
77+
$ENDIF

0 commit comments

Comments
 (0)