Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

11
Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen - Professur für Baumaschinen- und Fördertechnik Leipzig, 02.07.2014

description

Professur für Baumaschinen- und Fördertechnik. Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -. Leipzig, 02.07.2014. partielle Funktionsevaluierung. OpenModelica -Compiler pre-optimization module. partielle Funktionsevaluierung. - PowerPoint PPT Presentation

Transcript of Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

Page 1: Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

Partielle Funktionsevaluierung

- der Schlüssel zu den Spice3 Modellen -

Professur für Baumaschinen- und Fördertechnik

Leipzig, 02.07.2014

Page 2: Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

HTWK Leipzig, 02.07.2014 partielle Funktionsevaluierung Folie 2 von 11

partielle Funktionsevaluierung

- OpenModelica-Compiler pre-optimization module

Page 3: Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

HTWK Leipzig, 02.07.2014 partielle Funktionsevaluierung Folie 3 von 11

partielle Funktionsevaluierung

assert | debug | division by zero at time 0, (a=-0.0388) / (b=0), where divisor b expression is: J1.cc.cGD

SingleEquation: der(J1.vGD) = J1.icGD /J1.cc.cGD

ComplexEquation:(5): J1.cc = Modelica.Electrical.Spice3.Internal.Jfet.jfetNoBypassCode(

(300.15, 1.0, false, 0.0, 0.0, 0.0, 0.0, false, 1e-014, 1.0, 0.0, 0.0, 0.5, 0.7302833841653967, 0.5857864376269049, 0.3535533905932738,

0.25, 0.02586470905512062, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),

(-2.0, 0.0001, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1e-014, 0.5, 1.0, 0.0, 1.0, 0.0, 0.0, 300.15, 0.0),

1, false, {U0.V, J1.Dinternal, J1.Sinternal})

Modelica.Electrical.Spice3.Examples.CascodeCircuit

Page 4: Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

HTWK Leipzig, 02.07.2014 partielle Funktionsevaluierung Folie 4 von 11

partielle Funktionsevaluierung

warning | Failed to solve linear system of equations (no. 32) at time 0.000000, system is singular for U[7, 7].warning | Failed to solve linear system of equations (no. 68) at time 0.000000, system is singular for U[6, 6].Equationsystem Jacobian Time varying:1/1 (1): 0.0 = (-mp.irs) - mp.icBS - mp.ibsgmin - mp.cc.iBS - mp.icGS - mp.cc.idrain 2/2 (1): mp.icGS = mp.cc.cGS * ($DER.mn.G.v - der(mn.Dinternal)) 3/3 (1): mn.icGD = mn.cc.cGD * ($DER.mn.G.v - der(mn.Dinternal)) 4/4 (1): 0.0 = mn.cc.idrain + mp.irs + (-mn.ibdgmin) - mn.icGD - mn.icBD - mn.cc.iBD 5/5 (1): mn.icBD = (-mn.cc.cBD) * der(mn.Dinternal) [dynamic]6/6 (1): mp.icBS = mp.cc.cBS * ($DER.mp.B.v - der(mn.Dinternal))

1/1 (9): mn.cc = Modelica.Electrical.Spice3.Internal.Mos.mosCalcNoBypassCode((300.15, 0.0001, 0.0001, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0,

1, 0.0, 0.0, false), 1, (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,

0.0, 2e-005, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1, 0.0001, 0.0, 0.0, 2e-005, 600.0, 0.6, 0.0, 0.0, 1e-014, 1e-014, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8, 0.4, 0.0, .7302833841653967, 0.7302833841653967, 0.4686291501015239, 0.3535533905932738, 0.25, 0.0, 0.0, 0.0, 0.02586470905512062, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.8, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.5, 0.6, 0.0, 0.0, 0.0,

0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 600.0, 0.0, 1e-014, 0.0, 1.0, 0.0, 1.0, 2e-005, 0.0, 300.15),

(1.035943139907e-010, 3.453133e-011, 1.6021918e-019, 273.15, 1.3806226e-023, 300.15,

1.414213562373095, 2.718281828459045, 1e-012, 300.15, 300.15, 0.0, 0.0, 0.0001, 0.0001, 1e-010,

1e-015, 1e-010, 0.001, 0.02586470905512062, 8.61726105451295e-005), (0.0, 0.0, 0.6, 0.0, 2e-005), false, {mn.G.v, 0.0, mn.Dinternal, 0.0})

