Skip to content

Commit

Permalink
- restructure data for optimization (continuing)
Browse files Browse the repository at this point in the history
  - time vector


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19866 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Vitalij Ruge committed Mar 31, 2014
1 parent 5e6b3cd commit bcbb306
Show file tree
Hide file tree
Showing 10 changed files with 126 additions and 109 deletions.
25 changes: 13 additions & 12 deletions SimulationRuntime/c/optimization/constraints/evalfDiffG.c
Expand Up @@ -109,30 +109,31 @@ Bool evalfDiffG(Index n, double * x, Bool new_x, Index m, Index njac, Index *iRo
OPTIMIZER_DIM_VARS* dim = &iData->dim;
int nng = dim->nJ;
OPTIMIZER_MBASE *mbase = &iData->mbase;
OPTIMIZER_TIME *dtime = &iData->dtime;

ipoptDebuge(iData,x);

/*ToDo */
tmp[0] = iData->dt[0]*mbase->d[0][4];
tmp[1] = iData->dt[0]*mbase->d[1][4];
tmp[2] = iData->dt[0]*mbase->d[2][4];
tmp[0] = dtime->dt[0]*mbase->d[0][4];
tmp[1] = dtime->dt[0]*mbase->d[1][4];
tmp[2] = dtime->dt[0]*mbase->d[2][4];

diff_functionODE(x, iData->t0 , iData, iData->J0);
diff_functionODE(x, dtime->t0 , iData, iData->J0);

for(i = 0, id = dim->nv, k = 0; i<1; ++i){
tmp_index = i*dim->deg;
for(l=0; l<dim->deg; ++l, id += dim->nv){
diff_functionODE(x+id , iData->time[tmp_index + l] , iData, iData->J);
diff_functionODE(x+id , dtime->time[tmp_index + l] , iData, iData->J);
for(j=0; j<dim->nx; ++j){
switch(l){
case 0:
lobattoJac1(mbase->d[l], iData->J[j], iData->J0[j], iData->dt[i], values, dim->nv, &k, j, tmp[l], iData);
lobattoJac1(mbase->d[l], iData->J[j], iData->J0[j], dtime->dt[i], values, dim->nv, &k, j, tmp[l], iData);
break;
case 1:
lobattoJac2(mbase->d[l], iData->J[j], iData->J0[j], iData->dt[i], values, dim->nv, &k, j, tmp[l], iData);
lobattoJac2(mbase->d[l], iData->J[j], iData->J0[j], dtime->dt[i], values, dim->nv, &k, j, tmp[l], iData);
break;
case 2:
lobattoJac3(mbase->d[l], iData->J[j], iData->J0[j], iData->dt[i], values, dim->nv, &k, j, tmp[l], iData);
lobattoJac3(mbase->d[l], iData->J[j], iData->J0[j], dtime->dt[i], values, dim->nv, &k, j, tmp[l], iData);
break;
}
}
Expand All @@ -145,17 +146,17 @@ Bool evalfDiffG(Index n, double * x, Bool new_x, Index m, Index njac, Index *iRo
for(; i<dim->nsi; ++i){
tmp_index = i*iData->dim.deg;
for(l=0; l<dim->deg; ++l, id += dim->nv){
diff_functionODE(x+id, iData->time[tmp_index + l], iData, iData->J);
diff_functionODE(x+id, dtime->time[tmp_index + l], iData, iData->J);
for(j=0; j<dim->nx; ++j){
switch(l){
case 0:
radauJac1(mbase->a[l], iData->J[j], iData->dt[i], values, dim->nv, &k, j, iData);
radauJac1(mbase->a[l], iData->J[j], dtime->dt[i], values, dim->nv, &k, j, iData);
break;
case 1:
radauJac2(mbase->a[l], iData->J[j], iData->dt[i], values, dim->nv, &k, j, iData);
radauJac2(mbase->a[l], iData->J[j], dtime->dt[i], values, dim->nv, &k, j, iData);
break;
case 2:
radauJac3(mbase->a[l], iData->J[j], iData->dt[i], values, dim->nv, &k, j, iData);
radauJac3(mbase->a[l], iData->J[j], dtime->dt[i], values, dim->nv, &k, j, iData);
break;
}
}
Expand Down
43 changes: 24 additions & 19 deletions SimulationRuntime/c/optimization/constraints/evalfG.c
Expand Up @@ -70,9 +70,14 @@ Bool evalfG(Index n, double * v, Bool new_x, int m, Number *g, void * useData)
int max_err_xi = -1;
int tmp_index;
OPTIMIZER_DIM_VARS* dim;
OPTIMIZER_TIME *dtime;


iData = (IPOPT_DATA_ *) useData;
dim = &iData->dim;
dtime = &iData->dtime;


for(i=0, k=0, x0=v; i<1; ++i, x0=iData->x3){

iData->x1 = x0 + dim->nv; /* 0 + 3 = 3;2*/
Expand All @@ -84,26 +89,26 @@ Bool evalfG(Index n, double * v, Bool new_x, int m, Number *g, void * useData)
iData->u3 = iData->x3 + dim->nx;

/*1*/
functionODE_(x0, x0 + dim->nx, iData->time[0], iData->dotx0, iData);
functionODE_(iData->x1, iData->u1, iData->time[1], iData->dotx1, iData);
functionODE_(x0, x0 + dim->nx, dtime->time[0], iData->dotx0, iData);
functionODE_(iData->x1, iData->u1, dtime->time[1], iData->dotx1, iData);
evalG21(g + k, iData, x0, i);
if(ACTIVE_STREAM(LOG_IPOPT_ERROR))
printMaxError(iData,g,iData->time[1],&max_err, &max_err_time, &max_err_xi);
printMaxError(iData,g,dtime->time[1],&max_err, &max_err_time, &max_err_xi);

k += dim->nJ;

/*2*/
functionODE_(iData->x2, iData->u2, iData->time[2], iData->dotx2, iData);
functionODE_(iData->x2, iData->u2, dtime->time[2], iData->dotx2, iData);
evalG22(g + k, iData, x0, i);
if(ACTIVE_STREAM(LOG_IPOPT_ERROR))
printMaxError(iData,g,iData->time[2],&max_err, &max_err_time, &max_err_xi);
printMaxError(iData,g,dtime->time[2],&max_err, &max_err_time, &max_err_xi);
k += dim->nJ;

/*3*/
functionODE_(iData->x3, iData->u3, iData->time[3], iData->dotx3, iData);
functionODE_(iData->x3, iData->u3, dtime->time[3], iData->dotx3, iData);
evalG23(g + k, iData, x0, i);
if(ACTIVE_STREAM(LOG_IPOPT_ERROR))
printMaxError(iData,g,iData->time[3],&max_err, &max_err_time, &max_err_xi);
printMaxError(iData,g,dtime->time[3],&max_err, &max_err_time, &max_err_xi);
k += dim->nJ;
}

Expand All @@ -119,24 +124,24 @@ Bool evalfG(Index n, double * v, Bool new_x, int m, Number *g, void * useData)
tmp_index = i*dim->deg;

/*1*/
functionODE_(iData->x1, iData->u1, iData->time[tmp_index + 1], iData->dotx1, iData);
functionODE_(iData->x1, iData->u1, dtime->time[tmp_index + 1], iData->dotx1, iData);
evalG11(g + k, iData, x0, i);
if(ACTIVE_STREAM(LOG_IPOPT_ERROR))
printMaxError(iData,g,iData->time[tmp_index + 1],&max_err, &max_err_time, &max_err_xi);
printMaxError(iData,g,dtime->time[tmp_index + 1],&max_err, &max_err_time, &max_err_xi);
k += dim->nJ;

/*2*/
functionODE_(iData->x2, iData->u2, iData->time[tmp_index + 2], iData->dotx2, iData);
functionODE_(iData->x2, iData->u2, dtime->time[tmp_index + 2], iData->dotx2, iData);
evalG12(g + k, iData, x0, i);
if(ACTIVE_STREAM(LOG_IPOPT))
printMaxError(iData,g,iData->time[tmp_index + 2],&max_err, &max_err_time, &max_err_xi);
printMaxError(iData,g,dtime->time[tmp_index + 2],&max_err, &max_err_time, &max_err_xi);
k += dim->nJ;

/*3*/
functionODE_(iData->x3, iData->u3, iData->time[tmp_index + 3], iData->dotx3, iData);
functionODE_(iData->x3, iData->u3, dtime->time[tmp_index + 3], iData->dotx3, iData);
evalG13(g + k, iData, x0, i);
if(ACTIVE_STREAM(LOG_IPOPT_ERROR))
printMaxError(iData,g,iData->time[tmp_index + 3],&max_err, &max_err_time, &max_err_xi);
printMaxError(iData,g,dtime->time[tmp_index + 3],&max_err, &max_err_time, &max_err_xi);
k += dim->nJ;
}
if(ACTIVE_STREAM(LOG_IPOPT_ERROR)){
Expand Down Expand Up @@ -256,7 +261,7 @@ static inline int evalG11(Number *g, IPOPT_DATA_ *iData, double *x0, int i)
{
int j;
for(j=0; j<iData->dim.nx; ++j)
g[j] = (iData->mbase.a[0][0]*x0[j] + iData->mbase.a[0][3]*iData->x3[j] + iData->scalf[j]*iData->dt[i]*iData->dotx1[j]) - (iData->mbase.a[0][1]*iData->x1[j] + iData->mbase.a[0][2]*iData->x2[j]);
g[j] = (iData->mbase.a[0][0]*x0[j] + iData->mbase.a[0][3]*iData->x3[j] + iData->scalf[j]*iData->dtime.dt[i]*iData->dotx1[j]) - (iData->mbase.a[0][1]*iData->x1[j] + iData->mbase.a[0][2]*iData->x2[j]);

memcpy(g + iData->dim.nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->dim.nc], sizeof(double)*iData->dim.nc);
return 0;
Expand All @@ -271,7 +276,7 @@ static inline int evalG12(Number *g, IPOPT_DATA_ *iData, double *x0, int i)
{
int j;
for(j=0; j<iData->dim.nx; ++j)
g[j] = (iData->mbase.a[1][1]*iData->x1[j] + iData->scalf[j]*iData->dt[i]*iData->dotx2[j]) - (iData->mbase.a[1][0]*x0[j] + iData->mbase.a[1][2]*iData->x2[j] + iData->mbase.a[1][3]*iData->x3[j]);
g[j] = (iData->mbase.a[1][1]*iData->x1[j] + iData->scalf[j]*iData->dtime.dt[i]*iData->dotx2[j]) - (iData->mbase.a[1][0]*x0[j] + iData->mbase.a[1][2]*iData->x2[j] + iData->mbase.a[1][3]*iData->x3[j]);

memcpy(g + iData->dim.nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->dim.nc], sizeof(double)*iData->dim.nc);
return 0;
Expand All @@ -286,7 +291,7 @@ static inline int evalG13(Number *g, IPOPT_DATA_ *iData, double *x0, int i)
{
int j;
for(j=0; j<iData->dim.nx; ++j)
g[j] = (iData->mbase.a[2][0]*x0[j] + iData->mbase.a[2][2]*iData->x2[j] + iData->scalf[j]*iData->dt[i]*iData->dotx3[j]) - (iData->mbase.a[2][1]*iData->x1[j] + iData->mbase.a[2][3]*iData->x3[j]);
g[j] = (iData->mbase.a[2][0]*x0[j] + iData->mbase.a[2][2]*iData->x2[j] + iData->scalf[j]*iData->dtime.dt[i]*iData->dotx3[j]) - (iData->mbase.a[2][1]*iData->x1[j] + iData->mbase.a[2][3]*iData->x3[j]);

memcpy(g + iData->dim.nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->dim.nc], sizeof(double)*iData->dim.nc);
return 0;
Expand All @@ -301,7 +306,7 @@ static inline int evalG21(Number *g, IPOPT_DATA_ *iData, double *x0, int i)
{
int j;
for(j=0; j<iData->dim.nx; ++j)
g[j] = (iData->scalf[j]*iData->dt[i]*(iData->dotx1[j] + iData->mbase.d[0][4]*iData->dotx0[j]) + iData->mbase.d[0][0]*x0[j] + iData->mbase.d[0][3]*iData->x3[j]) - (iData->mbase.d[0][1]*iData->x1[j] + iData->mbase.d[0][2]*iData->x2[j]);
g[j] = (iData->scalf[j]*iData->dtime.dt[i]*(iData->dotx1[j] + iData->mbase.d[0][4]*iData->dotx0[j]) + iData->mbase.d[0][0]*x0[j] + iData->mbase.d[0][3]*iData->x3[j]) - (iData->mbase.d[0][1]*iData->x1[j] + iData->mbase.d[0][2]*iData->x2[j]);

memcpy(g + iData->dim.nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->dim.nc], sizeof(double)*iData->dim.nc);
return 0;
Expand All @@ -316,7 +321,7 @@ static inline int evalG22(Number *g, IPOPT_DATA_ *iData, double *x0, int i)
{
int j;
for(j=0; j<iData->dim.nx; ++j)
g[j] = (iData->scalf[j]*iData->dt[i]*iData->dotx2[j] + iData->mbase.d[1][1]*iData->x1[j]) - (iData->scalf[j]*iData->dt[i]*iData->mbase.d[1][4]*iData->dotx0[j] + iData->mbase.d[1][0]*x0[j] + iData->mbase.d[1][2]*iData->x2[j] + iData->mbase.d[1][3]*iData->x3[j]);
g[j] = (iData->scalf[j]*iData->dtime.dt[i]*iData->dotx2[j] + iData->mbase.d[1][1]*iData->x1[j]) - (iData->scalf[j]*iData->dtime.dt[i]*iData->mbase.d[1][4]*iData->dotx0[j] + iData->mbase.d[1][0]*x0[j] + iData->mbase.d[1][2]*iData->x2[j] + iData->mbase.d[1][3]*iData->x3[j]);

memcpy(g + iData->dim.nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->dim.nc], sizeof(double)*iData->dim.nc);
return 0;
Expand All @@ -331,7 +336,7 @@ static inline int evalG23(Number *g, IPOPT_DATA_ *iData, double *x0, int i)
{
int j;
for(j=0; j<iData->dim.nx; ++j)
g[j] = (iData->scalf[j]*iData->dt[i]*(iData->mbase.d[2][4]*iData->dotx0[j] + iData->dotx3[j]) + iData->mbase.d[2][0]*x0[j] + iData->mbase.d[2][2]*iData->x2[j]) - (iData->mbase.d[2][1]*iData->x1[j] + iData->mbase.d[2][3]*iData->x3[j]);
g[j] = (iData->scalf[j]*iData->dtime.dt[i]*(iData->mbase.d[2][4]*iData->dotx0[j] + iData->dotx3[j]) + iData->mbase.d[2][0]*x0[j] + iData->mbase.d[2][2]*iData->x2[j]) - (iData->mbase.d[2][1]*iData->x1[j] + iData->mbase.d[2][3]*iData->x3[j]);

memcpy(g + iData->dim.nx, &iData->data->localData[0]->realVars[iData->data->modelData.nVariablesReal - iData->dim.nc], sizeof(double)*iData->dim.nc);
return 0;
Expand Down
20 changes: 10 additions & 10 deletions SimulationRuntime/c/optimization/goal/evalF.c
Expand Up @@ -75,22 +75,22 @@ Bool evalfF(Index n, double * v, Bool new_x, Number *objValue, void * useData)
erg = 0.0;
for(j=0; j<iData->dim.deg+1; ++j, x+=iData->dim.nv, ++k)
{
goal_func_lagrange(x, &tmp,iData->time[k], iData);
goal_func_lagrange(x, &tmp,iData->dtime.time[k], iData);
erg += mbase->b[0][j]*tmp;
}
erg_+= erg*iData->dt[i];
erg_+= erg*iData->dtime.dt[i];
}

for(; i<iData->dim.nsi; ++i)
{
erg = 0.0;
for(j=0; j<iData->dim.deg; ++j, x+=iData->dim.nv, ++k)
{
goal_func_lagrange(x, &tmp, iData->time[k], iData);
goal_func_lagrange(x, &tmp, iData->dtime.time[k], iData);
erg += mbase->b[1][j]*tmp;
}

erg_ += erg*iData->dt[i];
erg_ += erg*iData->dtime.dt[i];
}

lagrange = (double) erg_;
Expand All @@ -106,7 +106,7 @@ Bool evalfF(Index n, double * v, Bool new_x, Number *objValue, void * useData)
**/
Bool goal_func_mayer(double* vn, double *obj_value, IPOPT_DATA_ *iData)
{
refreshSimData(vn, vn + iData->dim.nx, iData->tf, iData);
refreshSimData(vn, vn + iData->dim.nx, iData->dtime.tf, iData);
iData->data->callback->mayer(iData->data, obj_value);

return TRUE;
Expand Down Expand Up @@ -145,23 +145,23 @@ Bool evalfDiffF(Index n, double * v, Bool new_x, Number *gradF, void * useData)

for(i=0; i<1; ++i){
for(k=0; k<iData->dim.deg+1; ++k, x+=iData->dim.nv){
refreshSimData(x,x+ iData->dim.nx,iData->time[i*iData->dim.deg+k],iData);
refreshSimData(x,x+ iData->dim.nx,iData->dtime.time[i*iData->dim.deg+k],iData);
iData->cv = x;
/*iData->data->callback->functionAlgebraics(iData->data);*/
diff_symColoredObject(iData, iData->gradF,iData->lagrange_index);
for(j=0; j<iData->dim.nv; ++j)
gradF[id++] = iData->dt[i]*mbase->b[0][k]*iData->gradF[j]*iData->vnom[j];
gradF[id++] = iData->dtime.dt[i]*mbase->b[0][k]*iData->gradF[j]*iData->vnom[j];
}
}

for(; i<iData->dim.nsi; ++i){
for(k=0; k<iData->dim.deg; ++k, x+=iData->dim.nv){
refreshSimData(x,x+ iData->dim.nx,iData->time[i*iData->dim.deg+k+1],iData);
refreshSimData(x,x+ iData->dim.nx,iData->dtime.time[i*iData->dim.deg+k+1],iData);
iData->cv = x;
/*iData->data->callback->functionAlgebraics(iData->data);*/
diff_symColoredObject(iData, iData->gradF, iData->lagrange_index);
for(j = 0; j<iData->dim.nv; ++j)
gradF[id++] = iData->dt[i]*mbase->b[1][k]*iData->gradF[j]*iData->vnom[j];
gradF[id++] = iData->dtime.dt[i]*mbase->b[1][k]*iData->gradF[j]*iData->vnom[j];
}
}

Expand All @@ -173,7 +173,7 @@ Bool evalfDiffF(Index n, double * v, Bool new_x, Number *gradF, void * useData)
if(iData->mayer){
x = v + iData->endN;

refreshSimData(x, x +iData->dim.nx, iData->tf, iData);
refreshSimData(x, x +iData->dim.nx, iData->dtime.tf, iData);
iData->cv = x;
/*iData->data->callback->functionAlgebraics(iData->data);*/
diff_symColoredObject(iData, iData->gradF, iData->mayer_index);
Expand Down
34 changes: 19 additions & 15 deletions SimulationRuntime/c/optimization/initialOptimizer/allocate_ipopt.c
Expand Up @@ -75,8 +75,8 @@ int loadDAEmodel(DATA *data, IPOPT_DATA_ *iData)
dim->nc = data->modelData.nOptimizeConstraints;

dim->nsi = data->simulationInfo.numSteps;
iData->t0 = data->simulationInfo.startTime;
iData->tf = data->simulationInfo.stopTime;
iData->dtime.t0 = (long double)data->simulationInfo.startTime;
iData->dtime.tf = (long double)data->simulationInfo.stopTime;

/***********************/
dim->nX = dim->nx * dim->deg;
Expand Down Expand Up @@ -126,20 +126,22 @@ int loadDAEmodel(DATA *data, IPOPT_DATA_ *iData)
int move_grid(IPOPT_DATA_ *iData)
{
int i;
double t;
long double t;
OPTIMIZER_TIME *dtime = &iData->dtime;

OPTIMIZER_DIM_VARS* dim = &iData->dim;
iData->dt_default = (iData->tf - iData->t0)/(dim->nsi);
dtime->dt[0] = (dtime->tf - dtime->t0)/(dim->nsi);

assert(dim->nsi>0);

t = iData->t0;
t = dtime->t0 + dtime->dt[0];

for(i=0;i<dim->nsi; ++i){
iData->dt[i] = iData->dt_default;
t += iData->dt[i];
for(i=1;i<dim->nsi; ++i){
dtime->dt[i] = dtime->dt[i-1];
t += dtime->dt[i];
}
assert(dim->nsi>0);
iData->dt[dim->nsi-1] = iData->dt_default + (iData->tf - t);
dtime->dt[dim->nsi-1] = (dtime->tf - t) + dtime->dt[0] ;
return 0;
}

Expand Down Expand Up @@ -467,8 +469,8 @@ static int optimizer_bounds_setings(DATA *data, IPOPT_DATA_ *iData)
iData->xmin[i] = data->modelData.realVarsData[i].attribute.min*iData->scalVar[i];
iData->xmax[i] = data->modelData.realVarsData[i].attribute.max*iData->scalVar[i];
}
iData->data->callback->pickUpBoundsForInputsInOptimization(data,iData->umin, iData->umax, &iData->vnom[dim->nx], tmp, tmpname, start, &iData->startTimeOpt);
iData->preSim = (iData->t0 < (iData->startTimeOpt));
iData->data->callback->pickUpBoundsForInputsInOptimization(data,iData->umin, iData->umax, &iData->vnom[dim->nx], tmp, tmpname, start, &iData->dtime.startTimeOpt);
iData->preSim = ((double)iData->dtime.t0 < ((double)iData->dtime.startTimeOpt));
if(ACTIVE_STREAM(LOG_IPOPT)|| ACTIVE_STREAM(LOG_IPOPT_ERROR)){
char buffer[200];
printf("Optimizer Variables");
Expand Down Expand Up @@ -548,19 +550,21 @@ static int optimizer_time_setings(IPOPT_DATA_ *iData)
{
int i,k,id,j;
OPTIMIZER_MBASE *mbase = &iData->mbase;
iData->time[0] = iData->t0;
OPTIMIZER_TIME *dtime = &iData->dtime;

dtime->time[0] = dtime->t0;

for(i = 0,k=0,id=0; i<1; ++i,id += iData->dim.deg)
for(j = 0; j < iData->dim.deg; ++j)
iData->time[++k] = iData->time[id] + mbase->c[0][j]*iData->dt[i];
dtime->time[++k] = dtime->time[id] + mbase->c[0][j]*dtime->dt[i];


for(; i<iData->dim.nsi; ++i,id += iData->dim.deg)
for(j = 0; j < iData->dim.deg; ++j)
iData->time[++k] = iData->time[id] + mbase->c[1][j]*iData->dt[i];
dtime->time[++k] = dtime->time[id] + mbase->c[1][j]*dtime->dt[i];


iData->time[k] = iData->tf;
dtime->time[k] = dtime->tf;
return 0;
}

Expand Down
Expand Up @@ -98,7 +98,7 @@ int allocateIpoptData(IPOPT_DATA_ *iData)
iData->Vmax = (double*)malloc(dim->NV*sizeof(double));
iData->v = (double*)malloc(dim->NV*sizeof(double));
iData->w = (double*)malloc((dim->nsi + 1)*(dim->nv)*sizeof(double));
iData->time = (double*)malloc((dim->deg*dim->nsi +1) *sizeof(double));
iData->dtime.time = (long double*)malloc((dim->deg*dim->nsi +1) *sizeof(long double));
iData->start_u = (double*)malloc(dim->nv*sizeof(double));

iData->J = (double**) malloc(dim->nJ * sizeof(double*));
Expand Down Expand Up @@ -156,7 +156,7 @@ int allocateIpoptData(IPOPT_DATA_ *iData)
for(i = 0; i < dim->nv; i++)
iData->Hg[i] = (short*) calloc(dim->nv, sizeof(short));

iData->dt = (double*)malloc((dim->nsi) *sizeof(double));
iData->dtime.dt = (long double*)malloc((dim->nsi) *sizeof(long double));
iData->input_name = (char**)malloc(dim->nv*sizeof(char*));

if(dim->nc > 0)
Expand All @@ -176,6 +176,7 @@ static int freeIpoptData(IPOPT_DATA_ *iData)
int i,j;
OPTIMIZER_DIM_VARS* dim = &iData->dim;
OPTIMIZER_MBASE *mbase = &iData->mbase;
OPTIMIZER_TIME *dtime = &iData->dtime;

for(i = 0; i < dim->nJ; i++){
free(iData->J[i]);
Expand Down Expand Up @@ -236,9 +237,9 @@ static int freeIpoptData(IPOPT_DATA_ *iData)
free(iData->Vmin);
free(iData->Vmax);
free(iData->v);
free(iData->time);
free(dtime->time);
free(iData->w);
free(iData->dt);
free(dtime->dt);
free(iData->lhs);
free(iData->rhs);
free(iData->sv);
Expand Down

0 comments on commit bcbb306

Please sign in to comment.