$title 'Test the m.handle functionality: submit, wait, resubmit' (HANDLE01,SEQ=238) $onText In this model we test the model.handle mechanisms by running the same model several times. In particular, the resubmission via m.handlesubmit is tested Contributor: Alex Meeraus $offText $if NOT set libfile $set libfile trnsport $if NOT set libmodel $set libmodel transport $if NOT set libobj $set libobj lp minimizing z $call gamslib -q %libfile% $include %libfile% $eolCom // set scen scenarios / 1*10 /; scalar timer,delta; parameter handle(scen) store the instance handle xhandle(scen) extra handle; option handle:0; %libmodel%.solvelink = %solveLink.asyncGrid%; // turn on grid option %libmodel%.limcol = 0; %libmodel%.limrow = 0; %libmodel%.solprint = %solPrint.quiet%; * create models and submit jobs timer = timeelapsed; loop(scen, Solve %libmodel% using %libobj%; handle(scen) = %libmodel%.handle ); // save instance handle delta = timeelapsed-timer; display 'time to submit jobs ',delta; * wait until all jobs have completed using handelstatus * * handlestatus = %handleStatus.unknown% (0) bad handle * %handleStatus.running% (1) ok handle but not ready * %handleStatus.ready% (2) model solved (we found a directory \finished) xhandle(scen) = handle(scen); timer = timeelapsed; while(card(xhandle) and (timeelapsed-timer) < 10, xhandle(scen)$(handlestatus(handle(scen))=%handleStatus.ready%) = 0; execute$card(xhandle) 'sleep 1' ); delta = timeelapsed-timer; display 'time to wait for completion',delta; abort$card(xhandle) 'jobs did not complete', xhandle; * now we resubmit all jobs using the function handlesubmit * this assumes the resubmit script gmsrerun.cmd (or the Unix * equivalent) is sitting in the grid dir * * handlesubmit = 0 submitted gmsrerun.cmd OK and ..\finished has been removed * n any kind of bad thing, will raise an exec error timer = timeelapsed; xhandle(scen) = handlesubmit(handle(scen)); delta = timeelapsed-timer; display 'time to resubmit jobs',delta; abort$card(xhandle) 'some resubmits failed', xhandle; parameter repy(scen,*) summary report; repy(scen,'solvestat') = na; repy(scen,'modelstat') = na; parameter shandle(scen) Copy of handle; shandle(scen) = handle(scen); * we use the handle parameter to indicate that the solution has been loaded. timer = timeelapsed; while(card(handle) and (timeelapsed-timer) < 10, // try to recover all solutions loop(scen$handle(scen), if(handlestatus(handle(scen))=%handleStatus.ready%, // process solutions which are ready %libmodel%.handle = handle(scen); // assign handle to extract solution execute_loadhandle %libmodel%; // load point repy(scen,'solvestat') = %libmodel%.solvestat; repy(scen,'modelstat') = %libmodel%.modelstat; repy(scen,'resusd' ) = %libmodel%.resusd; repy(scen,'objval') = %libmodel%.objval; handle(scen) = 0)) ; // indicate that we have loaded the solution display 'remaining handles', handle; execute$card(handle) 'sleep 1' ); delta = timeelapsed-timer; display 'time to extract solutions',delta; display repy; abort$card(handle) 'Some jobs did not complete',handle; * Delete Grid directories handle(scen) = handledelete(shandle(scen)); abort$card(handle) 'Some job directories could not be removed', handle;