Modelica.Electrical.Spice3.Examples.Inverter

Page 5: Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

HTWK Leipzig, 02.07.2014 partielle Funktionsevaluierung Folie 5 von 11

partielle Funktionsevaluierung

TODO:

- konstante function-inputs inklusive teil-konstanter record-Ausdrücke einsetzen

- Funktionsvariablen und outputs evaluieren

- konstante function-outputs inklusive teil-konstanter record-Ausdrücke als neue Zuweisungen zum DAE-System hinzufügen

- vollständig evaluierte function entfernen, teil-evaluierte function umschreiben und outputs anpassen

Page 6: Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

HTWK Leipzig, 02.07.2014 partielle Funktionsevaluierung Folie 6 von 11

partielle Funktionsevaluierung

function func  input Real in1;  input Real in2;  output Real out;protected   Real x;algorithm   x := in1+in2;  out := 8 – in2;end func;

func.in1 variablefunc.in2 10.0

x variable

out 8.0 -10.0 2

b 2

b = func(a,10.0);

b = 2.0;

Page 7: Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

HTWK Leipzig, 02.07.2014 partielle Funktionsevaluierung Folie 7 von 11

partielle Funktionsevaluierung

function mosCalcNoBypassCode…if (Spice3.Internal.SpiceRoot.useInitialConditions()) and (in_m.m_dICVBSIsGiven       > 0.5) then    int_c.m_vbs := in_m_type * in_m.m_dICVBS;elseif (      Spice3.Internal.SpiceRoot.initJunctionVoltages()) then    int_c.m_vbs := if (in_m.m_off >0.5) then 0. else int_c.m_VBScrit;end if;…

function useInitialConditions "Initial condition handling"extends Modelica.Icons.Function;  output Boolean ret;algorithm   ret := false;end useInitialConditions;

function initJunctionVoltages   "Choice of junction voltage handling, obsolete, use initJunctionVoltageRevised"  extends Modelica.Icons.Function;   extends Modelica.Icons.ObsoleteModel;  output Boolean ret;algorithm   ret := false;end initJunctionVoltages; if-expression handling

Modelica.Electrical.Spice3.Examples.Inverter

Page 8: Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

HTWK Leipzig, 02.07.2014 partielle Funktionsevaluierung Folie 8 von 11

partielle Funktionsevaluierung

Modelica.Electrical.Spice3.Internal.Mos.mosCalcDEVqmeyer function mosCalcDEVqmeyer… if (vgst <= -in_c.m_tPhi) then    out_qm.qm_capgb := in_c.m_capOx / 2.;    out_qm.qm_capgs := 0.;    out_qm.qm_capgd := 0.;  elseif (vgst <= -in_c.m_tPhi / 2.) then    out_qm.qm_capgb := -vgst * in_c.m_capOx / (2. * in_c.m_tPhi);    out_qm.qm_capgs := 0.;    out_qm.qm_capgd := 0.;  elseif (vgst <= 0.) then    out_qm.qm_capgb := -vgst * in_c.m_capOx / (2. * in_c.m_tPhi);    out_qm.qm_capgs := vgst * in_c.m_capOx / (1.5 * in_c.m_tPhi) + in_c.m_capOx / 3.;    out_qm.qm_capgd := 0.;  else    vds := vgs - vgd;    if (in_c.m_vdsat <= vds) then      out_qm.qm_capgs := in_c.m_capOx / 3.;      out_qm.qm_capgd := 0.;      out_qm.qm_capgb := 0.;    else      vddif  := 2.0 * in_c.m_vdsat - vds;      vddif1 := in_c.m_vdsat - vds;      vddif2 := vddif * vddif;      out_qm.qm_capgd := in_c.m_capOx * (1. - in_c.m_vdsat  * in_c.m_vdsat  / vddif2) / 3.;      out_qm.qm_capgs := in_c.m_capOx * (1. - vddif1 * vddif1 / vddif2) / 3.;      out_qm.qm_capgb := 0.;    end if;  end if;…

