Opened 12 years ago

Closed 7 years ago

#2246 closed defect (worksforme)

Variable index model gives incorrect results

Reported by: Francesco Casella Owned by: probably noone
Priority: high Milestone: 1.13.0
Component: Backend Version: trunk
Keywords: Cc:

Description (last modified by Francesco Casella)

The following model

model foo
  Real x1, x2;
equation
  der(x1) = 2;
  if x1 < 1 then 
    der(x2) = 1;
  else
    x2 = 1;
  end if;
end foo;

simulated for one second gives as results x1 = 2*time (which is correct) and x2 = time, which is wrong for time > 0.5.

I understand an error should be generated at time = 0.5, or maybe right at compile time, unless we can handle variable structure systems, which we obviously can't (or can we?).

Change History (11)

comment:1 by Martin Sjölund, 12 years ago

Description: modified (diff)

comment:2 by Francesco Casella, 12 years ago

Description: modified (diff)

comment:3 by Martin Sjölund, 11 years ago

Milestone: 1.9.01.9.1

Postponed until 1.9.1

comment:4 by Martin Sjölund, 10 years ago

Milestone: 1.9.11.9.2

This ticket was not closed for 1.9.1, which has now been released. It was batch modified for milestone 1.9.2 (but maybe an empty milestone was more appropriate; feel free to change it).

comment:5 by Martin Sjölund, 10 years ago

Milestone: 1.9.21.9.3

Milestone changed to 1.9.3 since 1.9.2 was released.

comment:6 by Martin Sjölund, 9 years ago

Milestone: 1.9.31.9.4

Moved to new milestone 1.9.4

comment:7 by Martin Sjölund, 9 years ago

Milestone: 1.9.41.9.5

Milestone pushed to 1.9.5

comment:8 by Martin Sjölund, 9 years ago

Milestone: 1.9.51.10.0

Milestone renamed

comment:9 by Martin Sjölund, 8 years ago

Milestone: 1.10.01.11.0

Ticket retargeted after milestone closed

comment:10 by Martin Sjölund, 8 years ago

Milestone: 1.11.01.12.0

Milestone moved to 1.12.0 due to 1.11.0 already being released.

comment:11 by Francesco Casella, 7 years ago

Milestone: 1.12.01.13.0
Resolution: worksforme
Status: newclosed

As of v1.13.0-dev-155-g68350e9, the simulation stops at time = 0.5. There, the debugger shows that it is not possible to solve

if x1 < 1.0 then $DER.x2 - 1.0 else x2 - 1.0 = 0

for der(x2), which I think points out clearly enough what is the root cause of the problem.

Note: See TracTickets for help on using tickets.