modia a domain specific
play

Modia - A Domain Specific Extension of Julia for Modeling and - PowerPoint PPT Presentation

Modia - A Domain Specific Extension of Julia for Modeling and Simulation Hilding Elmqvist, Mogram AB, Lund, Sweden Co-developers: Toivo Henningsson, Martin Otter Toivo H. Outline Rationale for Modia project Modia Language by examples


  1. Modia - A Domain Specific Extension of Julia for Modeling and Simulation Hilding Elmqvist, Mogram AB, Lund, Sweden Co-developers: Toivo Henningsson, Martin Otter Toivo H.

  2. Outline  Rationale for Modia project  Modia Language by examples  Modia Prototype  Summary Toivo H.

  3. Modelica for Systems Modeling  www.Modelica.org  A formal language to capture modeling knowhow  Equation based language - for convenience  Object oriented - for reuse  System topology - by connections  Terminal definitions - connectors  Icons AND equations - not only symbols system sine2 defaults V_l g freqHz=0.2 R3 p3 levelSetPoint R=1 T_S K2degC lossyGear C4 R11 n12 inertia4 inertia5 inertia6 spring3 K degC R=1 C=c4 k=67 C1 C3 C6 C7 c=1e4 n3 n4 n6 p2 n11 ratio=2 limiter limiter controller clutch oneWayClutch pressure J=2 J=2 J=2 feedback C=c1 + c2 C=l1 C=c2 + c3 + c4 C=l2 Pa2bar p_S R2 R6 R8 C9 brake n2 n8 n9 p4 n13 PI - R=1 R=1 R=-1 p C=c4 + c5 k=1e-5 uMax=500 T=120 sine temperature bearingFriction torque springDamper inertia1 inertia2 elastoBacklash inertia3 Op1 Op2 Op3 Op4 Op5 qm_S R1 n1 R4 R7 R9 R10 R=1 n5 n7 n10 n14 tau c=1e5 c=1e4 R=-1 R=1 R=-1 R=1 T J=2 J=2 J=2 m_flow pump SteamValve b=0.001 freqHz=5 d=20 m_flow C2 m R5 C=c2 G G1 G2 G3 G4 R=-1 sink evaporator massFlowRate C5 TAmbient convection fixed C=c2 q_F C8 degC p1 out1 q_F_Tab Y_Valve_Tab Gc T=25 C=c4 MW2W const k=1e6 offset=0 offset=0 Y_Valve k=20 Ground1 Toivo H.

  4. Modelica Basics  Object- and equation-oriented modeling language  Successfully utilized in industry for modeling, simulating and optimizing complex systems such as automobiles, aircraft, power systems, etc.  The dynamic behavior of system components is modelled by equations, for example, mass- and energy-balances.  Ordinary Differential Equations  Algebraic Equations  = DAE (Differential Algebraic Equations)  Modelica is quite different from ordinary programming languages since equations with mathematical expressions on both sides of the equals sign are allowed.  Structural and symbolic methods are used to compile such equations into efficient executable code. Toivo H.

  5. Why Modia ?  New needs of modeling features are requested  Need an experimental language platform  Modelica specification is becoming large and hard to comprehend  Could be complemented by a reference implementation  Functions/Algorithms in Modelica are not powerful  no advanced data structures such as union types, no matching construct, no type inference, etc  Possibility to utilize other language efforts for functions  Julia has perfect scientific computing focus  Modia - Julia macro set We hope to use this work to make contributions to the Modelica effort Toivo H.

  6. Modia – “Hello Physical World” model Modelica @ model FirstOrder begin model FirstOrder x = Variable(start=1) Real x(start=1); T = Parameter(0.5, info="Time constant") parameter Real T=0.5 "Time constant"; u = 2.0 # Same as Parameter(2.0) parameter Real u = 2.0; @ equations begin equation T*der(x) + x = u T*der(x) + x = u; end end M; end Toivo H.

  7. Connectors and Components - Electrical @ model Pin begin v=Float() i=Float(flow=true) end @ model OnePort begin p=Pin() n=Pin() v=Float() i=Float() @ equations begin v = p.v - n.v # Voltage drop 0 = p.i + n.i # KCL within component i = p.i end end @ model Resistor begin # Ideal linear electrical resistor @ extends OnePort() @ inherits i, v R=1 # Resistance @ equations begin R*i = v end end Toivo H.

  8. Coupled Models - Electrical Circuit @ model LPfilter begin R = Resistor(R=100) C = Capacitor(C=0.001) V = ConstantVoltage(V=10) @ equations begin connect(R.n, C.p) connect(R.p, V.p) connect(V.n, C.n) end end Toivo H.

  9. Web App – for connecting components  Bachelor thesis project  Create, connect, set parameters, simulate, plot, animate in 3D  Automatic placement and routing  Together with Modelon AB Toivo H.

  10. Web App – on smart phone  Scenario:  Working in your autonomous car Toivo H.

  11. Variable Constructor In general: time varying variable with attributes: type Variable variability::Variability T::DataType Short version: size value Var(; args...) = Variable(; args...) unit::SIUnits.SIUnit min Specialization for parameters: max Parameter(value; args...) = Var(variability=parameter, value=value; args...) start nominal info::AbstractString flow::Bool end Toivo H.

  12. Variable Declarations • # With Float64 type # With unit Often natural to provide type and size information v1 = Var(T=Float64) v2 = Var(T=Volt) • Unit handling with SIUnits.jl # With array type # Parameter with unit array = Var(T=Array{Float64,1}) m = 2.5kg matrix = Var(T=Array{Float64,2}) length = 5m # With fixed array sizes scalar = Var(T=Float64, size=()) array3 = Var(T=Float64, size=(3,)) matrix3x3 = Var(T=Float64, size=(3,3)) Toivo H.

  13. Type Declarations • # Type declarations Reuse of type and size definitions • Rotation matrices Float3(; args...) = Var(T=Float64, size=(3,); args...) • Needed to handle closed kinematic loops Voltage(; args...) = Var(T=Volt; args...) # Use of type declarations v3 = Float3(start=zeros(3)) v4 = Voltage(size=(3,), start=[220.0, 220.0, 220.0]Volt) Position(; args...) = Var(T=Meter; size=(), args...) Position3(; args...) = Position(size=(3,); args...) Rotation3(; args...) = Var(T=SIPrefix; size=(3,3), property=rotationGroup3D, args...) Toivo H.

  14. • Matrix equations • DAE index reduction needed MultiBody modeling • R_Rel equation differentiated (only phi time varying) • Rotation3() implies ”special orthogonal group”, SO(3) @ model Frame begin r_0 = Position3() @ equations begin R = Rotation3() R_rel = n*n' + (eye(3) - n*n')*cos(phi) – skew(n)*sin(phi) f = Force3(flow=true) # Cut-force resolved in connector frame t = Torque3(flow=true) # Cut-torque resolved in connector frame w = der(phi) end a = der(w) @ model Revolute begin # Revolute joint (1 rotational degree-of- # relationships between quantities of frame_a and of frame_b freedom, 2 potential states, optional axis flange) frame_b.r_0 = frame_a.r_0 n = [0,0,1] # Axis of rotation resolved in frame_a frame_b.R = R_rel*frame_a.R frame_a.f + R_rel'*frame_b.f = zeros(3) frame_a = Frame() frame_a.t + R_rel'*frame_b.t = zeros(3) frame_b = Frame() # d'Alemberts principle phi = Angle(start=0) tau = -n'*frame_b.t w = AngularVelocity(start=0) tau = 0 # Not driven a = AngularAcceleration() end tau = Torque() # Driving torque in direction of axis of rotation end R_rel = Rotation3() Toivo H.

  15. Type and Size Inference - Generic switch @ model Switch begin • Avoid duplication of models with different types sw=Boolean() • Types and sizes can be inferred from the environment of a model or start values provided, u1=Variable() either initial conditions for states or approximate start values for algebraic constraints. u2=Variable() • Inputs u1 and u2 and output y can be of any type y=Variable() @ equations begin y = if sw; u1 else u2 end end end Toivo H.

  16. Discontinuities - State Events • positive() and negative() introduces crossing functions @ model IdealDiode begin @ extends OnePort() @ inherits v, i s = Float(start=0.0) @ equations begin v = if positive(s); 0 else s end i = if positive(s); s else 0 end end end Toivo H.

  17. • Clock partitioning of equations • Clock inference • Synchronous Controllers Clocked equations active at ticks @ model DiscretePIController begin @ equations begin K=1 # Gain # sensor: Ti=1E10 # Integral time ud = sample(u, Clock(dt)) dt=0.1 # sampling interval # PI controller: ref=1 # set point e = ref-ud u=Float(); ud=Float() i = previous(i, Clock(dt)) + e y=Float(); yd=Float() yd = K*(e + i/Ti) e=Float(); i=Float(start=0) # actuator: y = hold(yd) end end Toivo H.

  18. Redeclaration of submodels MotorModels = [Motor100KW, Motor200KW, Motor250KW] # array of Modia models selectedMotor = motorConfig( ) # Int • More powerful than replaceable in Modelica @ model HybridCar begin Indexing @ extends BaseHybridCar( Conditional selection motor = MotorModels[selectedMotor](), gear = if gearOption1; Gear1(i=4) else Gear2(i=5) end ) end Toivo H.

  19. Multi-mode Modeling @ model Clutch begin • Set of model equations and the DAE index is changing flange1 = Flange() when clutch is engaged or disengaged flange2 = Flange() • New symbolic transformations and just-in-time compilation is made engaged = Boolean() for each mode of the system • Final results of variables before an event is used as initial conditions @ equations begin after the event if ! engaged • Mode changes with conditional equations might introduces flange1.tau = 0 inconsistent initial conditions causing Dirac impulses to occur flange2.tau = 0 else flange1.w = flange2.w flange1.tau + flange2.tau = 0 end end end Toivo H.

Recommend


More recommend