﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
4396	IDA solver in DAE mode is inefficient with badly scaled systems	Francesco Casella	Willi Braun	"Modelica models are often badly scaled because of the recommended use of variables in SI units, which often causes variables in the same model to differ by many orders of magnitude, up to 15 or more.

The Modelica language allows to define nominal values for the scaling of variables, that can be used to set up properly scaled numerical problems in the runtime code. However, this mechanism seem not to work properly when using the IDA solver in DAE mode.

The attached test case shows clearly the problem. The model is taken from #4395, with the end displacement {{{d_tot}}} no longer being a constant, but rather the solution of the trivial differential equation {{{der(d_tot)=1}}}.

{{{Test1}}} is natively scaled in a benign way, with all variables of the order of unity or, in the worst case, of 1e-3. 

{{{Test2}}} is the same model as {{{Test1}}} with much higher stiffness constants, so that some of the unknowns during integration (the vector {{{F[N]}}}) now have order of magnitude 1e8. Note that, apart from the scaling factor, the solution has exactly the same shape.

{{{Test3}}} is the same model as {{{Test2}}}, with the proper nominal attribute set on the vector {{{F[N]}}}. In principle, if the model gets properly scaled according to this information, {{{Test3}}} should numerically become exactly the same as {{{Test1}}}, and thus take more or less the same time to be solved. Note that is is only true if both the variables and the residuals are properly scaled.

The following table summarizes the results obtained on my PC with running omc {{{v1.12.0-dev-354-gadf56d3}}} on Windows

|| Test || Steps || functionODE calls || Jacobian evaluations || Simulation time ||
|| Test1 ||18||33||16|| 8.17||
|| Test2 ||16||26||14|| 97.30||
|| Test3 ||16||26||14|| 100.85||

Analyzing the results, one can take the following conclusions 
- the number of steps is only decided by the trivial differential equation, and is thus roughly constant
- the time spent solving each step grows 10-fold for the badly scaled problem, though this only basically reflects a change in the units of variable {{{F[N]}}}, not a change in the nature of the problem
- setting the nominal attribute on the badly scaled variables does not improve the situation - in fact, it makes it slightly worse

One can expect that similar problems will arise when using IDA in DAE mode to solve real-life problems;  as soon as the units of the variables are such that their order of magnitude is much different, there will be a performance penalty of one order of magnitude (or possibly more, for larger models) in terms of simulation time.

I would suggest to investigate why this happens and to introduce the appropriate corrective measures, so that the simulation time of models {{{Test1}}} and {{{Test3}}} becomes comparable."	defect	new	high	1.12.0	Run-time				
