Opened 8 years ago
#4374 new defect
Wrong analysis of linearity due to missing jacobian
Reported by: | Patrick Täuber | Owned by: | Willi Braun |
---|---|---|---|
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.
Note:
See TracTickets
for help on using tickets.