$title CONVERT test suite - test hessian info correctness (CONVERT7,SEQ=419) $onText Do some consistency checks on the full Hessian and the Hessian-vector products dumped out by CONVERT. Currently, there are flags to do this for NLP models in gamslib. Run it like this: gams convert7.gms --gmsName=chenery --modelName=chenrad --modelType=NLP --objName=td Contributor: Steve Dirkse $offText $if not set gmsName $set gmsName chenery $if not set modelName $set modelName chenrad $if not set modelType $set modelType NLP $if not set objName $set objName td $call gamslib -q %gmsName% $if errorlevel 1 $abort 'gamslib %gmsName% failed' $onEcho > convert.opt dumpgdx %gmsName%.gdx gdxhessian 1 gdxquadratic 1 $offEcho $onEcho > %gmsName%TestHess.gms $include %gmsName%HessDump.gms alias(j,jj); scalar tol / 1e-9 /; parameters testW(j,j) 'Hession of the Lagrangian - upper triangle - calculated' testFullW(j,j) 'full version of testW' testWe(j) 'product testW * e' diffW(j,j), errW(j,j) diffWe(j), errWe(j) ; testW(j,jj) = sum(i, h(i,j,jj)* (-e.m(i))); testFullW(j,jj) = testW(j,jj) + testW(jj,j); testFullW(j,j) = testW(j,j); testWe(j) = sum(jj, testFullW(j,jj) * 1); diffW(j,jj) = testW(j,jj) - W(j,jj); errW(j,jj) = diffW(j,jj); errW(j,jj)$[abs(errW(j,jj)) < tol] = 0; diffWe(j) = testWe(j) - We(j); errWe(j) = diffWe(j); errWe(j)$[abs(errWe(j)) < tol] = 0; execute_unload '%gmsName%HessFinal' abort$[card(errW ) > 0] 'errors comparing testW and W'; abort$[card(errWe) > 0] 'errors comparing testWe and We'; $offEcho $include %gmsName% option %modelType%=convert; %modelName%.optfile=1; Solve %modelName% using %modelType% maximizing %objName% ; abort$(%modelName%.solvestat <> %solveStat.normalCompletion% or %modelName%.modelstat <> %modelStat.noSolutionReturned%) 'wrong status codes'; scalar rc; execute 'gdxdump %gmsName%.gdx > %gmsName%HessDump.gms'; execute 'gams %gmsName%TestHess.gms lo=%GAMS.lo%'; rc=errorlevel; display rc; abort$(rc <> 0) '"gams %gmsName%TestHess.gms" gave nonzero return';