@@ -251,6 +251,7 @@ static int allocateKINSOLODE(KINODE *kinOde)
251251 int nn = 3 * N * n ; /* 3*N = N*(subintervalls) * 3*var(eq,low,up) */
252252 int i , j , k ;
253253 double * ceq ,* clow ,* cup ;
254+ double * seq ,* slow ,* sup ;
254255 double * sveq ,* svlow ,* svup ;
255256 KDATAODE * kData = (kinOde )-> kData ;
256257 NLPODE * nlp = kinOde -> nlp ;
@@ -266,6 +267,9 @@ static int allocateKINSOLODE(KINODE *kinOde)
266267 sveq = NV_DATA_S (kData -> sVars );
267268 svlow = sveq + N * n ;
268269 svup = svlow + N * n ;
270+ seq = NV_DATA_S (kData -> sEqns );
271+ slow = seq + N * n ;
272+ sup = slow + N * n ;
269273
270274 for (j = 0 , k = 0 ; j < N ; j ++ )
271275 {
@@ -277,6 +281,8 @@ static int allocateKINSOLODE(KINODE *kinOde)
277281 sveq [k ] = s [i ];
278282 svlow [k ] = s [i ];
279283 svup [k ] = s [i ];
284+ slow [k ] = s [i ];
285+ sup [k ] = s [i ];
280286 }
281287 }
282288 KINSetUserData (kinOde -> kData -> kmem , (void * ) kinOde );
@@ -395,8 +401,6 @@ static int initKinsol(KINODE *kinOde)
395401 xup [k ] = xeq [k ] - nlp -> max [i ];
396402 tmp = 1.0 /(fabs (nlp -> x0 [i ] - xeq [k ]) + 1e-6 );
397403 seq [k ] = tmp ;
398- slow [k ] = tmp ;
399- sup [k ] = tmp ;
400404 }
401405 }
402406
@@ -425,7 +429,7 @@ static int refreshModell(DATA* data, double* x, double time)
425429
426430static int radau5Res (N_Vector x , N_Vector f , void * user_data )
427431{
428- int i ,sub2 , sub3 ;
432+ int i ,k ;
429433 KINODE * kinOde = (KINODE * )user_data ;
430434 NLPODE * nlp = kinOde -> nlp ;
431435 DATA * data = kinOde -> data ;
@@ -463,40 +467,36 @@ static int radau5Res(N_Vector x, N_Vector f, void* user_data)
463467 feq [i ] = (nlp -> c [0 ][0 ]* x0 [i ] + nlp -> c [0 ][3 ]* x3 [i ] + h * derx [i ]) -
464468 (nlp -> c [0 ][1 ]* x1 [i ] + nlp -> c [0 ][2 ]* x2 [i ]);
465469
466-
467470 flow [i ] = xlow [i ] - x1 [i ] + lb [i ];
468471 fup [i ] = xup [i ] - x1 [i ] + ub [i ];
469472 }
470473
471474 refreshModell (data , x2 ,t0 + a [1 ]* h );
472- for (i = 0 ; i < n ;i ++ )
475+ for (i = 0 , k = n ; i < n ; i ++ , k ++ )
473476 {
474- sub2 = i + n ;
475-
476- feq [sub2 ] = (nlp -> c [1 ][1 ]* x1 [i ] + h * derx [i ]) -
477+ feq [k ] = (nlp -> c [1 ][1 ]* x1 [i ] + h * derx [i ]) -
477478 (nlp -> c [1 ][0 ]* x0 [i ] + nlp -> c [1 ][2 ]* x2 [i ] + nlp -> c [1 ][3 ]* x3 [i ]);
478479
479- flow [sub2 ] = xlow [sub2 ] - x2 [i ] + lb [i ];
480- fup [sub2 ] = xup [sub2 ] - x2 [i ] + ub [i ];
480+ flow [k ] = xlow [k ] - x2 [i ] + lb [i ];
481+ fup [k ] = xup [k ] - x2 [i ] + ub [i ];
481482 }
482483
483- refreshModell (data , x3 , t0 + a [ 2 ] * h );
484- for (i = 0 ;i < n ;i ++ )
484+ refreshModell (data , x3 , t0 + h );
485+ for (i = 0 ;i < n ;i ++ , k ++ )
485486 {
486- sub3 = i + 2 * n ;
487- feq [sub3 ] = (nlp -> c [2 ][0 ]* x0 [i ] + nlp -> c [2 ][2 ]* x2 [i ] + h * derx [i ]) -
487+ feq [k ] = (nlp -> c [2 ][0 ]* x0 [i ] + nlp -> c [2 ][2 ]* x2 [i ] + h * derx [i ]) -
488488 (nlp -> c [2 ][1 ]* x1 [i ] + nlp -> c [2 ][3 ]* x3 [i ]);
489489
490- flow [sub3 ] = xlow [sub3 ] - x3 [i ] + lb [i ];
491- fup [sub3 ] = xup [sub3 ] - x3 [i ] + ub [i ];
490+ flow [k ] = xlow [k ] - x3 [i ] + lb [i ];
491+ fup [k ] = xup [k ] - x3 [i ] + ub [i ];
492492 }
493493
494494 return 0 ;
495495}
496496
497497static int radau3Res (N_Vector x , N_Vector f , void * user_data )
498498{
499- int i ,sub2 , N ;
499+ int i ,k , N ;
500500 KINODE * kinOde = (KINODE * )user_data ;
501501 NLPODE * nlp = kinOde -> nlp ;
502502 DATA * data = kinOde -> data ;
@@ -534,15 +534,13 @@ static int radau3Res(N_Vector x, N_Vector f, void* user_data)
534534 fup [i ] = xup [i ] - x1 [i ] + ub [i ];
535535 }
536536
537- refreshModell (data , x2 ,t0 + a [ 1 ] * h );
538- for (i = 0 ;i < n ;i ++ )
537+ refreshModell (data , x2 ,t0 + h );
538+ for (i = 0 , k = n ;i < n ;i ++ , k ++ )
539539 {
540- sub2 = i + n ;
541-
542- feq [sub2 ] = (nlp -> c [1 ][1 ]* x1 [i ] + h * derx [i ]) -
540+ feq [k ] = (nlp -> c [1 ][1 ]* x1 [i ] + h * derx [i ]) -
543541 (nlp -> c [1 ][0 ]* x0 [i ] + nlp -> c [1 ][2 ]* x2 [i ]);
544- flow [sub2 ] = xlow [sub2 ] - x2 [i ] + lb [i ];
545- fup [sub2 ] = xup [sub2 ] - x2 [i ] + ub [i ];
542+ flow [k ] = xlow [k ] - x2 [i ] + lb [i ];
543+ fup [k ] = xup [k ] - x2 [i ] + ub [i ];
546544 }
547545
548546 return 0 ;
@@ -551,7 +549,7 @@ static int radau3Res(N_Vector x, N_Vector f, void* user_data)
551549
552550static int radau1Res (N_Vector x , N_Vector f , void * user_data )
553551{
554- int i ,sub2 , N ;
552+ int i , N ;
555553 KINODE * kinOde = (KINODE * )user_data ;
556554 NLPODE * nlp = kinOde -> nlp ;
557555 DATA * data = kinOde -> data ;
@@ -631,7 +629,7 @@ static int lobatto2Res(N_Vector x, N_Vector f, void* user_data)
631629
632630static int lobatto4Res (N_Vector x , N_Vector f , void * user_data )
633631{
634- int i ,sub2 , N ;
632+ int i ,k , N ;
635633 KINODE * kinOde = (KINODE * )user_data ;
636634 NLPODE * nlp = kinOde -> nlp ;
637635 DATA * data = kinOde -> data ;
@@ -671,19 +669,18 @@ static int lobatto4Res(N_Vector x, N_Vector f, void* user_data)
671669 }
672670
673671 refreshModell (data , x2 ,t0 + h );
674- for (i = 0 ;i < n ;i ++ )
672+ for (i = 0 , k = n ;i < n ;i ++ , k ++ )
675673 {
676- sub2 = i + n ;
677- feq [sub2 ] = (2.0 * h * derx [i ] + 16.0 * x1 [i ]) - (8.0 * (x0 [i ] + x2 [i ]) + 2.0 * h * f0 [i ]);
678- flow [sub2 ] = xlow [sub2 ] - x2 [i ] + lb [i ];
679- fup [sub2 ] = xup [sub2 ] - x2 [i ] + ub [i ];
674+ feq [k ] = (2.0 * h * derx [i ] + 16.0 * x1 [i ]) - (8.0 * (x0 [i ] + x2 [i ]) + 2.0 * h * f0 [i ]);
675+ flow [k ] = xlow [k ] - x2 [i ] + lb [i ];
676+ fup [k ] = xup [k ] - x2 [i ] + ub [i ];
680677 }
681678 return 0 ;
682679}
683680
684681static int lobatto6Res (N_Vector x , N_Vector f , void * user_data )
685682{
686- int i ,sub2 , N ;
683+ int i ,k , N ;
687684 KINODE * kinOde = (KINODE * )user_data ;
688685 NLPODE * nlp = kinOde -> nlp ;
689686 DATA * data = kinOde -> data ;
@@ -725,21 +722,19 @@ static int lobatto6Res(N_Vector x, N_Vector f, void* user_data)
725722 }
726723
727724 refreshModell (data , x2 ,t0 + nlp -> a [1 ]* h );
728- for (i = 0 ;i < n ;i ++ )
725+ for (i = 0 , k = n ;i < n ;i ++ , k ++ )
729726 {
730- sub2 = i + n ;
731- feq [sub2 ] = (h * derx [i ] + nlp -> c [1 ][1 ]* x1 [i ]) - (h * nlp -> c [1 ][4 ]* f0 [i ] + nlp -> c [1 ][0 ]* x0 [i ] + nlp -> c [1 ][2 ]* x2 [i ] + nlp -> c [1 ][3 ]* x3 [i ]);
732- flow [sub2 ] = xlow [sub2 ] - x2 [i ] + lb [i ];
733- fup [sub2 ] = xup [sub2 ] - x2 [i ] + ub [i ];
727+ feq [k ] = (h * derx [i ] + nlp -> c [1 ][1 ]* x1 [i ]) - (h * nlp -> c [1 ][4 ]* f0 [i ] + nlp -> c [1 ][0 ]* x0 [i ] + nlp -> c [1 ][2 ]* x2 [i ] + nlp -> c [1 ][3 ]* x3 [i ]);
728+ flow [k ] = xlow [k ] - x2 [i ] + lb [i ];
729+ fup [k ] = xup [k ] - x2 [i ] + ub [i ];
734730 }
735731
736732 refreshModell (data , x3 ,t0 + h );
737- for (i = 0 ;i < n ;i ++ )
733+ for (i = 0 ;i < n ;i ++ , k ++ )
738734 {
739- sub2 = i + 2 * n ;
740- feq [sub2 ] = (h * (f0 [i ] + derx [i ]) + nlp -> c [2 ][0 ]* x0 [i ] + nlp -> c [2 ][2 ]* x2 [i ]) - (nlp -> c [2 ][1 ]* x1 [i ] + nlp -> c [2 ][3 ]* x3 [i ]);
741- flow [sub2 ] = xlow [sub2 ] - x3 [i ] + lb [i ];
742- fup [sub2 ] = xup [sub2 ] - x3 [i ] + ub [i ];
735+ feq [k ] = (h * (f0 [i ] + derx [i ]) + nlp -> c [2 ][0 ]* x0 [i ] + nlp -> c [2 ][2 ]* x2 [i ]) - (nlp -> c [2 ][1 ]* x1 [i ] + nlp -> c [2 ][3 ]* x3 [i ]);
736+ flow [k ] = xlow [k ] - x3 [i ] + lb [i ];
737+ fup [k ] = xup [k ] - x3 [i ] + ub [i ];
743738 }
744739
745740 return 0 ;
0 commit comments