Skip to content

Commit

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


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19860 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Vitalij Ruge committed Mar 31, 2014
1 parent fce0e09 commit 3954a9f
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 37 deletions.
39 changes: 21 additions & 18 deletions SimulationRuntime/c/optimization/initialOptimizer/allocate_ipopt.c
Expand Up @@ -132,10 +132,11 @@ int move_grid(IPOPT_DATA_ *iData)
iData->dt_default = (iData->tf - iData->t0)/(dim->nsi);
assert(dim->nsi>0);

t = dim->nsi*iData->dt_default;
t = iData->t0;

for(i=0;i<dim->nsi; ++i){
iData->dt[i] = iData->dt_default;
t += iData->dt[i];
}
assert(dim->nsi>0);
iData->dt[dim->nsi-1] = iData->dt_default + (iData->tf - t);
Expand Down Expand Up @@ -389,13 +390,14 @@ static int check_nominal(IPOPT_DATA_ *iData, double min, double max, double nomi
static int optimizer_coeff_setings(IPOPT_DATA_ *iData)
{
OPTIMIZER_MBASE *mbase = &iData->mbase;
mbase->c1 = 0.15505102572168219018027159252941086080340525193433;
mbase->c2 = 0.64494897427831780981972840747058913919659474806567;
mbase->c3 = 1.0;

mbase->e1 = 0.27639320225002103035908263312687237645593816403885;
mbase->e2 = 0.72360679774997896964091736687312762354406183596115;
mbase->e3 = 1.0;
mbase->c[0][0] = 0.27639320225002103035908263312687237645593816403885;
mbase->c[0][1] = 0.72360679774997896964091736687312762354406183596115;
mbase->c[0][2] = 1.0;

mbase->c[1][0] = 0.15505102572168219018027159252941086080340525193433;
mbase->c[1][1] = 0.64494897427831780981972840747058913919659474806567;
mbase->c[1][2] = 1.0;

mbase->a1[0] = 4.1393876913398137178367408896470696703591369767880;
mbase->a1[1] = 3.2247448713915890490986420373529456959829737403284;
Expand Down Expand Up @@ -544,19 +546,20 @@ static int optimizer_bounds_setings(DATA *data, IPOPT_DATA_ *iData)
**/
static int optimizer_time_setings(IPOPT_DATA_ *iData)
{
int i,k,id;
int i,k,id,j;
OPTIMIZER_MBASE *mbase = &iData->mbase;
iData->time[0] = iData->t0;
for(i = 0,k=0,id=0; i<1; ++i,id += iData->dim.deg){
iData->time[++k] = iData->time[id] + mbase->e1*iData->dt[i];
iData->time[++k] = iData->time[id] + mbase->e2*iData->dt[i];
iData->time[++k] = iData->t0 + (i+1)*iData->dt[i];
}
for(; i<iData->dim.nsi; ++i,id += iData->dim.deg){
iData->time[++k] = iData->time[id] + mbase->c1*iData->dt[i];
iData->time[++k] = iData->time[id] + mbase->c2*iData->dt[i];
iData->time[++k] = iData->t0 + (i+1)*iData->dt[i];
}

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];


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];


iData->time[k] = iData->tf;
return 0;
}
Expand Down
26 changes: 13 additions & 13 deletions SimulationRuntime/c/optimization/initialOptimizer/initial_guess.c
Expand Up @@ -244,7 +244,7 @@ static int pre_ipopt_sim(IPOPT_DATA_ *iData,SOLVER_INFO* solverInfo)

static int optimizer_time_setings_update(IPOPT_DATA_ *iData)
{
int i,k,id;
int i,k,id,j;
double t;
OPTIMIZER_MBASE *mbase = &iData->mbase;

Expand All @@ -253,24 +253,24 @@ static int optimizer_time_setings_update(IPOPT_DATA_ *iData)
iData->time[0] = iData->t0;
iData->dt_default = (iData->tf - iData->t0)/(iData->dim.nsi);

t = iData->dim.nsi*iData->dt_default;
t = iData->t0;

for(i=0;i<iData->dim.nsi; ++i)
for(i=0;i<iData->dim.nsi; ++i){
iData->dt[i] = iData->dt_default;
t += iData->dt[i];
}

iData->dt[iData->dim.nsi-1] = iData->dt_default + (iData->tf - t);

for(i = 0, k=0, id=0; i<1; ++i,id += iData->dim.deg){
iData->time[++k] = iData->time[id] + mbase->e1*iData->dt[i];
iData->time[++k] = iData->time[id] + mbase->e2*iData->dt[i];
iData->time[++k] = iData->time[0]+ (i+1)*iData->dt[i];
}
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];


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];

for(; i<iData->dim.nsi; ++i,id += iData->dim.deg){
iData->time[++k] = iData->time[id] + mbase->c1*iData->dt[i];
iData->time[++k] = iData->time[id] + mbase->c2*iData->dt[i];
iData->time[++k] = iData->time[0]+ (i+1)*iData->dt[i];
}

iData->time[k] = iData->tf;
return 0;
Expand Down
8 changes: 2 additions & 6 deletions SimulationRuntime/c/optimization/ipoptODEstruct.h
Expand Up @@ -83,9 +83,7 @@ typedef struct OPTIMIZER_MBASE{

long double b[3][10];

long double c1;
long double c2;
long double c3;
long double c[3][5];

long double *a1;
long double *a2;
Expand All @@ -96,9 +94,7 @@ typedef struct OPTIMIZER_MBASE{
long double *d3;
long double invd1_4;

long double e1;
long double e2;
long double e3;


}OPTIMIZER_MBASE;

Expand Down

0 comments on commit 3954a9f

Please sign in to comment.