@@ -80,7 +80,7 @@ Bool evalfG(Index n, double * vopt, Bool new_x, int m, Number *g, void * useData
8080 const int index_con = optData -> dim .index_con ;
8181
8282 modelica_real * * * v ;
83- long double * a [ np ];
83+ long double a [ 5 ][ 5 ];
8484 long double * sdt ;
8585 double * vv [np + 1 ];
8686 int i , j , k , shift ;
@@ -89,21 +89,17 @@ Bool evalfG(Index n, double * vopt, Bool new_x, int m, Number *g, void * useData
8989 optData2ModelData (optData , vopt , 1 );
9090
9191 v = optData -> v ;
92-
93- for (j = 0 ; j < np ; ++ j )
94- a [j ] = optData -> rk .a [j ];
92+ memcpy (a ,optData -> rk .a , sizeof (optData -> rk .a ));
9593
9694 vv [0 ] = optData -> sv0 ;
97- for (j = 0 ; j < np ; ++ j ){
98- vv [j + 1 ] = vopt + j * nv ;
95+ vv [1 ] = vopt ;
96+ for (j = 1 ; j < np ; ++ j ){
97+ vv [j + 1 ] = vv [j ] + nv ;
9998 }
10099
101- for (i = 0 , shift = 0 ; i < nsi ; ++ i ){
102-
103- sdt = optData -> bounds .scaldt [i ];
104-
105- if (np == 3 ){
106-
100+ if (np == 3 ){
101+ for (i = 0 , shift = 0 ; i < nsi ; ++ i ){
102+ sdt = optData -> bounds .scaldt [i ];
107103 /*1*/
108104 for (k = 0 ; k < nx ; ++ k ){
109105 g [shift ++ ] = (a [0 ][0 ]* vv [0 ][k ] + a [0 ][3 ]* vv [3 ][k ] + sdt [k ]* v [i ][0 ][k + nx ])
@@ -127,18 +123,22 @@ Bool evalfG(Index n, double * vopt, Bool new_x, int m, Number *g, void * useData
127123 }
128124 memcpy (g + shift , & v [i ][2 ][index_con ], nc * sizeof (double ));
129125 shift += nc ;
130-
131- }else if (np == 1 ){
126+ vv [0 ] = vv [np ];
127+ for (j = 0 ; j < np ; ++ j )
128+ vv [j + 1 ] = vv [j ] + nv ;
129+ }
130+ }else if (np == 1 ){
131+ for (i = 0 , shift = 0 ; i < nsi ; ++ i ){
132+ sdt = optData -> bounds .scaldt [i ];
132133 for (k = 0 ; k < nx ; ++ k )
133134 g [shift ++ ] = vv [0 ][k ] + (sdt [k ]* v [i ][0 ][k + nx ] - vv [1 ][k ]);
134135
135136 memcpy (g + shift , & v [i ][0 ][index_con ], nc * sizeof (double ));
136137 shift += nc ;
138+ vv [0 ] = vv [np ];
139+ for (j = 0 ; j < np ; ++ j )
140+ vv [j + 1 ] = vv [j ] + nv ;
137141 }
138-
139- vv [0 ] = vv [np ];
140- for (j = 0 ; j < np ; ++ j )
141- vv [j + 1 ] = vv [j ] + nv ;
142142 }
143143 if (ACTIVE_STREAM (LOG_IPOPT_ERROR )){
144144 const int nJ = optData -> dim .nJ ;
0 commit comments