$title Test the syntax of the model statement for limited domains for variables (limdom03,SEQ=814) $onText With GAMS 31 we introduced the capability to limit the domain of variables in the model statement. This test makes sure, that the syntax for this works as expected. Contributor: Lutz Westermann, March 2020 $offText Set i / i1 * i3 / j / j1 * j3 /; Set sub (i,j) /i2. j2 / sub2(i,j) /i2.(j2,j3)/ sub3(j,j) /j2.(j2,j3)/ sub4(*,*) /i2.(j2,j3)/ sub5(i,j) sub6; Positive Variable x(i,j); Variable z; Equation obj Dummy objective function; obj.. z =e= sum((i,j), x(i,j)); Model m1 / obj /; solve m1 min z use lp; abort$(m1.numVar<>10) 'Expected 10 variables in complete model' Model m2 / obj, x(sub) /; solve m2 min z use lp; abort$(m2.numVar<>2) 'Expected 2 variables in DL model' * This should be a noOpt Model m3 / m1 - x /; solve m3 min z use lp; abort$(m3.numVar<>10) 'Expected 10 variables in complete model' * This should be a noOpt Model m4 / m1 - x(sub) /; solve m4 min z use lp; abort$(m4.numVar<>10) 'Expected 10 variables in complete model' * This should remove the DL part of m2 Model m5 / m2 - x /; solve m5 min z use lp; abort$(m5.numVar<>10) 'Expected 10 variables in complete model' * This should replace the previous defined DL part of m2 Model m6 / m2 + x(sub2) /; solve m6 min z use lp; abort$(m6.numVar<>3) 'Expected 3 variables in complete model' *** The following examples should trigger errors *** * This should give an error since x(sub2) was never added Model e1 / m2 - x(sub2) /; $if errorfree $abort 'This should give an error since x(sub2) was never added' $clearError * This should give an error since x has a DL condition already Model e2 / m2, x(sub2) /; $if errorfree $abort 'This should give an error since x has a DL condition already' $clearError * This should give an error since x needs a limiting set Model e3 / obj, x /; $if errorfree $abort 'This should give an error since x needs a limiting set' $clearError * This should give an error since x needs a limiting set Model e4 / obj + x /; $if errorfree $abort 'This should give an error since x needs a limiting set' $clearError * This should give an error since x and sub3 have no matching domain Model e5 / obj + x(sub3) /; $if errorfree $abort 'This should give an error since x and sub3 have no matching domain' $clearError * This should give an error since x and sub4 have no matching domain Model e6 / obj + x(sub4) /; $if errorfree $abort 'This should give an error since x and sub4 have no matching domain' $clearError * This should give an error since sub5 is not initialized Model e7 / obj + x(sub5) /; Solve e7 min z use lp; $if errorfree $abort 'This should give an error since sub5 is not initialized' $clearError * This should give an error since sub6 has no known dimension Model e8 / obj + x(sub6) /; $if errorfree $abort 'This should give an error since sub6 has no known dimension' $clearError * This should give an error since we use a domain limitation on a variable with suffix Equation suf; suf.. z =l= sum((i,j), x.l(i,j)); Model e9 / obj, suf, x(sub) /; Solve e9 min z use lp; $if errorfree $abort 'This should give an error since we use a domain limitation on a variable with suffix' $clearError * This should make the last error disappear $onSuffixDLVars Solve e9 min z use lp;