Skip to content

Commit

Permalink
- remove unused operation
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19071 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Vitalij Ruge committed Feb 12, 2014
1 parent 78f21e8 commit 17615fe
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 87 deletions.
75 changes: 25 additions & 50 deletions SimulationRuntime/c/optimization/constraints/evalfDiffG.c
Expand Up @@ -42,12 +42,12 @@
#ifdef WITH_IPOPT

/* static int jac_struc(Index *iRow, Index *iCol, long int nx, long int nv, int nsi); */
static int radauJac1(double *a, double *J, double dt, double scalRes, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData);
static int lobattoJac1(double *a, double *J, double *J0, double dt, double scalRes, double * values, int nv, int *k, int j, long double tmp,IPOPT_DATA_ *iData);
static int radauJac2(double *a, double *J, double dt, double scalRes, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData);
static int lobattoJac2(double *a, double *J, double *J0, double dt, double scalRes, double * values, int nv, int *k, int j, long double tmp,IPOPT_DATA_ *iData);
static int radauJac3(double *a, double *J, double dt, double scalRes, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData);
static int lobattoJac3(double *a, double *J, double *J0, double dt, double scalRes, double * values, int nv, int *k, int j, long double tmp,IPOPT_DATA_ *iData);
static int radauJac1(double *a, double *J, double dt, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData);
static int lobattoJac1(double *a, double *J, double *J0, double dt, double * values, int nv, int *k, int j, long double tmp,IPOPT_DATA_ *iData);
static int radauJac2(double *a, double *J, double dt, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData);
static int lobattoJac2(double *a, double *J, double *J0, double dt, double * values, int nv, int *k, int j, long double tmp,IPOPT_DATA_ *iData);
static int radauJac3(double *a, double *J, double dt, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData);
static int lobattoJac3(double *a, double *J, double *J0, double dt, double * values, int nv, int *k, int j, long double tmp,IPOPT_DATA_ *iData);
static int jac_struc(IPOPT_DATA_ *iData,int *iRow, int *iCol);
static int conJac(double *J, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData);

