Skip to content

Commit 05b9ab5

Browse files
author
Vitalij Ruge
committed
- improve initial guess
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19315 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent af99788 commit 05b9ab5

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

SimulationRuntime/c/optimization/initialOptimizer/initial_guess.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ static int initial_guess_ipopt_sim(IPOPT_DATA_ *iData,SOLVER_INFO* solverInfo)
104104
int i,j,k,ii,jj,id;
105105
int err;
106106
double *v;
107+
long double a;
107108
long double tol;
108109
short printGuess;
109110

@@ -154,13 +155,16 @@ static int initial_guess_ipopt_sim(IPOPT_DATA_ *iData,SOLVER_INFO* solverInfo)
154155

155156
for(i=0, k=1, v=iData->v + iData->nv; i<iData->nsi; ++i){
156157
for(jj=0; jj<iData->deg; ++jj, ++k){
158+
a = 1.0;
157159
while(iData->data->localData[0]->timeValue <= iData->time[k]){
158-
solverInfo->currentStepSize = iData->time[k] - iData->time[k-1];
160+
solverInfo->currentStepSize = a*(iData->time[k] - iData->time[k-1]);
159161
if(data->simulationInfo.external_input.active)
160162
externalInputUpdate(data);
161163
err = dasrt_step(data, solverInfo);
162164
if(err<0)
163-
iData->time[k] *= 0.9;
165+
a *= 0.5;
166+
if(a < 1e-20)
167+
break;
164168
}
165169
if(printGuess)
166170
printf("\n #####done time[%i] = %f", k, iData->time[k]);

0 commit comments

Comments
 (0)