$title External Equation - Example 6 (EX6,SEQ=963) $onText This example demonstrates the use for two Jacobian elements in the external equation that are identified with constant derivatives. $offText Variable x, y, xp, yp, z1, z2, obj; Equation setx, sety, defxz1, defxz2, defz1, defz2, deforder, defobj; setx.. x =e= 0.5 + xp; sety.. y =e= 0.7 + yp; defxz1.. 1*x + 2*y + 3*z1 =x= 1; defxz2.. 1*x + 2*y + 4*z2 =x= 2; defz1.. sin(x) + cos(y) =e= z1; defz2.. cos(x) - sin(y) =e= z2; deforder.. z1 =g= z2 + 0.01; defobj.. obj =e= sqr(xp) + sqr(yp); $ set pre $ifI %system.filesys%==unix $set pre 'lib' $ set suf '64' $set N ex6 $set cN %pre%%N%c%suf% $set fN %pre%%N%f%suf% model %N% 'GAMS implementation' / setx, sety, defz1, defz2, deforder, defobj /; model %cN% 'C External equation with file names communicated' / setx, sety, defxz1, defxz2, deforder, defobj /; option limcol = 0; $onText Check the solution against the targets: $offText parameter report(*,*) Solution Summary; scalar totdist /0/; $onEchoV > runme.gms x.l=0; y.l=0; xp.l=0; yp.l=0; z1.l=0; z2.l=0; obj.l=0; x.m=0; y.m=0; xp.m=0; yp.m=0; z1.m=0; z2.m=0; obj.m=0; setx.l=0; sety.l=0; defxz1.l=0; defxz2.l=0; defz1.l=0; defz2.l=0; deforder.l=0; defobj.l=0; solve %1 using nlp minimizing obj; abort$(%1.solvestat <> 1) 'problems running model %1'; report('x', '%1') = x.l; report('y', '%1') = y.l; report('obj','%1') = obj.l; totdist = totdist + abs(x0 - x.l) + abs(y0 - y.l); $offEcho $ set ext '.dll' $ifI %system.filesys%==unix $set ext '.so' $ifI %system.platform%==dex $set ext '.dylib' $ifI %system.platform%==dax $set ext '.dylib' $ set eq $ifI %system.filesys%==unix $set eq "'" $if set runall $set runC '1' $ifThen not set nocomp $ ifI set runC $call gams complink lo=%gams.lo% --lang=c --files=ex6c.c --libname=%cN%%ext% $ if errorlevel 1 $abort Error compiling C Library $endIf scalar x0 / 0.5 /, y0 / 0.7 /; $ifThenE sameas('%gams.nlp%','conopt')or(sameas('%gams.nlp%','')) $ echo rtzern 1e-15 > conopt.opt %cN%.optfile = 1; $endIf $ batInclude runme %N% $if set runC $batInclude runme %cN% display report; if ((totdist < 1.0E-6), display "@@@@ #Test passed."; else abort totdist, "@@@@ #Test not passed. Inspect ex6.lst for details."; );