Skip to content

Commit fce0e09

Browse files
author
Vitalij Ruge
committed
- restructure data for optimization (continuing)
- quadrature weight git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19859 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent b8e6fa3 commit fce0e09

File tree

4 files changed

+35
-38
lines changed

4 files changed

+35
-38
lines changed

SimulationRuntime/c/optimization/goal/evalF.c

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ Bool evalfF(Index n, double * v, Bool new_x, Number *objValue, void * useData)
7676
for(j=0; j<iData->dim.deg+1; ++j, x+=iData->dim.nv, ++k)
7777
{
7878
goal_func_lagrange(x, &tmp,iData->time[k], iData);
79-
erg += mbase->bl[j]*tmp;
79+
erg += mbase->b[0][j]*tmp;
8080
}
8181
erg_+= erg*iData->dt[i];
8282
}
@@ -87,7 +87,7 @@ Bool evalfF(Index n, double * v, Bool new_x, Number *objValue, void * useData)
8787
for(j=0; j<iData->dim.deg; ++j, x+=iData->dim.nv, ++k)
8888
{
8989
goal_func_lagrange(x, &tmp, iData->time[k], iData);
90-
erg += mbase->br[j]*tmp;
90+
erg += mbase->b[1][j]*tmp;
9191
}
9292

9393
erg_ += erg*iData->dt[i];
@@ -143,32 +143,30 @@ Bool evalfDiffF(Index n, double * v, Bool new_x, Number *gradF, void * useData)
143143
x = v;
144144
id = 0;
145145

146-
for(i=0; i<iData->dim.nsi; ++i){
147-
if(i){
148-
for(k=0; k<iData->dim.deg; ++k, x+=iData->dim.nv){
149-
refreshSimData(x,x+ iData->dim.nx,iData->time[i*iData->dim.deg+k+1],iData);
150-
iData->cv = x;
151-
/*iData->data->callback->functionAlgebraics(iData->data);*/
152-
diff_symColoredObject(iData, iData->gradF, iData->lagrange_index);
153-
for(j = 0; j<iData->dim.nv; ++j){
154-
gradF[id++] = iData->dt[i]*mbase->br[k]*iData->gradF[j]*iData->vnom[j];
155-
/* printf("\n gradF(%i) = %g, %s, %g", id-1, gradF[id-1], iData->data->modelData.realVarsData[j].info.name, x[j]*iData->vnom[j]); */
156-
}
157-
}
158-
}else{
159-
for(k=0; k<iData->dim.deg+1; ++k, x+=iData->dim.nv){
160-
refreshSimData(x,x+ iData->dim.nx,iData->time[i*iData->dim.deg+k],iData);
161-
iData->cv = x;
162-
/*iData->data->callback->functionAlgebraics(iData->data);*/
163-
diff_symColoredObject(iData, iData->gradF,iData->lagrange_index);
164-
for(j=0; j<iData->dim.nv; ++j){
165-
gradF[id++] = iData->dt[i]*mbase->bl[k]*iData->gradF[j]*iData->vnom[j];
166-
/* printf("\n gradF(%i) = %g, %s, %g", id-1, gradF[id-1], iData->data->modelData.realVarsData[j].info.name, x[j]*iData->vnom[j]); */
167-
}
168-
}
146+
for(i=0; i<1; ++i){
147+
for(k=0; k<iData->dim.deg+1; ++k, x+=iData->dim.nv){
148+
refreshSimData(x,x+ iData->dim.nx,iData->time[i*iData->dim.deg+k],iData);
149+
iData->cv = x;
150+
/*iData->data->callback->functionAlgebraics(iData->data);*/
151+
diff_symColoredObject(iData, iData->gradF,iData->lagrange_index);
152+
for(j=0; j<iData->dim.nv; ++j)
153+
gradF[id++] = iData->dt[i]*mbase->b[0][k]*iData->gradF[j]*iData->vnom[j];
169154
}
170155
}
156+
157+
for(; i<iData->dim.nsi; ++i){
158+
for(k=0; k<iData->dim.deg; ++k, x+=iData->dim.nv){
159+
refreshSimData(x,x+ iData->dim.nx,iData->time[i*iData->dim.deg+k+1],iData);
160+
iData->cv = x;
161+
/*iData->data->callback->functionAlgebraics(iData->data);*/
162+
diff_symColoredObject(iData, iData->gradF, iData->lagrange_index);
163+
for(j = 0; j<iData->dim.nv; ++j)
164+
gradF[id++] = iData->dt[i]*mbase->b[1][k]*iData->gradF[j]*iData->vnom[j];
165+
}
166+
}
167+
171168
} else {
169+
/*ToDo */
172170
for(i=0; i<iData->endN; ++i)
173171
gradF[i] = 0.0;
174172
}

SimulationRuntime/c/optimization/initialOptimizer/allocate_ipopt.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -431,14 +431,14 @@ static int optimizer_coeff_setings(IPOPT_DATA_ *iData)
431431
mbase->d3[3] = 7.0;
432432
mbase->d3[4] = 1.0;
433433

434-
mbase->bl[0] = 0.083333333333333333333333333333333333333333333333333;
435-
mbase->bl[1] = 0.41666666666666666666666666666666666666666666666667;
436-
mbase->bl[2] = mbase->bl[1];
437-
mbase->bl[3] = 1.0 - (mbase->bl[0]+mbase->bl[1]+mbase->bl[2]);
438-
439-
mbase->br[2] = 0.11111111111111111111111111111111111111111111111111;
440-
mbase->br[1] = 0.51248582618842161383881344651960809422127631890713;
441-
mbase->br[0] = 1.0 - (mbase->br[1] + mbase->br[2]);
434+
mbase->b[0][0] = 0.083333333333333333333333333333333333333333333333333;
435+
mbase->b[0][1] = 0.41666666666666666666666666666666666666666666666667;
436+
mbase->b[0][2] = mbase->b[0][1];
437+
mbase->b[0][3] = 1.0 - (mbase->b[0][0]+mbase->b[0][1]+mbase->b[0][2]);
438+
439+
mbase->b[1][2] = 0.11111111111111111111111111111111111111111111111111;
440+
mbase->b[1][1] = 0.51248582618842161383881344651960809422127631890713;
441+
mbase->b[1][0] = 1.0 - (mbase->b[1][1] + mbase->b[1][2]);
442442

443443
return 0;
444444
}

