Francesco Casella
Wed, 16 Dec 2009 09:31:35 -0800
Hi Arquimedes,
I have read the Open Modelica Compiler Phases document and it gives a very good high-level perspective on how the omc works. I have also read some of the related papers on the omc compiler and this is where things start getting fuzzy.
I'd suggest you to also read the books by Tiller and by Fritzson about Modelica :)
While I can see the benefit of ordering the dependency matrix in BLT form for reducing the reaching definitions of variables for parallelization, I don't fully understand why this step is necessary for generating uniprocessor code. Is it to reduce the complexity of the matrix manipulation algorithms ? How does the BLT form affect the quality of the generated code, in the case of uniprocessor ?.
Even with a single thread, in general it is obviously easier to solve N smaller systems than one, single, bigger system.
Concerning the numerical solver selection, I have seen the ongoing discussion about DAEs with index > 1. It seems that DAEs are passed to the index reduction and if the resulting system has an index == 1 then we can easily solve with fixed-step ODE solvers, Runge-Kutta methods for example. However, if the index > 1, are we forced to use DASSL ?.
No, if the system has index > 1, symbolic index reduction is applied to reduce it to index = 1, no matter what solver is later used. BTW, DASSL cannot handle index>1 DAEs.
What criteria does openmodelica apply for the selection of DASSL or Euler ?
DASSL is a high-order, variable step size BDF solver, with support for event handling. Euler is a simple one-step, first order solver, usually employed at fixed time step for real-time simulation.
An excellent source to know more about this is the book by Petzold and Ascher "Computer Methods for ordinary differential equations and differential-algebraic equations.
Note that OMC conceptually brings the DAE into ODE form before linking to a solver, so even if DASSL is used, it is used as an ode solver.
I know this is highly dependent on the problem itself, but how often do you get systems with index >= 2 ?
In mechanical systems, every time you make a rigid connection, you get index = 3.
In electrical circuit, you get index=2 whenever connect condensers in parallel, or inductors in series.
How do you handle them ?
Pantelides' algorithm + dummy derivative algorithm. , is it
possible to apply index reduction again and again until we reach our target ?
Yes, if OMC can differentiate the constraint equations enough times.
Finally, I would like to ask about the meaning of 'acausality' inside a Modelica compiler, openmodelica in this case. After deciding the ordering of equations based on their data dependencies and scheduling them, aren't we transforming the 'acausal' system into a 'causal' one
No, if there are algebraic loops (i.e. implicit algebraic equations) in the model.
Hope this helps
Francesco
--
Francesco Casella - Ph.D.
Dipartimento di Elettronica e Informazione
Politecnico di Milano
Via Ponzio 34/5
I-20133 MILANO - ITALY
Tel: +39-02-2399-3465 (Leonardo)
+39-02-2399-7749 (Polo di Cremona)
Fax: +39-02-2399-3412
e-mail: case...@elet.polimi.it
web: http://home.dei.polimi.it/casella
Skype: callto://francesco.casella