Opened 8 years ago

#4374 new defect

Wrong analysis of linearity due to missing jacobian

Reported by: ptaeuber Owned by: wbraun
Priority: high Milestone: Future
Component: Backend Version:
Keywords: linear nonlinear analytic jacobian pre() Cc: fixed-term.QiCheng.Hua@…

Description

The Model Modelica.Electrical.PowerConverters.Examples.ACDC.RectifierBridge2mPulse.ThyristorBridge2mPulse_RLV_Characteristic from the MSL contains one system which is considered as nonlinear although it is obviously linear:

1/1 (1): rectifier.thyristor_n.idealThyristor[3].off = rectifier.thyristor_n.idealThyristor[3].s < 0.0 or pre(rectifier.thyristor_n.idealThyristor[3].off) and not rectifier.pre_n[3].y   [dynamic]
2/2 (1): rectifier.thyristor_n.i[3] = rectifier.thyristor_n.idealThyristor[3].s * (if rectifier.thyristor_n.idealThyristor[3].off then 1e-05 else 1.0)   [dynamic]
3/3 (1): rectifier.thyristor_p.i[3] + (-rectifier.thyristor_n.i[3]) - rectifier.iAC[3] = 0.0   [dynamic]
4/4 (1): multiStarResistance.resistor.i[1] + rectifier.iAC[2] + rectifier.iAC[3] + rectifier.iAC[1] = 0.0   [dynamic]
5/5 (1): rectifier.thyristor_p.i[2] + (-rectifier.thyristor_n.i[2]) - rectifier.iAC[2] = 0.0   [dynamic]
6/6 (1): rectifier.thyristor_n.i[2] = rectifier.thyristor_n.idealThyristor[2].s * (if rectifier.thyristor_n.idealThyristor[2].off then 1e-05 else 1.0)   [dynamic]
7/7 (1): rectifier.thyristor_n.idealThyristor[2].off = rectifier.thyristor_n.idealThyristor[2].s < 0.0 or pre(rectifier.thyristor_n.idealThyristor[2].off) and not rectifier.pre_n[2].y   [dynamic]
8/8 (1): rectifier.thyristor_n.idealThyristor[2].v = rectifier.thyristor_n.idealThyristor[2].s * (if rectifier.thyristor_n.idealThyristor[2].off then 1.0 else 1e-05)   [dynamic]
9/9 (1): rectifier.thyristor_n.idealThyristor[2].v = currentSensor.n.v - rectifier.vAC[2]   [dynamic]
10/10 (1): rectifier.thyristor_n.idealThyristor[3].v = currentSensor.n.v - rectifier.vAC[3]   [dynamic]
11/11 (1): rectifier.thyristor_n.idealThyristor[3].v = rectifier.thyristor_n.idealThyristor[3].s * (if rectifier.thyristor_n.idealThyristor[3].off then 1.0 else 1e-05)   [dynamic]
12/12 (1): rectifier.thyristor_n.idealThyristor[1].v = currentSensor.n.v - rectifier.vAC[1]   [dynamic]
13/13 (1): rectifier.thyristor_p.idealThyristor[1].v = rectifier.vAC[1] - rectifier.dc_p.v   [dynamic]
14/14 (1): rectifier.thyristor_p.idealThyristor[1].v = rectifier.thyristor_p.idealThyristor[1].s * (if rectifier.thyristor_p.idealThyristor[1].off then 1.0 else 1e-05)   [dynamic]
15/15 (1): rectifier.thyristor_p.idealThyristor[1].off = rectifier.thyristor_p.idealThyristor[1].s < 0.0 or pre(rectifier.thyristor_p.idealThyristor[1].off) and not rectifier.pre_p[1].y   [dynamic]
16/16 (1): rectifier.thyristor_p.i[1] = rectifier.thyristor_p.idealThyristor[1].s * (if rectifier.thyristor_p.idealThyristor[1].off then 1e-05 else 1.0)   [dynamic]
17/17 (1): rectifier.thyristor_p.i[1] + rectifier.thyristor_p.i[2] + rectifier.thyristor_p.i[3] - inductor.i = 0.0   [dynamic]
18/18 (1): rectifier.thyristor_p.i[2] = rectifier.thyristor_p.idealThyristor[2].s * (if rectifier.thyristor_p.idealThyristor[2].off then 1e-05 else 1.0)   [dynamic]
19/19 (1): rectifier.thyristor_p.idealThyristor[2].off = rectifier.thyristor_p.idealThyristor[2].s < 0.0 or pre(rectifier.thyristor_p.idealThyristor[2].off) and not rectifier.pre_p[2].y   [dynamic]
20/20 (1): rectifier.thyristor_p.idealThyristor[2].v = rectifier.thyristor_p.idealThyristor[2].s * (if rectifier.thyristor_p.idealThyristor[2].off then 1.0 else 1e-05)   [dynamic]
21/21 (1): rectifier.thyristor_p.idealThyristor[2].v = rectifier.vAC[2] - rectifier.dc_p.v   [dynamic]
22/22 (1): rectifier.thyristor_p.idealThyristor[3].v = rectifier.vAC[3] - rectifier.dc_p.v   [dynamic]
23/23 (1): rectifier.thyristor_p.idealThyristor[3].v = rectifier.thyristor_p.idealThyristor[3].s * (if rectifier.thyristor_p.idealThyristor[3].off then 1.0 else 1e-05)   [dynamic]
24/24 (1): rectifier.thyristor_p.idealThyristor[3].off = rectifier.thyristor_p.idealThyristor[3].s < 0.0 or pre(rectifier.thyristor_p.idealThyristor[3].off) and not rectifier.pre_p[3].y   [dynamic]
25/25 (1): rectifier.thyristor_p.i[3] = rectifier.thyristor_p.idealThyristor[3].s * (if rectifier.thyristor_p.idealThyristor[3].off then 1e-05 else 1.0)   [dynamic]
26/26 (1): rectifier.thyristor_p.i[1] + (-rectifier.thyristor_n.i[1]) - rectifier.iAC[1] = 0.0   [dynamic]
27/27 (1): sineVoltage.sineVoltage[1].v = rectifier.vAC[1] - multiStarResistance.resistor.v[1]   [dynamic]
28/28 (1): sineVoltage.sineVoltage[2].v = rectifier.vAC[2] - multiStarResistance.resistor.v[1]   [dynamic]
29/29 (1): sineVoltage.sineVoltage[3].v = rectifier.vAC[3] - multiStarResistance.resistor.v[1]   [dynamic]
30/30 (1): multiStarResistance.resistor.v[1] = 1000000.0 * multiStarResistance.resistor.i[1]   [dynamic]
31/31 (1): inductor.i + (-rectifier.thyristor_n.i[1]) - rectifier.thyristor_n.i[3] - rectifier.thyristor_n.i[2] = 0.0   [dynamic]
32/32 (1): rectifier.thyristor_n.i[1] = rectifier.thyristor_n.idealThyristor[1].s * (if rectifier.thyristor_n.idealThyristor[1].off then 1e-05 else 1.0)   [dynamic]
33/33 (1): rectifier.thyristor_n.idealThyristor[1].off = rectifier.thyristor_n.idealThyristor[1].s < 0.0 or pre(rectifier.thyristor_n.idealThyristor[1].off) and not rectifier.pre_n[1].y   [dynamic]
34/34 (1): rectifier.thyristor_n.idealThyristor[1].v = rectifier.thyristor_n.idealThyristor[1].s * (if rectifier.thyristor_n.idealThyristor[1].off then 1.0 else 1e-05)   [dynamic]

The linearity is assessed on the basis of the analytical jacobian, which is missing here and therefore leads to a nonlinear "result". Since the system does not contain any function call it may has something to do with the pre-operator and is related to 4373.

Change History (0)

Note: See TracTickets for help on using tickets.