SimulationRuntime/c/optimization/ipoptODEstruct.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,7 @@ typedef struct OPTIMIZER_DIM_VARS{
8181

8282
typedef struct OPTIMIZER_MBASE{
8383

84-
long double bl[10];
85-
long double br[10];
84+
long double b[3][10];
8685

8786
long double c1;
8887
long double c2;

SimulationRuntime/c/optimization/lagrangeFun/ipopt_hessian.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
#include "../localFunction.h"
4141

4242
#ifdef WITH_IPOPT
43-
#define DF_STEP(x,s) ( (fmin(fmax(1e-4*fabs(s*x),1e-8),1e-3)))
43+
#define DF_STEP(x,s) ( (fmin(fmax(1e-4*fabs(s*x),1e-8),1e0)))
4444

4545
static int num_hessian(double *v, double t, IPOPT_DATA_ *iData, double *lambda, short lagrange_yes, short mayer_yes, double obj_factor);
4646
static int updateCost(double *v, double t, IPOPT_DATA_ *iData, short lagrange_yes, short mayer_yes,double *F1, double *F2);
@@ -213,9 +213,9 @@ static int sumLagrange(IPOPT_DATA_ *iData, double * erg,int ii, int i, int j, in
213213

214214
if(iData->lagrange && iData->gradFomc[iData->lagrange_index][i]* iData->gradFomc[iData->lagrange_index][j]){
215215
if(ii)
216-
sum += mbase->br[p-1]*iData->oH[i][j];
216+
sum += mbase->b[1][p-1]*iData->oH[i][j];
217217
else
218-
sum += mbase->bl[p]*iData->oH[i][j];
218+
sum += mbase->b[0][p]*iData->oH[i][j];
219219
}
220220

221221
sum = iData->dt[ii]*sum;

0 commit comments

Comments
 (0)