|Reported by:||hmartin||Owned by:||andreasw|
I solve a large scale NLP, in which the jacobian is sometimes ill conditionned. Whereas MA27 works fine on this problem (typically, the residual ratio of the linear system before iterative refinement is of the order 1e-10), MA57 fails to factorize the matrix unless I increase the pivot threshold to values like 0.01.
By playing with the MA57 options, I found that it is due to the automatic scaling with MC64 included in MA57. If I deactivate it, MA57 recovers the same stability as MA27, with the default pivot threshold. I suggest then the MA57 scaling to become an Ipopt option, as it does not seem to always be beneficial.
On a different topic, I tried to improve the memory consumption of MA57 by lowering ma57_pre_alloc. Indeed, on my problem the symbolic factorization estimates the needed memory to 400MB, but the actual memory needed is around 700. With the default pre_alloc of 3, 1200MB are allocated... I think it would be better to use a smaller ma57_pre_alloc, but to also use it for reallocations. In this way, the memory needed by the linear solver would be much reduced, to the price of only 1 reallocation in most cases. I also found that sometimes the copy of the factorization data to a new larger array fails in MA57, due to an initialized wd_keep_ array. I do not know if it is a compiler bug, or a MA57 bug, but anyway it can be fixed by initializing wd_keep_ to 0.
Please find attached my modified IpMa57TSolverInterface.cpp, hoping it can be useful.