Description
With GAMS 24.2 some new options for execute_unload were introduced: - option gdxUELs=[squeezed|full]; If gdxUELs is set to squeezed (new default) only the UELs that are required by the exported symbols are exported (compared to all UELs with gdxUELs=full). Also, Aliases should be exported as Aliases and not as Sets anymore. - Execute_UnloadDI This new keyword does not only write the defined symbols to GDX but also the domain sets. Contributor: Lutz Westermann, August 2013
Small Model of Type : GAMS
Category : GAMS Test library
Main file : unload10.gms
$title 'Test unload options new with GAMS 24.2' (UNLOAD10,SEQ=614)
$onText
With GAMS 24.2 some new options for execute_unload were introduced:
- option gdxUELs=[squeezed|full];
If gdxUELs is set to squeezed (new default) only the UELs that are required by
the exported symbols are exported (compared to all UELs with gdxUELs=full).
Also, Aliases should be exported as Aliases and not as Sets anymore.
- Execute_UnloadDI
This new keyword does not only write the defined symbols to GDX but also the
domain sets.
Contributor: Lutz Westermann, August 2013
$offText
set dummy / d1*d10 /
i / i1* i3 /;
* Export only i but all UELs
option gdxUELs=full;
execute_unload 'aFull' i;
* Export only i with just the used UELs
option gdxUELs=squeezed;
execute_unload 'aSqzd' i;
execute 'gdxdiff aFull.gdx aSqzd.gdx > %system.nullfile%';
abort$errorlevel 'GdxUELs option should not influenece the content of the written file';
execute 'wc -c aFull.gdx | sed s/a.*// > "%gams.scrdir%aFull.%gams.scrext%"';
execute 'wc -c aSqzd.gdx | sed s/a.*// > "%gams.scrdir%aSqzd.%gams.scrext%"';
$onEchoV > checkSize.gms
scalar %fileA% size of %fileA% /
$include "%inDir%%fileA%.%gams.scrext%"
/
%fileB% size of %fileB% /
$include "%inDir%%fileB%.%gams.scrext%"
/;
$if set expectG abort$(%fileA%<=%fileB%) "wrong file sizes";
$if set expectE abort$(%fileA%<>%fileB%) "wrong file sizes";
$offEcho
execute 'gams checkSize.gms --inDir="%gams.scrdir%" --fileA=aFull --fileB=aSqzd --expectG=1 lo=%GAMS.lo%';
abort$errorlevel 'GDX file with squeezed UELs should be smaller than the one with full UELs';
* GAMS 24.1 and older wrote aliases as sets
* Execute_unload (squeezed) writes aliases as aliases
alias (i,j);
option gdxUELs=squeezed;
execute_unload 'aliasExp.gdx' dummy,i,j;
execute 'wc -c aliasAll.gdx | sed s/a.*// > "%gams.scrdir%aliasAll.%gams.scrext%"';
execute 'wc -c aliasExp.gdx | sed s/a.*// > "%gams.scrdir%aliasExp.%gams.scrext%"';
execute 'gams checkSize.gms --inDir="%gams.scrdir%" --fileA=aliasAll --fileB=aliasExp --expectG=1 lo=%GAMS.lo%';
abort$errorlevel 'GDX file with alias should be smaller than GDX file with set';
* This will write a set j and an alias k
execute_unload 'rename.gdx' j=k,i=j;
set ii(i) / i2*i3 /
iii(ii) / i2 /
h(ii) / i3 /;
* The following exported the second symbol as alias of the first one mistakenly, see #3309
execute_unload "noAlias.gdx", dummy=i, i=dummy;
execute "gdxdump noAlias.gdx | grep -iw alias";
abort$(errorlevel=0) 'GDX file noAlias.gdx should not contain an alias';
* Unload with domain information
execute_unloaddi 'dom1.gdx' iii;
execute_unload 'dom1want.gdx' iii,ii,i;
execute 'gdxdiff dom1.gdx dom1want.gdx > %system.nullfile%';
abort$errorlevel 'Execute_unloaddi should write complete domain info';
* If domain is also exported explicitly with another name it will be an alias
execute_unloaddi 'dom2.gdx' iii,h,i=k;
execute_unloaddi 'dom2want.gdx' iii,h,ii,i,i=k;
execute 'gdxdiff dom1.gdx dom1want.gdx > %system.nullfile%';
abort$errorlevel 'Execute_unloaddi should write complete domain info';
* If an alias is used as domain, the alias will be written as set
parameter parj(j) /#j 1/;
execute_unloaddi 'dom3.gdx' parj;
execute_unload 'dom3want.gdx' parj,j;
execute 'gdxdiff dom3.gdx dom3want.gdx CmpDomains > %system.nullfile%';
abort$errorlevel 'Execute_unloaddi should write complete domain info';
* If an alias is used as domain, the alias will be written as set and if the
* aliased set is defined with itself as domain [k(k)], the alias will be written
* as set with itself as domain [ka(ka)].
Set k(k) /k1*k3/;
Alias (k,ka);
Parameter park(ka) /#k 1/;
execute_unloaddi 'dom4.gdx' park;
$onEcho > dom4.gms
Set ka(ka) /k1*k3/;
Parameter park(ka) /#ka 1/;
$offEcho
execute 'gams dom4.gms lo=%GAMS.lo% gdx=dom4want';
execute 'gdxdiff dom4.gdx dom4want.gdx CmpDomains > %system.nullfile%';
abort$errorlevel 'Execute_unloaddi should write complete domain info';
* If domain conflicts with explicitly exported symbol, we should see an error
$onEcho > wantError.gms
set i /i/, ii(i) /i/, d /d/;
execute_unloaddi 'error.gdx' ii, d=i;
$if errorfree $abort 'If domain conflicts with explicitly exported symbol, we should see an error'
$clearError
$offEcho
execute 'gams wantError.gms a=c lo=%GAMS.lo%';
abort$errorlevel 'If domain conflicts with explicitly exported symbol, we should see an error';
* Check that command line gdx export, execute_unload all and execute_unloaddi all lead to the same gdx file
$onEcho > expAll.gms
set dummy / d1*d10 /
i / i1* i3 /
ii(i,i) /i2.#i /;
alias (i,j,k);
execute_unload 'allEU';
execute_unloaddi 'allDI';
$offEcho
execute 'gams expAll.gms lo=%GAMS.lo% gdx=allCL';
abort$errorlevel 'Error in expAll.gms';
execute 'gdxdiff allEU.gdx allCL.gdx > %system.nullfile%';
abort$errorlevel 'Execute_unload all and export from command line should create the same GDX file';
execute 'gdxdiff allDI.gdx allCL.gdx > %system.nullfile%';
abort$errorlevel 'Execute_unloadDI all and export from command line should create the same GDX file';
alias (*,u);
execute_unload 'uniSqzd' u,i;
option gdxUELs=Full;
execute_unload 'uniFull' u,i;
execute 'gdxdiff uniSqzd.gdx uniFull.gdx > %system.nullfile%';
abort$errorlevel 'Execute_unload containing a universe should write same file squeezed and full';