﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
1111	wrong results due to mix up in matrices!	Schubert TUD	Schubert TUD	"Hi,

I found another problem which I consider critical, since it causes the results to be corrupted.
It is best illustrated by the following model:

model MatrixMixUp
  Real[2,2] A;
  parameter Real t=3;
equation
  A = {{1,0}, 
       {0,sin(t)}};
end MatrixMixUp;

Simulating the model gives no error and the result seems to be fine until you look closer at the generated C-code:

#define $A$lB2$c1$rB localData->algebraics[3]  // A[2,1]
#define $A$lB1$c2$rB localData->algebraics[2]  // A[1,2]
#define $A$lB1$c1$rB localData->algebraics[1]  // A[1,1]
#define $A localData->algebraics[1]
#define $t localData->parameters[0]
#define $A$lB2$c2$rB localData->algebraics[0]  // A[2,2]

Surprisingly, within the array ""algebraics"", the element A[2,2] comes before all the other elements of the same matrices.
While this does not cause problems in this simple model, it is fatal in a complexer one. Sometimes, OpenModelica carries out calculations using matrices directly. The corresponding command looks like

real_array tmp0;
real_array tmp1;
real_array tmp2;
real_array_create(&tmp0, &$A, 2, 2, 2);
...
mul_alloc_real_matrix_product_smart(&tmp2, &tmp0, &tmp1);

The real array structure requires all matrix elements to be aligned properly, otherwise they will be mixed up (which is what happened in my case)
Supposedly, these matrix elements are treated differently since they contain constants and expressions respectively.

Regards,

Christian Schubert"	defect	closed	high		Simulation Code Generation	1.4.5	fixed		Schubert TUD
