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) 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)
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) InterRelayOscillator = Interaction(nslaw, LTIRRelayOscillator) # # Model # relayOscillator = NonSmoothDynamicalSystem(t0, T) relayOscillator.setTitle(Modeltitle) # add the dynamical system in the non smooth dynamical system relayOscillator.insertDynamicalSystem(LSRelayOscillator) # link the interaction and the dynamical system relayOscillator.link(InterRelayOscillator, LSRelayOscillator)
C = eye(2) #C = 1 D = zeros((2, 2)) #D = 0 # dynamical systems process = FirstOrderNonLinearDS(x0) process.setComputeFFunction('PluginF', 'computef1') process.setComputeJacobianfxFunction('PluginF', 'computeJacf1') #process = FirstOrderNonLinearDS(x0,'PluginF:computef1','PluginF:computeJacf1' ) process.display() myProcessRelation = FirstOrderLinearTIR(C, B) myProcessRelation.setDPtr = D myNslaw = RelayNSL(2) myNslaw.display() nameInter = 'processInteraction' myProcessInteraction = Interaction(myNslaw, myProcessRelation) myNSDS = NonSmoothDynamicalSystem() myNSDS.insertDynamicalSystem(process) myNSDS.link(myProcessInteraction, process) filippov = Model(t0, T) filippov.setNonSmoothDynamicalSystemPtr(myNSDS) td = TimeDiscretisation(t0, h)
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.]] B = [[0., 0., -1. / Cvalue, 1. / Cvalue], [0., 0., 0., 0.], [1.0 / Cfilt, 0., 1.0 / Cfilt, 0.]] LTIRDiodeBridgeCapFilter = FirstOrderLinearTIR(C, B) LTIRDiodeBridgeCapFilter.setDPtr(D) nslaw = ComplementarityConditionNSL(4) InterDiodeBridgeCapFilter = Interaction(nslaw, LTIRDiodeBridgeCapFilter) # # Model # DiodeBridgeCapFilter = NonSmoothDynamicalSystem(t0, T) DiodeBridgeCapFilter.setTitle(Modeltitle) # add the dynamical system in the non smooth dynamical system DiodeBridgeCapFilter.insertDynamicalSystem(LS1DiodeBridgeCapFilter) DiodeBridgeCapFilter.insertDynamicalSystem(LS2DiodeBridgeCapFilter) # link the interaction and the dynamical system
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
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) InterCircuitRLCD = Interaction(1, nslaw, LTIRCircuitRLCD, 1) # # Model # CircuitRLCD = Model(t0, T, Modeltitle) # add the dynamical system in the non smooth dynamical system CircuitRLCD.nonSmoothDynamicalSystem().insertDynamicalSystem(LSCircuitRLCD) # link the interaction and the dynamical system CircuitRLCD.nonSmoothDynamicalSystem().link(InterCircuitRLCD, LSCircuitRLCD)