Skip to content

Commit 994fb6a

Browse files
author
Vitalij Ruge
committed
- radau, lobatto code style
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@15414 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 117822f commit 994fb6a

File tree

4 files changed

+48
-50
lines changed

4 files changed

+48
-50
lines changed

SimulationRuntime/c/simulation/simulation_runtime.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,11 @@ int callSolver(DATA* simData, string result_file_cstr, string init_initMethod,
735735
#endif
736736
} else {
737737
INFO1(LOG_STDOUT, " | Unrecognized solver: %s.", simData->simulationInfo.solverMethod);
738+
#ifdef WITH_SUNDIALS
739+
INFO(LOG_STDOUT, " | valid solvers are: dassl, euler, rungekutta, inline-euler, inline-rungekutta, dasslwort, dasslSymJac, dasslNumJac, dasslColorSymJac, dasslInternalNumJac, qss, radau1, radau3, radau5, lobatto2, lobatto4");
740+
#else
738741
INFO(LOG_STDOUT, " | valid solvers are: dassl, euler, rungekutta, inline-euler, inline-rungekutta, dasslwort, dasslSymJac, dasslNumJac, dasslColorSymJac, dasslInternalNumJac, qss.");
742+
#endif
739743
retVal = 1;
740744
}
741745

SimulationRuntime/c/simulation/solver/radau.c

Lines changed: 37 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -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

426430
static 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

497497
static 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

552550
static 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

632630
static 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

684681
static 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;

SimulationRuntime/c/simulation/solver/radau.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@
104104
#endif /* SUNDIALS */
105105
int allocateKinOde(DATA* data, SOLVER_INFO* solverInfo, int flag, int N);
106106
int freeKinOde(DATA* data, SOLVER_INFO* solverInfo, int flag, int N);
107-
107+
int kinsolOde(void* ode);
108108
#ifdef __cplusplus
109109
};
110110
#endif

SimulationRuntime/c/simulation/solver/solver_main.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -815,48 +815,47 @@ static int rungekutta_step(DATA* data, SOLVER_INFO* solverInfo)
815815
/*************************************** Radau5 IIA ***********************************/
816816
int radau5_step(DATA* data, SOLVER_INFO* solverInfo)
817817
{
818-
819-
kinsolOde(solverInfo->solverData, 3, data, 6);
818+
kinsolOde(solverInfo->solverData);
820819
solverInfo->currentTime += solverInfo->currentStepSize;
821820
return 0;
822821
}
823822

824823
/*************************************** Radau3 IIA ***********************************/
825824
int radau3_step(DATA* data, SOLVER_INFO* solverInfo)
826825
{
827-
kinsolOde(solverInfo->solverData, 2, data, 7);
826+
kinsolOde(solverInfo->solverData);
828827
solverInfo->currentTime += solverInfo->currentStepSize;
829828
return 0;
830829
}
831830

832831
/*************************************** Radau1 IIA ***********************************/
833832
int radau1_step(DATA* data, SOLVER_INFO* solverInfo)
834833
{
835-
kinsolOde(solverInfo->solverData, 1, data, 8);
834+
kinsolOde(solverInfo->solverData);
836835
solverInfo->currentTime += solverInfo->currentStepSize;
837836
return 0;
838837
}
839838

840839
/*************************************** Lobatto2 IIA ***********************************/
841840
int lobatto2_step(DATA* data, SOLVER_INFO* solverInfo)
842841
{
843-
kinsolOde(solverInfo->solverData, 1, data, 9);
842+
kinsolOde(solverInfo->solverData);
844843
solverInfo->currentTime += solverInfo->currentStepSize;
845844
return 0;
846845
}
847846

848847
/*************************************** Lobatto4 IIA ***********************************/
849848
int lobatto4_step(DATA* data, SOLVER_INFO* solverInfo)
850849
{
851-
kinsolOde(solverInfo->solverData, 2, data, 10);
850+
kinsolOde(solverInfo->solverData);
852851
solverInfo->currentTime += solverInfo->currentStepSize;
853852
return 0;
854853
}
855854

856855
/*************************************** Lobatto6 IIA ***********************************/
857856
int lobatto6_step(DATA* data, SOLVER_INFO* solverInfo)
858857
{
859-
kinsolOde(solverInfo->solverData, 3, data, 11);
858+
kinsolOde(solverInfo->solverData);
860859
solverInfo->currentTime += solverInfo->currentStepSize;
861860
return 0;
862861
}

0 commit comments

Comments
 (0)