outputSize = 5 # number of variable to store at each time step # Matrix declaration A = zeros((ndof, ndof)) x0 = [Xinit, -Xinit] sensorC = eye(ndof) Csurface = [[0, 1.0]] Brel = [[0], [2]] # Simple check if h > hControl: print "hControl must be bigger than h" exit(1) # Declaration of the Dynamical System processDS = FirstOrderLinearDS(x0, A) processDS.setComputebFunction("RelayPlugin", "computeB") # Control simulation sim = ControlZOHSimulation(t0, T, h) sim.setSaveOnlyMainSimulation(True) sim.addDynamicalSystem(processDS) # Actuator, Sensor & ControlManager sens = LinearSensor(processDS, sensorC) sim.addSensor(sens, hControl) act = LinearSMCOT2(sens) act.setCsurface(Csurface) act.setB(Brel) sim.addActuator(act, hControl) # Initialization sim.initialize()
ninter = 2 theta = 0.5 alpha = .01 N = ceil((T-t0)/h) # matrices A = zeros((2,2)) A[0, 1] = 1 x0 = array([1.,10.]) B = 500*array([[alpha,1-alpha],[-(1-alpha),alpha]]) C = eye(2) D = zeros((2,2)) # dynamical systems process = FirstOrderLinearDS(x0, A) myProcessRelation = ZhuravlevTwistingR(C,B) myNslaw = RelayNSL(2) myNslaw.display() myProcessInteraction = Interaction(ninter, myNslaw, myProcessRelation) myNSDS = NonSmoothDynamicalSystem() myNSDS.insertDynamicalSystem(process) myNSDS.link(myProcessInteraction,process) filippov = Model(t0,T) filippov.setNonSmoothDynamicalSystemPtr(myNSDS)
#theta = 0.5 theta = 1.0 alpha = .01 N = int((T - t0) / h) # matrices A = zeros((2, 2)) A[0, 1] = 1 x0 = array([1., 10.]) B = 500 * array([[alpha, 1 - alpha], [-(1 - alpha), alpha]]) C = eye(2) D = zeros((2, 2)) # dynamical systems process = FirstOrderLinearDS(x0, A) myProcessRelation = MyR.MyR(C, B) #myProcessRelation.setDPtr(D) myNslaw = RelayNSL(2) myNslaw.display() myProcessInteraction = Interaction(myNslaw, myProcessRelation) filippov = NonSmoothDynamicalSystem(t0, T) filippov.insertDynamicalSystem(process) filippov.link(myProcessInteraction, process) td = TimeDiscretisation(t0, h) s = TimeStepping(filippov, td)
from siconos.kernel import FirstOrderLinearDS, FirstOrderLinearTIR, \ RelayNSL, Interaction,\ Model, EulerMoreauOSI, TimeDiscretisation, Relay, \ TimeStepping,NonSmoothDynamicalSystem # # dynamical system # init_state = [0.0,xinit,0] A = [[0, 1.0, 0.0], [0.0, 0.0, 1.0], [0.0, -3.0, -2.0]] LSRelayOscillator=FirstOrderLinearDS(init_state, A) # # Interactions # C = [[1.0, 0.0, 0.0]] D = [[0.0 ]] B = [[0.0], [0.0], [1.0]] LTIRRelayOscillator=FirstOrderLinearTIR(C,B) LTIRRelayOscillator.setDPtr(D)
matplotlib.use('Agg') from matplotlib.pyplot import subplot, title, plot, grid, savefig from siconos.kernel import FirstOrderLinearDS, FirstOrderLinearTIR, \ ComplementarityConditionNSL, Interaction,\ Model, EulerMoreauOSI, TimeDiscretisation, LCP, \ TimeStepping # # dynamical system # init_state = [Vinit, 0] A = [[0, -1.0 / Cvalue], [1.0 / Lvalue, 0]] LSDiodeBridge = FirstOrderLinearDS(init_state, A) # # Interactions # C = [[0., 0.], [0, 0.], [-1., 0.], [1., 0.]] D = [[1. / Rvalue, 1. / Rvalue, -1., 0.], [1. / Rvalue, 1. / Rvalue, 0., -1.], [1., 0., 0., 0.], [0., 1., 0., 0.]] B = [[0., 0., -1. / Cvalue, 1. / Cvalue], [0., 0., 0., 0.]] LTIRDiodeBridge = FirstOrderLinearTIR(C, B) LTIRDiodeBridge.setDPtr(D)
matplotlib.use('Agg') from matplotlib.pyplot import subplot, title, plot, grid, savefig from siconos.kernel import FirstOrderLinearDS, FirstOrderLinearTIR, \ ComplementarityConditionNSL, Interaction,\ Model, EulerMoreauOSI, TimeDiscretisation, LCP, \ TimeStepping # # dynamical system # init_state = [Vinit, 0] A = [[0, -1.0 / Cvalue], [1.0 / Lvalue, 0]] LSCircuitRLCD = FirstOrderLinearDS(init_state, A) # # Interactions # C = [[-1., 0.]] D = [[Rvalue]] B = [[-1. / Cvalue], [0.]] LTIRCircuitRLCD = FirstOrderLinearTIR(C, B) LTIRCircuitRLCD.setDPtr(D) nslaw = ComplementarityConditionNSL(1)
from matplotlib.pyplot import subplot, title, plot, grid, savefig from siconos.kernel import FirstOrderLinearDS, FirstOrderLinearTIR, \ ComplementarityConditionNSL, Interaction,\ Model, EulerMoreauOSI, TimeDiscretisation, LCP, \ TimeStepping # # dynamical system # init_stateLS1 = [VinitLS1, 0] LS1_A = [[0, -1.0/Cvalue], [1.0/Lvalue, 0 ]] LS1DiodeBridgeCapFilter = FirstOrderLinearDS(init_stateLS1, LS1_A) init_stateLS2 = [VinitLS2] LS2_A = [[-1.0/(Rvalue*Cfilt)]] LS2DiodeBridgeCapFilter = FirstOrderLinearDS(init_stateLS2, LS2_A) # # Interactions # C = [[0., 0., 1.0], [0, 0., 0.0], [-1., 0., 1.0], [1., 0., 0.0]]
matplotlib.use('Agg') from matplotlib.pyplot import subplot, title, plot, grid, savefig from siconos.kernel import FirstOrderLinearDS, FirstOrderLinearTIR, \ RelayNSL, Interaction,\ NonSmoothDynamicalSystem, EulerMoreauOSI, TimeDiscretisation, Relay, \ TimeStepping # # dynamical system # init_state = [0.0, xinit, 0] A = [[0, 1.0, 0.0], [0.0, 0.0, 1.0], [0.0, -3.0, -2.0]] LSRelayOscillator = FirstOrderLinearDS(init_state, A) # # Interactions # C = [[1.0, 0.0, 0.0]] D = [[0.0]] B = [[0.0], [0.0], [1.0]] LTIRRelayOscillator = FirstOrderLinearTIR(C, B) LTIRRelayOscillator.setDPtr(D) nslaw = RelayNSL(1)
#theta = 0.5 theta = 1.0 alpha = .01 N = ceil((T-t0)/h) # matrices A = zeros((2,2)) A[0, 1] = 1 x0 = array([1.,10.]) B = 500*array([[alpha,1-alpha],[-(1-alpha),alpha]]) C = eye(2) D = zeros((2,2)) # dynamical systems process = FirstOrderLinearDS(x0, A) myProcessRelation = MyR.MyR(C,B) #myProcessRelation.setDPtr(D) myNslaw = RelayNSL(2) myNslaw.display() myProcessInteraction = Interaction(ninter, myNslaw, myProcessRelation) myNSDS = NonSmoothDynamicalSystem() myNSDS.insertDynamicalSystem(process) myNSDS.link(myProcessInteraction,process) filippov = Model(t0,T)
matplotlib.use('Agg') from matplotlib.pyplot import subplot, title, plot, grid, savefig from siconos.kernel import FirstOrderLinearDS, FirstOrderLinearTIR, \ ComplementarityConditionNSL, Interaction,\ NonSmoothDynamicalSystem, EulerMoreauOSI, TimeDiscretisation, LCP, \ TimeStepping # # dynamical system # init_stateLS1 = [VinitLS1, 0] LS1_A = [[0, -1.0 / Cvalue], [1.0 / Lvalue, 0]] LS1DiodeBridgeCapFilter = FirstOrderLinearDS(init_stateLS1, LS1_A) init_stateLS2 = [VinitLS2] LS2_A = [[-1.0 / (Rvalue * Cfilt)]] LS2DiodeBridgeCapFilter = FirstOrderLinearDS(init_stateLS2, LS2_A) # # Interactions # C = [[0., 0., 1.0], [0, 0., 0.0], [-1., 0., 1.0], [1., 0., 0.0]] D = [[0.0, -1.0, 0., 0.], [1.0, 0.0, 1., -1.], [0.0, -1., 0., 0.], [0., 1., 0., 0.]]
outputSize = 5 # number of variable to store at each time step # Matrix declaration A = zeros((ndof, ndof)) x0 = [Xinit, -Xinit] sensorC = eye(ndof) Csurface = [[0, 1]] Brel = [[0], [2]] #Drel = [[0, 0]] # Simple check if h > hControl: print "hControl must be bigger than h" exit(1) # Declaration of the Dynamical System processDS = FirstOrderLinearDS(x0, A) # Model process = Model(t0, T) process.nonSmoothDynamicalSystem().insertDynamicalSystem(processDS) # time discretisation processTD = TimeDiscretisation(t0, h) tSensor = TimeDiscretisation(t0, hControl) tActuator = TimeDiscretisation(t0, hControl) # Creation of the Simulation processSimulation = TimeStepping(processTD, 0) processSimulation.setName("plant simulation") # Declaration of the integrator processIntegrator = ZeroOrderHoldOSI(processDS) processSimulation.insertIntegrator(processIntegrator) # Actuator, Sensor & ControlManager control = ControlManager(process)
def test_diode_bridge(): """Build diode bridge model""" # dynamical system bridge_ds = FirstOrderLinearDS(init_state, A) # interaction diode_bridge_relation = FirstOrderLinearTIR(C, B) diode_bridge_relation.setDPtr(D) nslaw = ComplementarityConditionNSL(4) bridge_interaction = Interaction(4, nslaw, diode_bridge_relation, 1) # Model diode_bridge = Model(t0, total_time, model_title) # add the dynamical system in the non smooth dynamical system diode_bridge.nonSmoothDynamicalSystem().insertDynamicalSystem(bridge_ds) # link the interaction and the dynamical system diode_bridge.nonSmoothDynamicalSystem().link(bridge_interaction, bridge_ds) # Simulation # (1) OneStepIntegrators theta = 0.5 integrator = EulerMoreauOSI(theta) # (2) Time discretisation time_discretisation = TimeDiscretisation(t0, time_step) # (3) Non smooth problem non_smooth_problem = LCP() # (4) Simulation setup with (1) (2) (3) bridge_simulation = TimeStepping(time_discretisation, integrator, non_smooth_problem) # simulation initialization diode_bridge.setSimulation(bridge_simulation) diode_bridge.initialize() k = 0 h = bridge_simulation.timeStep() # Number of time steps N = (total_time - t0) / h # Get the values to be plotted # ->saved in a matrix dataPlot data_plot = empty([N, 8]) x = bridge_ds.x() print("Initial state : ", x) y = bridge_interaction.y(0) print("First y : ", y) lambda_ = bridge_interaction.lambda_(0) # For the initial time step: # time data_plot[k, 0] = t0 # inductor voltage data_plot[k, 1] = x[0] # inductor current data_plot[k, 2] = x[1] # diode R1 current data_plot[k, 3] = y[0] # diode R1 voltage data_plot[k, 4] = - lambda_[0] # diode F2 voltage data_plot[k, 5] = - lambda_[1] # diode F1 current data_plot[k, 6] = lambda_[2] # resistor current data_plot[k, 7] = y[0] + lambda_[2] k += 1 while k < N: bridge_simulation.computeOneStep() #non_smooth_problem.display() data_plot[k, 0] = bridge_simulation.nextTime() # inductor voltage data_plot[k, 1] = x[0] # inductor current data_plot[k, 2] = x[1] # diode R1 current data_plot[k, 3] = y[0] # diode R1 voltage data_plot[k, 4] = - lambda_[0] # diode F2 voltage data_plot[k, 5] = - lambda_[1] # diode F1 current data_plot[k, 6] = lambda_[2] # resistor current data_plot[k, 7] = y[0] + lambda_[2] k += 1 bridge_simulation.nextStep() # # comparison with the reference file # ref = getMatrix(SimpleMatrix(os.path.join(working_dir, "data/diode_bridge.ref"))) assert norm(data_plot - ref) < 1e-12 return ref, data_plot
def test_diode_bridge(): """Build diode bridge model""" # dynamical system bridge_ds = FirstOrderLinearDS(init_state, A) # interaction diode_bridge_relation = FirstOrderLinearTIR(C, B) diode_bridge_relation.setDPtr(D) nslaw = ComplementarityConditionNSL(4) bridge_interaction = Interaction(4, nslaw, diode_bridge_relation, 1) # Model diode_bridge = Model(t0, total_time, model_title) # add the dynamical system in the non smooth dynamical system diode_bridge.nonSmoothDynamicalSystem().insertDynamicalSystem(bridge_ds) # link the interaction and the dynamical system diode_bridge.nonSmoothDynamicalSystem().link(bridge_interaction, bridge_ds) # Simulation # (1) OneStepIntegrators theta = 0.5 integrator = EulerMoreauOSI(theta) integrator.insertDynamicalSystem(bridge_ds) # (2) Time discretisation time_discretisation = TimeDiscretisation(t0, time_step) # (3) Non smooth problem non_smooth_problem = LCP() # (4) Simulation setup with (1) (2) (3) bridge_simulation = TimeStepping(time_discretisation, integrator, non_smooth_problem) # simulation initialization diode_bridge.initialize(bridge_simulation) k = 0 h = bridge_simulation.timeStep() # Number of time steps N = (total_time - t0) / h # Get the values to be plotted # ->saved in a matrix dataPlot data_plot = empty([N, 8]) x = bridge_ds.x() print("Initial state : ", x) y = bridge_interaction.y(0) print("First y : ", y) lambda_ = bridge_interaction.lambda_(0) # For the initial time step: # time data_plot[k, 0] = t0 # inductor voltage data_plot[k, 1] = x[0] # inductor current data_plot[k, 2] = x[1] # diode R1 current data_plot[k, 3] = y[0] # diode R1 voltage data_plot[k, 4] = -lambda_[0] # diode F2 voltage data_plot[k, 5] = -lambda_[1] # diode F1 current data_plot[k, 6] = lambda_[2] # resistor current data_plot[k, 7] = y[0] + lambda_[2] k += 1 while k < N: bridge_simulation.computeOneStep() #non_smooth_problem.display() data_plot[k, 0] = bridge_simulation.nextTime() # inductor voltage data_plot[k, 1] = x[0] # inductor current data_plot[k, 2] = x[1] # diode R1 current data_plot[k, 3] = y[0] # diode R1 voltage data_plot[k, 4] = -lambda_[0] # diode F2 voltage data_plot[k, 5] = -lambda_[1] # diode F1 current data_plot[k, 6] = lambda_[2] # resistor current data_plot[k, 7] = y[0] + lambda_[2] k += 1 bridge_simulation.nextStep() # # comparison with the reference file # ref = getMatrix( SimpleMatrix(os.path.join(working_dir, "data/diode_bridge.ref"))) assert norm(data_plot - ref) < 1e-12 return ref, data_plot
N = 2*ceil((T-t0)/h) # number of time steps outputSize = 5 # number of variable to store at each time step # Matrix declaration A = zeros((ndof, ndof)) x0 = [Xinit, -Xinit] sensorC = eye(ndof) Csurface = [[0, 1.0]] # Simple check if h > hControl: print "hControl must be bigger than h" exit(1) # Declaration of the Dynamical System processDS = FirstOrderLinearDS(x0, A) processDS.setComputebFunction("RelayPlugin", "computeB") # Model process = Model(t0, T) process.nonSmoothDynamicalSystem().insertDynamicalSystem(processDS) # time discretisation processTD = TimeDiscretisation(t0, h) tSensor = TimeDiscretisation(t0, hControl) tActuator = TimeDiscretisation(t0, hControl) # Creation of the Simulation processSimulation = TimeStepping(processTD, 0) processSimulation.setName("plant simulation") # Declaration of the integrator processIntegrator = ZeroOrderHoldOSI(processDS) processSimulation.insertIntegrator(processIntegrator) # Actuator, Sensor & ControlManager
A = zeros((2, 2)) x0 = array([Vinit, -Vinit]) B = 2.0 * eye(2) C = eye(2) D = zeros((2, 2)) # Compilation of the C plugin with siconos import os print('Compilation of the C plugin with siconos') from subprocess import call call(['siconos', '--noexec', '.'], stdout=open(os.devnull, 'wb')) # dynamical systems process = FirstOrderLinearDS(x0, A) process.setComputebFunction('plugins', 'computeB') myNslaw = RelayNSL(2) myProcessRelation = FirstOrderLinearR(C, B) myProcessRelation.setComputeEFunction('plugins', 'computeE') #myProcessRelation.setDPtr(D) myProcessInteraction = Interaction(myNslaw, myProcessRelation) simplerelay = NonSmoothDynamicalSystem(t0, T) simplerelay.insertDynamicalSystem(process) simplerelay.link(myProcessInteraction, process) #myProcessRelation.computeJachx(0, x0, x0 , x0, C) td = TimeDiscretisation(t0, h)
outputSize = 5 # number of variable to store at each time step # Matrix declaration A = zeros((ndof, ndof)) x0 = [Xinit, -Xinit] sensorC = eye(ndof) Csurface = [[0, 1]] Brel = [[0], [2]] #Drel = [[0, 0]] # Simple check if h > hControl: print("hControl must be bigger than h") exit(1) # Declaration of the Dynamical System processDS = FirstOrderLinearDS(x0, A) processDS.setComputebFunction("RelayPlugin", "computeB") # Control simulation sim = ControlZOHSimulation(t0, T, h) sim.setSaveOnlyMainSimulation(True) sim.addDynamicalSystem(processDS) # Actuator, Sensor & ControlManager sens = LinearSensor(processDS, sensorC) sim.addSensor(sens, hControl) act = LinearSMC(sens) act.setCsurface(Csurface) act.setB(Brel) sim.addActuator(act, hControl) # Initialization
from matplotlib.pyplot import subplot, title, plot, grid, savefig from siconos.kernel import FirstOrderLinearDS, FirstOrderLinearTIR, \ ComplementarityConditionNSL, Interaction,\ Model, EulerMoreauOSI, TimeDiscretisation, LCP, \ TimeStepping # # dynamical system # init_state = [Vinit, 0] A = [[0, -1.0/Cvalue], [1.0/Lvalue, 0 ]] LSCircuitRLCD = FirstOrderLinearDS(init_state, A) # # Interactions # C = [[-1., 0.]] D = [[Rvalue]] B = [[ -1./Cvalue], [0.]] LTIRCircuitRLCD = FirstOrderLinearTIR(C, B) LTIRCircuitRLCD.setDPtr(D) nslaw = ComplementarityConditionNSL(1)
outputSize = 5 # number of variable to store at each time step # Matrix declaration A = zeros((ndof, ndof)) x0 = [Xinit, -Xinit] sensorC = eye(ndof) Csurface = [[0, 1.0]] Brel = [[0], [2]] # Simple check if h > hControl: print("hControl must be bigger than h") exit(1) # Declaration of the Dynamical System processDS = FirstOrderLinearDS(x0, A) # Control Simulation sim = ControlZOHSimulation(t0, T, h) sim.setSaveOnlyMainSimulation(True) sim.addDynamicalSystem(processDS) # Actuator, Sensor & ControlManager sens = LinearSensor(processDS, sensorC) sim.addSensor(sens, hControl) act = ExplicitLinearSMC(sens) act.setCsurface(Csurface) act.setB(Brel) sim.addActuator(act, hControl) # Initialization sim.initialize()
from matplotlib.pyplot import subplot, title, plot, grid, savefig from siconos.kernel import FirstOrderLinearDS, FirstOrderLinearTIR, \ ComplementarityConditionNSL, Interaction,\ Model, EulerMoreauOSI, TimeDiscretisation, LCP, \ TimeStepping # # dynamical system # init_state = [Vinit, 0] A = [[0, -1.0/Cvalue], [1.0/Lvalue, 0 ]] LSDiodeBridge = FirstOrderLinearDS(init_state, A) # # Interactions # C = [[0., 0.], [0, 0.], [-1., 0.], [1., 0.]] D = [[1./Rvalue, 1./Rvalue, -1., 0.], [1./Rvalue, 1./Rvalue, 0., -1.], [1., 0., 0., 0.], [0., 1., 0., 0.]]
ninter = 2 theta = 0.5 alpha = .01 N = int((T - t0) / h) # matrices A = zeros((2, 2)) A[0, 1] = 1 x0 = array([1., 10.]) B = 500 * array([[alpha, 1 - alpha], [-(1 - alpha), alpha]]) C = eye(2) D = zeros((2, 2)) # dynamical systems process = FirstOrderLinearDS(x0, A) myProcessRelation = ZhuravlevTwistingR(C, B) myNslaw = RelayNSL(2) myNslaw.display() myProcessInteraction = Interaction(myNslaw, myProcessRelation) filippov = NonSmoothDynamicalSystem(t0, T) filippov.insertDynamicalSystem(process) filippov.link(myProcessInteraction, process) td = TimeDiscretisation(t0, h) s = TimeStepping(filippov, td) myIntegrator = EulerMoreauOSI(theta)
def test_diodebridge1(): from siconos.kernel import FirstOrderLinearDS, FirstOrderLinearTIR, \ ComplementarityConditionNSL, Interaction,\ Model, EulerMoreauOSI, TimeDiscretisation, LCP, \ TimeStepping from numpy import empty from siconos.kernel import SimpleMatrix, getMatrix from numpy.linalg import norm t0 = 0.0 T = 5.0e-3 # Total simulation time h_step = 1.0e-6 # Time step Lvalue = 1e-2 # inductance Cvalue = 1e-6 # capacitance Rvalue = 1e3 # resistance Vinit = 10.0 # initial voltage Modeltitle = "DiodeBridge" # # dynamical system # init_state = [Vinit, 0] A = [[0, -1.0/Cvalue], [1.0/Lvalue, 0 ]] LSDiodeBridge=FirstOrderLinearDS(init_state, A) # # Interactions # C = [[0., 0.], [0, 0.], [-1., 0.], [1., 0.]] D = [[1./Rvalue, 1./Rvalue, -1., 0.], [1./Rvalue, 1./Rvalue, 0., -1.], [1., 0., 0., 0.], [0., 1., 0., 0.]] B = [[0., 0., -1./Cvalue, 1./Cvalue], [0., 0., 0., 0. ]] LTIRDiodeBridge=FirstOrderLinearTIR(C, B) LTIRDiodeBridge.setDPtr(D) LTIRDiodeBridge.display() nslaw=ComplementarityConditionNSL(4) InterDiodeBridge=Interaction(4, nslaw, LTIRDiodeBridge, 1) # # Model # DiodeBridge=Model(t0, T, Modeltitle) # add the dynamical system in the non smooth dynamical system DiodeBridge.nonSmoothDynamicalSystem().insertDynamicalSystem(LSDiodeBridge) # link the interaction and the dynamical system DiodeBridge.nonSmoothDynamicalSystem().link(InterDiodeBridge, LSDiodeBridge) # # Simulation # # (1) OneStepIntegrators theta = 0.5 aOSI = EulerMoreauOSI(LSDiodeBridge, theta) # (2) Time discretisation aTiDisc = TimeDiscretisation(t0, h_step) # (3) Non smooth problem aLCP = LCP() # (4) Simulation setup with (1) (2) (3) aTS = TimeStepping(aTiDisc, aOSI, aLCP) # end of model definition # # computation # # simulation initialization DiodeBridge.initialize(aTS) k = 0 h = aTS.timeStep() print("Timestep : ", h) # Number of time steps N = (T-t0)/h print("Number of steps : ", N) # Get the values to be plotted # ->saved in a matrix dataPlot dataPlot = empty([N, 8]) x = LSDiodeBridge.x() print("Initial state : ", x) y = InterDiodeBridge.y(0) print("First y : ", y) lambda_ = InterDiodeBridge.lambda_(0) # For the initial time step: # time dataPlot[k, 0] = t0 # inductor voltage dataPlot[k, 1] = x[0] # inductor current dataPlot[k, 2] = x[1] # diode R1 current dataPlot[k, 3] = y[0] # diode R1 voltage dataPlot[k, 4] = - lambda_[0] # diode F2 voltage dataPlot[k, 5] = - lambda_[1] # diode F1 current dataPlot[k, 6] = lambda_[2] # resistor current dataPlot[k, 7] = y[0] + lambda_[2] k += 1 while (k < N): aTS.computeOneStep() #aLCP.display() dataPlot[k, 0] = aTS.nextTime() # inductor voltage dataPlot[k, 1] = x[0] # inductor current dataPlot[k, 2] = x[1] # diode R1 current dataPlot[k, 3] = y[0] # diode R1 voltage dataPlot[k, 4] = - lambda_[0] # diode F2 voltage dataPlot[k, 5] = - lambda_[1] # diode F1 current dataPlot[k, 6] = lambda_[2] # resistor current dataPlot[k, 7] = y[0] + lambda_[2] k += 1 aTS.nextStep() # # comparison with the reference file # ref = getMatrix(SimpleMatrix(os.path.join(working_dir,"data/diode_bridge.ref"))) print(norm(dataPlot - ref)) assert (norm(dataPlot - ref) < 1e-12) return ref, dataPlot