if-conditions NICHT evaluierbar,aber:

if-prediction

0.0 0.0 0.0

0.0 0.0 0.0

0.0 0.0

0.0

0.0 0.0

0.0 0.0

0.0

0.0

in_c.m_capOx 0.0out_qm.qm_capgb := 0.0;out_qm.qm_capgs := 0.0;out_qm.qm_capgd := 0.0;

Page 9: Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

HTWK Leipzig, 02.07.2014 partielle Funktionsevaluierung Folie 9 von 11

partielle Funktionsevaluierung

Modelica.Electrical.Spice3.Examples.Inverter

(mn.cc.idrain, mn.cc.iBD, mn.cc.iBS) = Modelica.Electrical.Spice3.Internal.Mos.mosCalcNoBypassCode_eval15( (300.15, 0.0001, 0.0001, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0, 1, 0.0, 0.0, false), 1, (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2e-005, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1, 0.0001, 0.0, 0.0, 2e-005, 600.0, 0.6, 0.0, 0.0, 1e-014, 1e-014, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8, 0.4, 0.0, 0.7302833841653967, 0.7302833841653967, 0.4686291501015239, 0.3535533905932738, 0.25, 0.0, 0.0, 0.0, 0.02586470905512062, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.8, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.5, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 600.0, 0.0, 1e-014, 0.0, 1.0, 0.0, 1.0, 2e-005, 0.0, 300.15), 1.035943139907e-010, 3.453133e-011, 1.6021918e-019, 273.15, 1.3806226e-023, 300.15, 1.414213562373095, 2.718281828459045, 1e-012, 300.15, 300.15, 0.0, 0.0, 0.0001, 0.0001, 1e-010, 1e-015, 1e-010, 0.001, 0.02586470905512062, 8.61726105451295e-005), (0.0, 0.0, 0.6, 0.0, 2e-005), false, {mn.G.v, 0.0, mn.Dinternal, 0.0})mn.cc.cGS = 0.0 mn.cc.cGD = 0.0 mn.cc.cGB = 0.0 mn.cc.cBD = 0.0 mn.cc.cBS = 0.0 mn.cc.m_capgd = 0.0

mn.cc = Modelica.Electrical.Spice3.Internal.Mos.mosCalcNoBypassCode( (300.15, 0.0001, 0.0001, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0, 1, 0.0, 0.0, false), 1, (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2e-005, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1, 0.0001, 0.0, 0.0, 2e-005, 600.0, 0.6, 0.0, 0.0, 1e-014, 1e-014, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8, 0.4, 0.0, 0.7302833841653967, 0.7302833841653967, 0.4686291501015239, 0.3535533905932738, 0.25, 0.0, 0.0, 0.0, 0.02586470905512062, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), (0.0, 0.0, 0.8, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.5, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 600.0, 0.0, 1e-014, 0.0, 1.0, 0.0, 1.0, 2e-005, 0.0, 300.15), (1.035943139907e-010, 3.453133e-011, 1.6021918e-019, 273.15, 1.3806226e-023, 300.15, 1.414213562373095, 2.718281828459045, 1e-012, 300.15, 300.15, 0.0, 0.0, 0.0001, 0.0001, 1e-010, 1e-015, 1e-010, 0.001, 0.02586470905512062, 8.61726105451295e-005), (0.0, 0.0, 0.6, 0.0, 2e-005), false, {mn.G.v, 0.0, mn.Dinternal, 0.0})

Page 10: Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

HTWK Leipzig, 02.07.2014 partielle Funktionsevaluierung Folie 10 von 11

partielle Funktionsevaluierung

Motivation?Parallelisierung vonModelica.Electrical.Spice3.Examples.Spice3BenchmarkFourBitBinaryAdder

thread 1 thread 4thread 3thread 2

speedUp: 2.7

sim

ula

tion t

ime hohes paralleles

Potenzial durch „schwach

gekoppelte Subsysteme“

Page 11: Partielle Funktionsevaluierung - der Schlüssel zu den Spice3 Modellen -

HTWK Leipzig, 02.07.2014 partielle Funktionsevaluierung Folie 11 von 11