Skip to content

Commit

Permalink
- improve external input
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19374 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Vitalij Ruge committed Mar 2, 2014
1 parent 85dbfe2 commit 4b04b28
Showing 1 changed file with 5 additions and 17 deletions.
22 changes: 5 additions & 17 deletions SimulationRuntime/c/simulation/solver/external_input.c
Expand Up @@ -117,7 +117,8 @@ int externalInputFree(DATA* data)
int externalInputUpdate(DATA* data)
{
double u1, u2;
double t, t1, t2, dt;
double t, t1, t2;
long double dt;
int i;

if(!data->simulationInfo.external_input.active)
Expand All @@ -127,26 +128,16 @@ int externalInputUpdate(DATA* data)
t1 = data->simulationInfo.external_input.t[data->simulationInfo.external_input.i];
t2 = data->simulationInfo.external_input.t[data->simulationInfo.external_input.i+1];

if(t == t1){
for(i = 0; i < data->modelData.nInputVars; ++i){
data->simulationInfo.inputVars[i] = data->simulationInfo.external_input.u[data->simulationInfo.external_input.i][i];
}
return 1;
}else if(t == t2){
for(i = 0; i < data->modelData.nInputVars; ++i){
data->simulationInfo.inputVars[i] = data->simulationInfo.external_input.u[data->simulationInfo.external_input.i][i+1];
}
return 1;
}

while(i > 0 && t < t1){
--data->simulationInfo.external_input.i;
t1 = data->simulationInfo.external_input.t[data->simulationInfo.external_input.i];
}

while(t > data->simulationInfo.external_input.t[data->simulationInfo.external_input.i+1]
while(t > t2
&& data->simulationInfo.external_input.i+1 < (data->simulationInfo.external_input.n-1)){
++data->simulationInfo.external_input.i;
t1 = data->simulationInfo.external_input.t[data->simulationInfo.external_input.i];
t2 = data->simulationInfo.external_input.t[data->simulationInfo.external_input.i+1];
}

if(t == t1){
Expand All @@ -167,9 +158,6 @@ int externalInputUpdate(DATA* data)
u2 = data->simulationInfo.external_input.u[data->simulationInfo.external_input.i+1][i];

if(u1 != u2){
if(sign(u1) == sign(u2))
data->simulationInfo.inputVars[i] = ((u1*(dt+t1) + t*u2) - (t*u1+t1*u2))/dt;
else
data->simulationInfo.inputVars[i] = (u1*(dt+t1-t)+(t-t1)*u2)/dt;
}else{
data->simulationInfo.inputVars[i] = u1;
Expand Down

0 comments on commit 4b04b28

Please sign in to comment.