Skip to content

Commit

Permalink
- missing free()
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@18811 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Vitalij Ruge committed Jan 28, 2014
1 parent 0e141ac commit 87168ff
Showing 1 changed file with 93 additions and 44 deletions.
137 changes: 93 additions & 44 deletions SimulationRuntime/c/optimization/initialOptimizer/allocate_ipopt.c
Expand Up @@ -44,8 +44,26 @@
#include "../localFunction.h"

static int local_jac_struct(IPOPT_DATA_ *iData, int *nng);
static int local_jac_struct_print(IPOPT_DATA_ *iData);
static int check_nominal(IPOPT_DATA_ *iData, double min, double max, double nominal, short set, int i, double x0);


/*!
* free
* intarface to simulation
* author: Vitalij Ruge
**/
int destroyIpopt(SOLVER_INFO* solverInfo)
{
return freeIpoptData( (IPOPT_DATA_*)solverInfo->solverData );
}



/*
* allocate
*/

/*!
* allocate
* author: Vitalij Ruge
Expand Down Expand Up @@ -130,12 +148,22 @@ int allocateIpoptData(IPOPT_DATA_ *iData)
for(i = 0; i < iData->nv; i++)
iData->mH[i] = (long double*) calloc(iData->nv, sizeof(long double));

iData->nlocalJac = 0;
iData->knowedJ = (int**) malloc( nJ* sizeof(int*));
for(i = 0; i < nJ; i++)
iData->knowedJ[i] = (int*) calloc(iData->nv, sizeof(int));

iData->Hg = (short**) malloc(iData->nv * sizeof(short*));
for(i = 0; i < iData->nv; i++)
iData->Hg[i] = (short*) calloc(iData->nv, sizeof(short));


nng = ng-iData->nc;
if((int)iData->nc > (int)0){
for(i = iData->nx; i<nng; i+=nJ)
for(j=0;j<(int)iData->nc;++j)
{
iData->gmin[i+j] = -1e320;
iData->gmin[i+j] = -1e21;
}
}

Expand All @@ -146,22 +174,45 @@ int allocateIpoptData(IPOPT_DATA_ *iData)
return 0;
}

/*
*
* free
*
*/

/*!
* free
* author: Vitalij Ruge
**/
int freeIpoptData(IPOPT_DATA_ *iData)
{
int i,j;
for(i = 0; i < iData->nx; i++)
free(iData->J[i]);
free(iData->J);
int nJ = (int) iData->nx + iData->nv;

for(i = 0; i < iData->nx; i++)
for(i = 0; i < nJ; i++){
free(iData->J[i]);
free(iData->J0[i]);
free(iData->numJ[i]);
free(iData->knowedJ[i]);
}
free(iData->J0);
free(iData->J);
free(iData->numJ);
free(iData->knowedJ);

for(i = 0; i < iData->nx; i++)
for(i=0;i<2;++i)
free(iData->gradFomc[i]);

for(i = 0; i < iData->nv; i++){
free(iData->oH[i]);
free(iData->mH[i]);
free(iData->Hg[i]);
}
free(iData->oH);
free(iData->mH);
free(iData->Hg);

for(i = 0; i < nJ; i++)
{
for(j = 0;j<iData->nv; ++j)
free(iData->H[i][j]);
Expand Down Expand Up @@ -203,19 +254,14 @@ int freeIpoptData(IPOPT_DATA_ *iData)
free(iData->time);
free(iData->w);
free(iData->dt);
free(iData->lhs);
free(iData->rhs);
free(iData->sv);
free(iData->sh);
free(iData);
iData = NULL;
iData = NULL;
return 0;
}
/*!
* free
* intarface to simulation
* author: Vitalij Ruge
**/
int destroyIpopt(SOLVER_INFO* solverInfo)
{
return freeIpoptData( (IPOPT_DATA_*)solverInfo->solverData );
}

/*!
* set data from model
Expand Down Expand Up @@ -255,13 +301,11 @@ int loadDAEmodel(DATA *data, IPOPT_DATA_ *iData)

iData->endN = iData->NV - iData->nv;

/* iData->njac = iData->nX*iData->nsi*(iData->nv + iData->deg) + iData->nX*(iData->nv-1); */
allocateIpoptData(iData);
local_jac_struct(iData, &id);
iData->njac = iData->deg*(iData->nlocalJac-iData->nx+iData->nsi*iData->nlocalJac+iData->deg*iData->nsi*iData->nx)-iData->deg*id;
iData->nhess = 0.5*iData->nv*(iData->nv + 1)*(1+iData->deg*iData->nsi);

allocateIpoptData(iData);

if(iData->deg == 3){
iData->c1 = 0.15505102572168219018027159252941086080340525193433;
iData->c2 = 0.64494897427831780981972840747058913919659474806567;
Expand Down Expand Up @@ -443,6 +487,8 @@ int move_grid(IPOPT_DATA_ *iData)
return 0;
}



/*
* function calculates a jacobian matrix struct
* author: Willi
Expand All @@ -458,15 +504,6 @@ static int local_jac_struct(IPOPT_DATA_ *iData, int * nng)
int nJ = (int)(iData->nx+iData->nc);
id = 0;

iData->nlocalJac = 0;
iData->knowedJ = (int**) malloc( nJ* sizeof(int*));
for(i = 0; i < nJ; i++)
iData->knowedJ[i] = (int*) calloc(iData->nv, sizeof(int));

iData->Hg = (short**) malloc(iData->nv * sizeof(int*));
for(i = 0; i < iData->nv; i++)
iData->Hg[i] = (short*) calloc(iData->nv, sizeof(int));

J = iData->knowedJ;
Hg = iData->Hg;

Expand Down Expand Up @@ -531,27 +568,39 @@ static int local_jac_struct(IPOPT_DATA_ *iData, int * nng)

if(ACTIVE_STREAM(LOG_JAC))
{
printf("\n***********");
for(ii = 0; ii < nJ; ++ii)
{
printf("\n");
for(j =0;j<iData->nv;++j)
printf("%i \t",J[ii][j]);
printf("\n");
}
printf("\n***********");
for(ii = 0; ii < iData->nv; ++ii)
{
printf("\n");
for(j =0;j<iData->nv;++j)
printf("%i \t",Hg[ii][j]);
printf("\n");
}
local_jac_struct_print(iData);
}
*nng = id;
return 0;
}

static int local_jac_struct_print(IPOPT_DATA_ *iData)
{
int ii,j;
int nJ = (int)(iData->nx+iData->nc);
int **J;
short **Hg;

J = iData->knowedJ;
Hg = iData->Hg;

printf("\n*****JAC******");
for(ii = 0; ii < nJ; ++ii){
printf("\n");
for(j =0;j<iData->nv;++j)
printf("%i \t",J[ii][j]);
printf("\n");
}
printf("\n*****HESSE******");
for(ii = 0; ii < iData->nv; ++ii){
printf("\n");
for(j =0;j<iData->nv;++j)
printf("%i \t",Hg[ii][j]);
printf("\n");
}

}


/*!
* heuristic for nominal value
Expand Down

0 comments on commit 87168ff

Please sign in to comment.