Expand All @@ -73,7 +73,7 @@ Bool evalfDiffG(Index n, double * x, Bool new_x, Index m, Index njac, Index *iRo
*/

}else{
int i,j,k,l;
int i,j,k,l,ii;
long double tmp[3];
int id;
int nng = iData->nJ;
Expand All @@ -84,25 +84,26 @@ Bool evalfDiffG(Index n, double * x, Bool new_x, Index m, Index njac, Index *iRo
tmp[1] = iData->dt[0]*iData->d2[4];
tmp[2] = iData->dt[0]*iData->d3[4];

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

for(i = 0, id = iData->nv, k = 0; i<1; ++i){
diff_functionODE(x, iData->t0 , iData, iData->J0);
for(l=0; l<iData->deg; ++l, id += iData->nv){
diff_functionODE(x+id , iData->time[i*iData->deg + l] , iData, iData->J);
for(j=0; j<iData->nx; ++j){
switch(l){
case 0:
lobattoJac1(iData->d1, iData->J[j], iData->J0[j], iData->dt[i], 1.0, values, iData->nv, &k, j, tmp[0], iData);
lobattoJac1(iData->d1, iData->J[j], iData->J0[j], iData->dt[i], values, iData->nv, &k, j, tmp[0], iData);
break;
case 1:
lobattoJac2(iData->d2, iData->J[j], iData->J0[j], iData->dt[i], 1.0, values, iData->nv, &k, j, tmp[1], iData);
lobattoJac2(iData->d2, iData->J[j], iData->J0[j], iData->dt[i], values, iData->nv, &k, j, tmp[1], iData);
break;
case 2:
lobattoJac3(iData->d3, iData->J[j], iData->J0[j], iData->dt[i], 1.0, values, iData->nv, &k, j, tmp[2], iData);
lobattoJac3(iData->d3, iData->J[j], iData->J0[j], iData->dt[i], values, iData->nv, &k, j, tmp[2], iData);
break;
}
}
for(;j<nng; ++j){
conJac(iData->J[j], values, iData->nv, &k, j,iData);
conJac(iData->J[j], values, iData->nv, &k, j, iData);
}
}
}
Expand All @@ -113,18 +114,18 @@ Bool evalfDiffG(Index n, double * x, Bool new_x, Index m, Index njac, Index *iRo
for(j=0; j<iData->nx; ++j){
switch(l){
case 0:
radauJac1(iData->a1, iData->J[j], iData->dt[i], 1.0, values, iData->nv, &k, j, iData);
radauJac1(iData->a1, iData->J[j], iData->dt[i], values, iData->nv, &k, j, iData);
break;
case 1:
radauJac2(iData->a2, iData->J[j], iData->dt[i], 1.0, values, iData->nv, &k, j, iData);
radauJac2(iData->a2, iData->J[j], iData->dt[i], values, iData->nv, &k, j, iData);
break;
case 2:
radauJac3(iData->a3, iData->J[j], iData->dt[i], 1.0, values, iData->nv, &k, j, iData);
radauJac3(iData->a3, iData->J[j], iData->dt[i], values, iData->nv, &k, j, iData);
break;
}
}
for(;j<nng; ++j)
conJac(iData->J[j], values, iData->nv, &k, j,iData);
conJac(iData->J[j], values, iData->nv, &k, j, iData);
}
}
/*assert(k == njac);*/
Expand All @@ -138,60 +139,51 @@ Bool evalfDiffG(Index n, double * x, Bool new_x, Index m, Index njac, Index *iRo
* special jacobian struct
* author: Vitalij Ruge
**/
static int radauJac1(double *a, double *J, double dt, double scalRes, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData)
static int radauJac1(double *a, double *J, double dt, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData)
{
int l;
values[(*k)++] = a[0];
values[(*k)-1] *= scalRes;
/*1*/
for(l=0; l<nv; ++l){
if(iData->knowedJ[j][l] == 1){
values[(*k)++] = (j == l) ? dt*J[l]-a[1] : dt*J[l];
values[(*k)-1] *= scalRes;
}
}

/*2*/
values[(*k)++] = -a[2];
values[(*k)-1] *= scalRes;

/*3*/
values[(*k)++] = a[3];
values[(*k)-1] *= scalRes;
return 0;
}

/*!
* special jacobian struct
* author: Vitalij Ruge
**/
static int lobattoJac1(double *a, double *J, double *J0, double dt, double scalRes, double * values, int nv, int *k, int j, long double tmp,IPOPT_DATA_ *iData)
static int lobattoJac1(double *a, double *J, double *J0, double dt, double * values, int nv, int *k, int j, long double tmp,IPOPT_DATA_ *iData)
{
int l;
/*0*/
for(l = 0; l< nv; ++l){
if(j == l) {
values[(*k)++] = tmp*J0[l] + a[0];
values[(*k)-1] *= scalRes;
} else if(iData->knowedJ[j][l] == 1) {
values[(*k)++] = tmp*J0[l];
values[(*k)-1] *= scalRes;
}
}
/*1*/
for(l = 0; l< nv; ++l){
if(iData->knowedJ[j][l] == 1){
values[(*k)++] = ((j == l)? dt*J[l] - a[1] : dt*J[l]);
values[(*k)-1] *= scalRes;
}
}
/*2*/
values[(*k)++] = -a[2];
values[(*k)-1] *= scalRes;

/*3*/
values[(*k)++] = a[3];
values[(*k)-1] *= scalRes;
return 0;
}

Expand All @@ -200,86 +192,73 @@ static int lobattoJac1(double *a, double *J, double *J0, double dt, double scal
* special jacobian struct
* author: Vitalij Ruge
**/
static int radauJac2(double *a, double *J, double dt, double scalRes, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData)
static int radauJac2(double *a, double *J, double dt, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData)
{
int l;
/*0*/
values[(*k)++] = -a[0];
values[(*k)-1] *= scalRes;

/*1*/
values[(*k)++] = a[1];
values[(*k)-1] *= scalRes;

/*2*/
for(l = 0; l< nv; ++l){
if(iData->knowedJ[j][l] == 1){
values[(*k)++] = ((j == l)? dt*J[l] - a[2] : dt*J[l]);
values[(*k)-1] *= scalRes;
}
}

/*3*/
values[(*k)++] = -a[3];
values[(*k)-1] *= scalRes;
return 0;
}

/*!
* special jacobian struct
* author: Vitalij Ruge
**/
static int lobattoJac2(double *a, double *J, double *J0, double dt, double scalRes, double * values, int nv, int *k, int j, long double tmp,IPOPT_DATA_ *iData)
static int lobattoJac2(double *a, double *J, double *J0, double dt, double * values, int nv, int *k, int j, long double tmp,IPOPT_DATA_ *iData)
{
int l;
/*0*/
for(l = 0; l< nv; ++l){
if( j==l){
values[(*k)++] = -(tmp*J0[l] + a[0]);
values[(*k)-1] *= scalRes;
} else if(iData->knowedJ[j][l] == 1) {
values[(*k)++] = -tmp*J0[l];
values[(*k)-1] *= scalRes;
}
}
/*1*/
values[(*k)++] = a[1];
values[(*k)-1] *= scalRes;

/*2*/
for(l = 0; l< nv; ++l){
if(iData->knowedJ[j][l] == 1){
values[(*k)++] = ((j == l)? dt*J[l]-a[2] : dt*J[l]);
values[(*k)-1] *= scalRes;
}
}
/*3*/
values[(*k)++] = -a[3];
values[(*k)-1] *= scalRes;
return 0;
}

/*!
* special jacobian struct
* author: Vitalij Ruge
**/
static int radauJac3(double *a, double *J, double dt, double scalRes, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData)
static int radauJac3(double *a, double *J, double dt, double * values, int nv, int *k, int j,IPOPT_DATA_ *iData)
{
int l;
/*0*/
values[(*k)++] = a[0];
values[(*k)-1] *= scalRes;
/*1*/
values[(*k)++] = -a[1];
values[(*k)-1] *= scalRes;
/*2*/
values[(*k)++] = a[2];
values[(*k)-1] *= scalRes;
/*3*/
for(l = 0; l< nv; ++l){
if(iData->knowedJ[j][l] == 1){
values[(*k)++] = ((j == l)? dt*J[l] - a[3] : dt*J[l]);
values[(*k)-1] *= scalRes;
}
}
return 0;
Expand All @@ -289,30 +268,25 @@ static int radauJac3(double *a, double *J, double dt, double scalRes, double *
* special jacobian struct
* author: Vitalij Ruge
**/
static int lobattoJac3(double *a, double *J, double *J0, double dt, double scalRes, double * values, int nv, int *k, int j, long double tmp,IPOPT_DATA_ *iData)
static int lobattoJac3(double *a, double *J, double *J0, double dt, double * values, int nv, int *k, int j, long double tmp,IPOPT_DATA_ *iData)
{
int l;
/*0*/
for(l=0; l<nv; ++l){
if(j==l){
values[(*k)++] = tmp*J0[l] + a[0];
values[(*k)-1] *= scalRes;
} else if(iData->knowedJ[j][l] == 1) {
values[(*k)++] = tmp*J0[l];
values[(*k)-1] *= scalRes;
}
}
/*1*/
values[(*k)++] = -a[1];
values[(*k)-1] *= scalRes;
/*2*/
values[(*k)++] = a[2];
values[(*k)-1] *= scalRes;
/*3*/
for(l=0; l<nv; ++l){
if(iData->knowedJ[j][l] == 1){
values[(*k)++] = ((j == l)? dt*J[l] - a[3] : dt*J[l]);
values[(*k)-1] *= scalRes;
}
}
return 0;
Expand All @@ -322,8 +296,9 @@ static int conJac(double *J, double *values, int nv, int *k, int j,IPOPT_DATA_ *
{
int l;
for(l=0; l<nv; ++l)
if(iData->knowedJ[j][l] == 1)
if(iData->knowedJ[j][l])
values[(*k)++] = J[l];

return 0;
}

Expand Down
64 changes: 32 additions & 32 deletions SimulationRuntime/c/optimization/constraints/evalfG.c
Expand Up @@ -59,41 +59,41 @@ static inline int evalG23(Number *g, IPOPT_DATA_ *iData, double *x0, int i);
**/
Bool evalfG(Index n, double * v, Bool new_x, int m, Number *g, void * useData)
{
IPOPT_DATA_ *iData;
int i,k;
double *x0;

iData = (IPOPT_DATA_ *) useData;
for(i=0, k=0, x0=v; i<1; ++i, x0=iData->x3){
iData->x1 = x0 + iData->nv; /* 0 + 3 = 3;2*/
iData->x2 = iData->x1 + iData->nv; /*3 + 3 = 6;5*/
iData->x3 = iData->x2 + iData->nv; /*6 + 3 = 9*/

iData->u1 = iData->x1 + iData->nx; /*3 + 2 = 5*/
iData->u2 = iData->x2 + iData->nx; /*6 + 2 = 8*/
iData->u3 = iData->x3 + iData->nx;

/*1*/
functionODE_(x0, x0 + iData->nx, iData->time[0], iData->dotx0, iData);
functionODE_(iData->x1, iData->u1, iData->time[1], iData->dotx1, iData);
evalG21(g + k, iData, x0, i);
k += iData->nJ;

/*2*/
functionODE_(iData->x2, iData->u2, iData->time[2], iData->dotx2, iData);
evalG22(g + k, iData, x0, i);
k += iData->nJ;

/*3*/
functionODE_(iData->x3, iData->u3, iData->time[3], iData->dotx3, iData);
evalG23(g + k, iData, x0, i);
k += iData->nJ;
IPOPT_DATA_ *iData;
int i,k;
double *x0;

iData = (IPOPT_DATA_ *) useData;
for(i=0, k=0, x0=v; i<1; ++i, x0=iData->x3){
iData->x1 = x0 + iData->nv; /* 0 + 3 = 3;2*/
iData->x2 = iData->x1 + iData->nv; /*3 + 3 = 6;5*/
iData->x3 = iData->x2 + iData->nv; /*6 + 3 = 9*/

iData->u1 = iData->x1 + iData->nx; /*3 + 2 = 5*/
iData->u2 = iData->x2 + iData->nx; /*6 + 2 = 8*/
iData->u3 = iData->x3 + iData->nx;

/*1*/
functionODE_(x0, x0 + iData->nx, iData->time[0], iData->dotx0, iData);
functionODE_(iData->x1, iData->u1, iData->time[1], iData->dotx1, iData);
evalG21(g + k, iData, x0, i);
k += iData->nJ;

/*2*/
functionODE_(iData->x2, iData->u2, iData->time[2], iData->dotx2, iData);
evalG22(g + k, iData, x0, i);
k += iData->nJ;

/*3*/
functionODE_(iData->x3, iData->u3, iData->time[3], iData->dotx3, iData);
evalG23(g + k, iData, x0, i);
k += iData->nJ;
}

for(; i<iData->nsi; ++i, x0=iData->x3){
iData->x1 = x0 + iData->nv; /* 0 + 3 = 3;2*/
iData->x2 = iData->x1 + iData->nv; /*3 + 3 = 6;5*/
iData->x3 = iData->x2 + iData->nv; /*6 + 3 = 9*/
iData->x1 = x0 + iData->nv; /* 0 + 3 = 3;2*/
iData->x2 = iData->x1 + iData->nv; /*3 + 3 = 6;5*/
iData->x3 = iData->x2 + iData->nv; /*6 + 3 = 9*/

iData->u1 = iData->x1 + iData->nx; /*3 + 2 = 5*/
iData->u2 = iData->x2 + iData->nx; /*6 + 2 = 8*/
Expand Down
11 changes: 7 additions & 4 deletions SimulationRuntime/c/optimization/localFunction.h
Expand Up @@ -42,13 +42,14 @@
#include "interfaceOptimization.h"
#include "ipoptODEstruct.h"


#ifdef WITH_IPOPT


#ifdef __cplusplus
extern "C"
{
#endif

#ifdef WITH_IPOPT

Bool evalfF(Index n, double * x, Bool new_x, Number *objValue, void * useData);
Bool evalfDiffF(Index n, double * x, Bool new_x, Number *gradF, void * useData);
Bool goal_func_mayer(double* vn, double *obj_value, IPOPT_DATA_ *iData);
Expand All @@ -66,11 +67,13 @@ Bool ipopt_h(int n, double *x, Bool new_x, double obj_factor, int m, double *lam
#endif


/*JAC*/
/*sym JAC*/
int diff_functionODE(double *v, double t, IPOPT_DATA_ *iData, double **J);
int diff_symColoredODE(double *v, double t, IPOPT_DATA_ *iData, double **J);
int diff_symColoredObject(IPOPT_DATA_ *iData, double *gradF, int this_it);

/*num JAC */

/*model*/
int functionODE_(double * x, double *u, double t, double * dotx, IPOPT_DATA_ *iData);
int refreshSimData(double *x, double *u, double t, IPOPT_DATA_ *iData);
Expand Down
4 changes: 3 additions & 1 deletion SimulationRuntime/c/optimization/mainOptimizer/ipoptODE.c
Expand Up @@ -95,10 +95,12 @@ int startIpopt(DATA* data, SOLVER_INFO* solverInfo, int flag)
initial_guess_ipopt(iData,solverInfo);

if(ACTIVE_STREAM(LOG_IPOPT)){
for(i=0; i<iData->nx; i++)
for(i=0; i<iData->nx; ++i)
printf("\nx[%i] = %s = %g | %g",i, iData->data->modelData.realVarsData[i].info.name,iData->v[i],iData->vnom[i]);
for(; i<iData->nv; ++i)
printf("\nu[%i] = %s = %g| %g",i, iData->data->modelData.realVarsData[iData->index_u + i-iData->nx].info.name,iData->v[i],iData->vnom[i]);
if(iData->nc > 0)
printf("\nnumber of constraints %i",iData->nc);
}

ipoptDebuge(iData,iData->v);
Expand Down

0 comments on commit 17615fe

Please sign in to comment.