More explicit message when the Dulmage-Mendelsohn decomposition returns a non-square block

Closes: #1851
mr#2067
Sébastien Villemot 2022-06-16 15:53:45 +02:00
parent 9323338323
commit fa71d4712d
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
2 changed files with 6 additions and 1 deletions

View File

@ -229,6 +229,9 @@ elseif ismember(options.solve_algo, [2, 12, 4])
fre = false;
for i=length(r)-1:-1:1
blocklength = r(i+1)-r(i);
if s(i+1)-s(i) ~= blocklength
error('DYNARE_SOLVE (solve_algo=2|4|12): the Dulmage-Mendelsohn decomposition returned a non-square block. This means that the Jacobian is singular. You may want to try another value for solve_algo.')
end
if options.debug
dprintf('DYNARE_SOLVE (solve_algo=2|4|12): solving block %u of size %u.', i, blocklength);
end

View File

@ -207,7 +207,9 @@ subroutine mexFunction(nlhs, plhs, nrhs, prhs) bind(c, name='mexFunction')
f_indices => blocks(i)%row_indices
x_all => x
if (size(x_indices) /= size(f_indices)) then
call mexErrMsgTxt("Non-square block")
call mexErrMsgTxt("DYNARE_SOLVE (solve_algo=13|14): the Dulmage-Mendelsohn &
&decomposition returned a non-square block. This means that the &
&Jacobian is singular. You may want to try another value for solve_algo.")
end if
x_block = x(x_indices)
call trust_region_solve(x_block, matlab_fcn, info, tolx, tolf, maxiter, factor)