diff --git a/notebooks/alt/Octsim/@CurrentSensor/CurrentSensor.m b/notebooks/alt/Octsim/@CurrentSensor/CurrentSensor.m new file mode 100644 index 0000000000000000000000000000000000000000..1079385df07022974d5e8aa5275d0081fd8157a4 --- /dev/null +++ b/notebooks/alt/Octsim/@CurrentSensor/CurrentSensor.m @@ -0,0 +1,53 @@ +classdef CurrentSensor < RCComponent + properties + Vs + possource + curval + flout + end + methods + function b = CurrentSensor(p,n,flout) + b = b@RCComponent(p,n); + b.Vs = 0; + b.flout = flout; + b.hyout = 1; + b.curval = 0; + end + + function [G,Bout] = ApplyMatrixStamp(b,P,dt) + ntot = P.GetSize(); + b.possource = ntot+1; + P.G = [P.G,zeros(ntot,1)]; + P.G = [P.G; zeros(1,ntot+1)]; + P.b = [P.b; 0]; + if (b.Pos > 0) + P.G(b.possource,b.Pos) = 1; + P.G(b.Pos, b.possource) = 1; + end + if (b.Neg > 0) + P.G(b.possource,b.Neg) = -1; + P.G(b.Neg,b.possource) = -1; + end + end + + function Init(b,P,dt) + b.ApplyMatrixStamp(P,dt); + end + + function Step(b,P,dt,t) + P.b(b.possource) = b.Vs; + end + + function PostStep(b,vsol,dt) + b.curval = vsol(b.possource); + end + + function flow = WriteFlowOut(b,flow) + flow(b.flout) = b.curval; + end + end +end + + + + diff --git a/notebooks/alt/Octsim/@Diode/Diode.m b/notebooks/alt/Octsim/@Diode/Diode.m index 02e19a29e29d881a05db3dd74e519336f05f2bc6..d0ab3974fb8493dda63b07a7666e7db677537bd3 100644 --- a/notebooks/alt/Octsim/@Diode/Diode.m +++ b/notebooks/alt/Octsim/@Diode/Diode.m @@ -15,17 +15,6 @@ classdef Diode < RCComponent r.Vnew = 1; end - function r = Diode(p,n) - r = r@RCComponent(p,n); - r.Ron = 1e-4; - r.Roff = 1e4; - r.linear = 0; - r.Gr = 1/r.Ron; - r.Vnew = 1; - end - - - function [Gout,Bout] = ApplyMatrixStamp(r,P,dt) end diff --git a/notebooks/alt/Octsim/@Division/Division.m b/notebooks/alt/Octsim/@Division/Division.m index bd2a5be34553312bba980a944f1e722891afb2fb..bde5fd36925b7da37154dab5cf033a019bd626f5 100644 --- a/notebooks/alt/Octsim/@Division/Division.m +++ b/notebooks/alt/Octsim/@Division/Division.m @@ -4,7 +4,7 @@ classdef Division < Block methods function c = Division(in1,in2,out) c = c@Block(); - c.ninput = 2 + c.ninput = 2; c.noutput = 1; c.inpos(1) = in1; c.inpos(2) = in2; diff --git a/notebooks/alt/Octsim/@GreaterThan/GreaterThan.m b/notebooks/alt/Octsim/@GreaterThan/GreaterThan.m new file mode 100644 index 0000000000000000000000000000000000000000..f6a5dfc6c9c06dd1bcb7fc752edaf0a2684f1a6a --- /dev/null +++ b/notebooks/alt/Octsim/@GreaterThan/GreaterThan.m @@ -0,0 +1,32 @@ +classdef GreaterThan < Block + properties + tr + fa + end + methods + function c = GreaterThan(in1,in2,out,tr,fa) + c = c@Block(); + c.ninput = 2; + c.inpos(1) = in1; + c.inpos(2) = in2; + c.noutput = 1; + c.outpos(1) = out; + c.tr = tr; + c.fa = fa; + end + + function flag = Step(c,t,dt) + if c.u(1) > c.u(2) + c.y = c.tr; + else + c.y = c.fa; + end + flag = 1; + end + + end +end + + + + diff --git a/notebooks/alt/Octsim/@HybridSystem/HybridSystem.m b/notebooks/alt/Octsim/@HybridSystem/HybridSystem.m index a89f5dd9ec442b27343f8a41528b3f265e40492d..672c360efed343628244a097c0e27bcb723840d1 100644 --- a/notebooks/alt/Octsim/@HybridSystem/HybridSystem.m +++ b/notebooks/alt/Octsim/@HybridSystem/HybridSystem.m @@ -32,11 +32,29 @@ classdef HybridSystem < handle hy.sc.AddComponent(h); end + function AddListComponents2Schema(hy,l) + p = size(l,2); + hy.sc.nmodels = size(hy.sc.ModelList,2); + for i=1:p + hy.sc.AddComponent(l{i}); + end + end + + function AddListComponents2Network(hy,l) + p = size(l,2); + hy.nw.nelements = size(hy.nw.NetList,2); + for i=1:p + hy.nw.AddComponent(l{i}); + end + end + + function Init(hy) hy.nw.Initnl(hy.dt); hy.sc.Init(); - hy.vk = zeros(hy.nw.n,1); + totn = hy.nw.Plin.GetSize(); + hy.vk = zeros(totn,1); hy.t = hy.ti; end @@ -46,7 +64,6 @@ classdef HybridSystem < handle function flagend = Step(hy) t = hy.t; k=1; - vkold = hy.vk; hy.nw.Plin.Resetb(); flagnl = 0; for i=1:hy.nw.nelements @@ -61,6 +78,7 @@ classdef HybridSystem < handle end iter =1; err = 1e5; + vkold = hy.vk; if flagnl == 1 while iter<=hy.maxn && (err>=hy.toll) hy.nw.Pnl = LinProb(hy.nw.Plin.GetSize()); @@ -88,7 +106,7 @@ classdef HybridSystem < handle for i=1:hy.nw.nelements hy.nw.NetList{i}.PostStep(hy.vk,hy.dt); if (hy.nw.NetList{i}.hyout > 0) - hy.nw.NetList{i}.WriteFlowOut(hy.sc.flows); + hy.sc.flows = hy.nw.NetList{i}.WriteFlowOut(hy.sc.flows); end end diff --git a/notebooks/alt/Octsim/@Hysterisis/Hysterisis.m b/notebooks/alt/Octsim/@Hysterisis/Hysterisis.m new file mode 100644 index 0000000000000000000000000000000000000000..7a66b1ea47d13b034c61cdfbff51a94108cf4def --- /dev/null +++ b/notebooks/alt/Octsim/@Hysterisis/Hysterisis.m @@ -0,0 +1,36 @@ +classdef Hysterisis < Block + properties + th + hi + lo + status + end + methods + function c = Hysterisis(in,out,th,hi,lo) + c = c@Block(); + c.ninput = 1; + c.inpos(1) = in; + c.noutput = 1; + c.outpos(1) = out; + c.th = th; + c.hi = hi; + c.lo = lo; + c.status = c.hi; + end + + function flag = Step(c,t,dt) + if c.u > c.th + c.status = c.hi; + elseif c.u < -c.th + c.status = c.lo; + end + c.y = c.status; + flag = 1; + end + + end +end + + + + diff --git a/notebooks/alt/Octsim/@Integrator/Integrator.m b/notebooks/alt/Octsim/@Integrator/Integrator.m index d3cc5c8a79e648eaacbf7725a15ee537b47c7501..1c4f84c24a4376af65f3268d450e41b46fa01100 100644 --- a/notebooks/alt/Octsim/@Integrator/Integrator.m +++ b/notebooks/alt/Octsim/@Integrator/Integrator.m @@ -12,7 +12,7 @@ classdef Integrator < Block c.B = 1; c.C = 1; c.D = 0; - c.ninput = 1 + c.ninput = 1; c.noutput = 1; c.inpos(1) = in; c.outpos(1) = out; diff --git a/notebooks/alt/Octsim/@PID/untitled.dio b/notebooks/alt/Octsim/@PID/untitled.dio new file mode 100644 index 0000000000000000000000000000000000000000..97285c0111a0df50e2b493e3bba9225593644a2d --- /dev/null +++ b/notebooks/alt/Octsim/@PID/untitled.dio @@ -0,0 +1 @@ +<mxGraphModel dx="747" dy="724" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" background="#ffffff"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1"><mxGeometry x="160" y="190" width="30" height="30" as="geometry"/></mxCell><mxCell id="4" value="Controller" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"><mxGeometry x="250" y="175" width="120" height="60" as="geometry"/></mxCell><mxCell id="5" value="Gc(s)" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"><mxGeometry x="430" y="175" width="120" height="60" as="geometry"/></mxCell><mxCell id="6" value="Gp(s)" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"><mxGeometry x="620" y="175" width="120" height="60" as="geometry"/></mxCell><mxCell id="7" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" parent="1" source="2" target="4" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="160" y="310" as="sourcePoint"/><mxPoint x="210" y="260" as="targetPoint"/></mxGeometry></mxCell><mxCell id="8" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" parent="1" source="4" target="5" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="200" y="215" as="sourcePoint"/><mxPoint x="260" y="215" as="targetPoint"/></mxGeometry></mxCell><mxCell id="9" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" parent="1" source="5" target="6" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="210" y="225" as="sourcePoint"/><mxPoint x="270" y="225" as="targetPoint"/></mxGeometry></mxCell><mxCell id="10" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" parent="1" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="740" y="204" as="sourcePoint"/><mxPoint x="800" y="204" as="targetPoint"/><Array as="points"><mxPoint x="790" y="204"/></Array></mxGeometry></mxCell><mxCell id="11" value="Gd(s)" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"><mxGeometry x="430" y="290" width="120" height="60" as="geometry"/></mxCell><mxCell id="12" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="100" y="204" as="sourcePoint"/><mxPoint x="160" y="204" as="targetPoint"/></mxGeometry></mxCell><mxCell id="13" value="" style="endArrow=classic;html=1;entryX=0.5;entryY=1;" edge="1" parent="1" target="2"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="175" y="320" as="sourcePoint"/><mxPoint x="270" y="225" as="targetPoint"/></mxGeometry></mxCell><mxCell id="14" value="" style="endArrow=none;html=1;entryX=0;entryY=0.5;" edge="1" parent="1" target="11"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="180" y="320" as="sourcePoint"/><mxPoint x="140" y="370" as="targetPoint"/></mxGeometry></mxCell><mxCell id="15" value="" style="endArrow=classic;html=1;entryX=1;entryY=0.5;" edge="1" parent="1" target="11"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="760" y="320" as="sourcePoint"/><mxPoint x="185" y="230" as="targetPoint"/></mxGeometry></mxCell><mxCell id="16" value="" style="endArrow=none;html=1;" edge="1" parent="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="760" y="210" as="sourcePoint"/><mxPoint x="760" y="320" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel> \ No newline at end of file diff --git a/notebooks/alt/Octsim/@Saturation/Saturation.m b/notebooks/alt/Octsim/@Saturation/Saturation.m index 0c15d4971a385067520ac3d9ed70697df25f3331..5839f459b548bbad01208ffe80892b9a5575fd3a 100644 --- a/notebooks/alt/Octsim/@Saturation/Saturation.m +++ b/notebooks/alt/Octsim/@Saturation/Saturation.m @@ -6,7 +6,7 @@ classdef Saturation < Block methods function c = Saturation(in,out,min,max) c = c@Block(); - c.ninput = 1 + c.ninput = 1; c.noutput = 1; c.inpos(1) = in; c.outpos(1) = out; @@ -25,7 +25,7 @@ classdef Saturation < Block flag = 1; end - flag = ChangeParameters(c,value) + function flag = ChangeParameters(c,value) c.min = value(1); c.max = value(2); flag = 1; diff --git a/notebooks/alt/Octsim/@SawTooth/SawTooth.m b/notebooks/alt/Octsim/@SawTooth/SawTooth.m new file mode 100644 index 0000000000000000000000000000000000000000..5e0448b1760d4c439921c8a8df18f1fe28a9a92a --- /dev/null +++ b/notebooks/alt/Octsim/@SawTooth/SawTooth.m @@ -0,0 +1,30 @@ +classdef SawTooth < Block + properties + hi + lo + f + Ts + end + methods + function c = SawTooth(out,hi,lo,f) + c = c@Block(); + c.hi = hi; + c.lo = lo; + c.f = f; + c.Ts = 1/f; + c.noutput = 1; + c.outpos(1) = out; + end + + function flag = Step(c,t,dt) + d = t/c.Ts-floor(t/c.Ts); + c.y = c.lo + d*(c.hi-c.lo); + flag = 1; + end + + end +end + + + + diff --git a/notebooks/alt/Octsim/@Signal2Source/Signal2Source.m b/notebooks/alt/Octsim/@Signal2Source/Signal2Source.m new file mode 100644 index 0000000000000000000000000000000000000000..2282bc6397b1b05ff5f7c3655e4746e4da66ec40 --- /dev/null +++ b/notebooks/alt/Octsim/@Signal2Source/Signal2Source.m @@ -0,0 +1,50 @@ +classdef Signal2Source < RCComponent + properties + Vs + possource + flin + end + methods + function b = Signal2Source(p,n,flin) + b = b@RCComponent(p,n); + b.Vs = 0; + b.flin = flin; + b.hyin = 1; + end + + function [G,Bout] = ApplyMatrixStamp(b,P,dt) + ntot = P.GetSize(); + b.possource = ntot+1; + P.G = [P.G,zeros(ntot,1)]; + P.G = [P.G; zeros(1,ntot+1)]; + P.b = [P.b; 0]; + if (b.Pos > 0) + P.G(b.possource,b.Pos) = 1; + P.G(b.Pos, b.possource) = 1; + end + if (b.Neg > 0) + P.G(b.possource,b.Neg) = -1; + P.G(b.Neg,b.possource) = -1; + end + end + + function Init(b,P,dt) + b.ApplyMatrixStamp(P,dt); + end + + function Step(b,P,dt,t) + P.b(b.possource) = b.Vs; + end + + function PostStep(b,vsol,dt) + end + + function ReadFlowIn(r,flow) + r.Vs = flow(r.flin); + end + end +end + + + + diff --git a/notebooks/alt/Octsim/@SmallerThan/SmallerThan.m b/notebooks/alt/Octsim/@SmallerThan/SmallerThan.m new file mode 100644 index 0000000000000000000000000000000000000000..5770b59eb36134b7b34c7fa7d92432311a221e98 --- /dev/null +++ b/notebooks/alt/Octsim/@SmallerThan/SmallerThan.m @@ -0,0 +1,32 @@ +classdef SmallerThan < Block + properties + tr + fa + end + methods + function c = SmallerThan(in1,in2,out,tr,fa) + c = c@Block(); + c.ninput = 2; + c.inpos(1) = in1; + c.inpos(2) = in2; + c.noutput = 1; + c.outpos(1) = out; + c.tr = tr; + c.fa = fa; + end + + function flag = Step(c,t,dt) + if c.u(1) < c.u(2) + c.y = c.tr; + else + c.y = c.fa; + end + flag = 1; + end + + end +end + + + + diff --git a/notebooks/alt/Octsim/@VoltageSensor/VoltageSensor.m b/notebooks/alt/Octsim/@VoltageSensor/VoltageSensor.m new file mode 100644 index 0000000000000000000000000000000000000000..51761f7b4aaad0dc20c39ddb3f8dec3411a51aba --- /dev/null +++ b/notebooks/alt/Octsim/@VoltageSensor/VoltageSensor.m @@ -0,0 +1,37 @@ +classdef VoltageSensor < RCComponent + properties + volval + flout + end + methods + function b = VoltageSensor(p,n,flout) + b = b@RCComponent(p,n); + b.flout = flout; + b.hyout = 1; + b.volval = 0; + end + + function PostStep(b,vsol,dt) + if b.Pos > 0 + pos = vsol(b.Pos); + else + pos = 0; + end + if b.Neg > 0 + neg = vsol(b.Neg); + else + neg = 0; + end + + b.volval = pos-neg; + end + + function flow = WriteFlowOut(b,flow) + flow(b.flout) = b.volval; + end + end +end + + + + diff --git a/notebooks/alt/Octsim/Untitled.ipynb b/notebooks/alt/Octsim/Untitled.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..7fec51502cbc3200b3d0ffc6bbba1fe85e197f3d --- /dev/null +++ b/notebooks/alt/Octsim/Untitled.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/notebooks/alt/Octsim/closed.svg b/notebooks/alt/Octsim/closed.svg new file mode 100644 index 0000000000000000000000000000000000000000..c335c4858a8584c801c811709738216e9cda3274 --- /dev/null +++ b/notebooks/alt/Octsim/closed.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="716px" height="176px" version="1.1"><defs/><g transform="translate(0.5,0.5)"><ellipse cx="82" cy="30" rx="15" ry="15" fill="#ffffff" stroke="#000000" pointer-events="none"/><rect x="157" y="0" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(190.5,23.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="52" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 53px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Controller</div></div></foreignObject><text x="26" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Controller</text></switch></g><rect x="337" y="0" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(382.5,23.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="29" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 30px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Gc(s)</div></div></foreignObject><text x="15" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Gc(s)</text></switch></g><rect x="527" y="0" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(571.5,23.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="30" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 31px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Gp(s)</div></div></foreignObject><text x="15" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Gp(s)</text></switch></g><path d="M 97 30 L 150.63 30" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 155.88 30 L 148.88 33.5 L 150.63 30 L 148.88 26.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 277 30 L 330.63 30" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 335.88 30 L 328.88 33.5 L 330.63 30 L 328.88 26.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 457 30 L 520.63 30" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 525.88 30 L 518.88 33.5 L 520.63 30 L 518.88 26.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 647 29 L 687 29 Q 697 29 698.82 29 L 700.63 29" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 705.88 29 L 698.88 32.5 L 700.63 29 L 698.88 25.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="337" y="115" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(381.5,138.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="30" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 31px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Gd(s)</div></div></foreignObject><text x="15" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Gd(s)</text></switch></g><path d="M 7 29 L 60.63 29" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 65.88 29 L 58.88 32.5 L 60.63 29 L 58.88 25.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 82 145 L 82 51.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 82 46.12 L 85.5 53.12 L 82 51.37 L 78.5 53.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 87 145 L 337 145" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 667 145 L 463.37 145" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 458.12 145 L 465.12 141.5 L 463.37 145 L 465.12 148.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 667 35 L 667 145" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/></g></svg> \ No newline at end of file