Opened 6 years ago

Closed 5 years ago

#5294 closed defect (fixed)

Backend does not support initial if equation with assert

Reported by: Willi Braun Owned by: Karim Adbdelhak
Priority: high Milestone: 1.14.0
Component: Initialization Version: v1.14.0-dev-nightly
Keywords: Cc: Niklas Worschech

Description

For instance models as below are not supported by BackendCreate.

loadString("
model A
  Real x,xd;
  parameter Real lb=5, ub=10;
equation
initial equation
  if x<ub then
    assert(xd>49, \"Call ub assert\\n\");
  end if;
  if x<lb then
    assert(xd<49, \"Call lb assert\\n\");
  end if;
equation
  der(x) = sin(x*time)+lb*ub;
  xd = der(x);
end A;
");
getErrorString();

simulate(A);
getErrorString();

Change History (9)

comment:1 by Willi Braun, 6 years ago

Component: BackendInitialization
Status: newassigned

Created PR2895 where the model now is passed, but no assert has been triggered. I guess now are the asserts filtered in the initialization somewhere.

comment:2 by Francesco Casella, 6 years ago

Owner: changed from Lennart Ochel to Karim Adbdelhak

Karim handled a similar problem in #5226. Maybe he can have a look.

comment:3 by Karim Adbdelhak, 6 years ago

The PR2889 from ticket #5226 is not accepted jet, but i combined it with the changes from PR2895.

The asserts are triggered and the following error is thrown:

assert            | warning | The following assertion has been violated during initialization at time 0.000000
|                 | |       | if x < lb then xd < 49.0 else true
assert            | error   | Call lb assert
assert            | info    | simulation terminated by an assertion at initialization

I will have a look into that.

EDIT: Is this expected behaviour? Since xd always resolves to 50 and x<lb is always true in the initial system, because x gets initialized with 0, therefore the assert can never be fulfilled.

Last edited 6 years ago by Karim Adbdelhak (previous) (diff)

in reply to:  3 comment:4 by Willi Braun, 6 years ago

Replying to Karim.Abdelhak:

The PR2889 from ticket #5226 is not accepted jet, but i combined it with the changes from PR2895.

The asserts are triggered and the following error is thrown:

assert            | warning | The following assertion has been violated during initialization at time 0.000000
|                 | |       | if x < lb then xd < 49.0 else true
assert            | error   | Call lb assert
assert            | info    | simulation terminated by an assertion at initialization

I will have a look into that.

EDIT: Is this expected behaviour? Since xd always resolves to 50 and x<lb is always true in the initial system, because x gets initialized with 0, therefore the assert can never be fulfilled.

Yes, it is. That just a stupid test model to trigger an assert in an initial if-equation.

I'll start the related hudson jobs, and we will see.

comment:5 by Francesco Casella, 6 years ago

I'm not sure I can follow the commit history. @Karim, when you say you combined PR2889 with changes from 2895, you mean you did it on your local repo? I can't see that on GitHub.

Furthermore, PR2889 produced a regression, so it can't be accepted as it is

in reply to:  5 ; comment:6 by Willi Braun, 6 years ago

Replying to casella:

I'm not sure I can follow the commit history. @Karim, when you say you combined PR2889 with changes from 2895, you mean you did it on your local repo? I can't see that on GitHub.

Furthermore, PR2889 produced a regression, so it can't be accepted as it is

I guess Karim has tested it locally.
The regression is actually a false positive, since it tells us that tearing is working now as expected. I'll change the test and the push it, again.

in reply to:  6 comment:7 by Karim Adbdelhak, 6 years ago

Replying to wbraun:

Replying to casella:

I'm not sure I can follow the commit history. @Karim, when you say you combined PR2889 with changes from 2895, you mean you did it on your local repo? I can't see that on GitHub.

Furthermore, PR2889 produced a regression, so it can't be accepted as it is

I guess Karim has tested it locally.
The regression is actually a false positive, since it tells us that tearing is working now as expected. I'll change the test and the push it, again.

Correct, i just changed it locally since both pull requests are pending. When the test is changed and both requests are applied it should work as expected. Thanks wbraun!

comment:8 by Willi Braun, 6 years ago

Fixed in PR2895.

@niklwors Can you verify if your model works now as supposed?

comment:9 by Francesco Casella, 5 years ago

Milestone: 1.14.0
Resolution: fixed
Status: assignedclosed

Closing the ticket as the original problem is now solved.

Note: See TracTickets for help on using tickets.