Reference

Core

Core of BMS. All content of this file is imported by bms, and is therefore in bms

This file defines the base of BMS.

class bms.core.Block(inputs, outputs, max_input_order, max_output_order)[source]

Bases: object

Abstract class of block: this class should not be instanciate directly

InputValues(it, nsteps=None)[source]

Returns the input values at a given iteration for solving the block outputs

OutputValues(it, nsteps=None)[source]
Solve(it, ts)[source]
class bms.core.DynamicSystem(te, ns, blocks=[])[source]

Bases: object

Defines a dynamic system that can simulate itself

Parameters:
  • te – time of simulation’s end
  • ns – number of steps
  • blocks – (optional) list of blocks defining the model
AddBlock(block)[source]

Add the given block to the model and also its input/output variables

DrawModel()[source]
PlotVariables(subplots_variables=None)[source]
Save(name_file)[source]

name_file: name of the file without extension. The extension .bms is added by function

Simulate(variables_to_solve=None)[source]
VariablesValues(variables, t)[source]

Returns the value of given variables at time t. Linear interpolation is performed between two time steps.

Parameters:
  • variables – one variable or a list of variables
  • t – time of evaluation
graph
bms.core.Load(file)[source]

Loads a model from specified file

exception bms.core.ModelError(message)[source]

Bases: Exception

args
with_traceback()

Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.

class bms.core.PhysicalBlock(physical_nodes, nodes_with_fluxes, occurence_matrix, commands, name)[source]

Bases: object

Abstract class to inherit when coding a physical block

class bms.core.PhysicalNode(cl_solves_potential, cl_solves_fluxes, node_name, potential_variable_name, flux_variable_name)[source]

Bases: object

Abstract class

class bms.core.PhysicalSystem(te, ns, physical_blocks, command_blocks)[source]

Bases: object

Defines a physical system

AddCommandBlock(block)[source]
AddPhysicalBlock(block)[source]
GenerateDynamicSystem()[source]
Simulate()[source]
dynamic_system
class bms.core.Signal(names)[source]

Bases: bms.core.Variable

Abstract class of signal

values
class bms.core.Variable(names='variable', initial_values=[0], hidden=False)[source]

Bases: object

Defines a variable

Parameters:names – Defines full name and short name.

If names is a string the two names will be identical otherwise names should be a tuple of strings (full_name,short_name) :param hidden: inner variable to hide in plots if true

values

Signals

Functions

Collection of mathematical function signals

class bms.signals.functions.Ramp(name='Ramp', amplitude=1, delay=0, offset=0)[source]

Bases: bms.core.Signal

Create a ramp such as : f(t)=(t-delay)*amplitude+initial_value

values
class bms.signals.functions.SignalFunction(name, function)[source]

Bases: bms.core.Signal

User defined function for signal.

Parameters:function – a function that will give the time values to the signal
values
class bms.signals.functions.Sinus(name='Sinus', amplitude=1, w=1, phase=0, offset=0)[source]

Bases: bms.core.Signal

values
class bms.signals.functions.Step(name='Step', amplitude=1, delay=0, offset=0)[source]

Bases: bms.core.Signal

Create a Step of amplitude beginning at time delay

values

WLTP signals

WLTP signals

class bms.signals.wltp.WLTP1(name)[source]

Bases: bms.core.Signal

WLTP classe 1 cycle Caution! speed in m/s, not in km/h!

values
class bms.signals.wltp.WLTP2(name)[source]

Bases: bms.core.Signal

WLTP classe 2 cycle Caution! speed in m/s, not in km/h!

values
class bms.signals.wltp.WLTP3(name)[source]

Bases: bms.core.Signal

WLTP classe 3 cycle Caution! speed in m/s, not in km/h!

values

Blocks

Continuous Blocks

Collection of continuous blocks

class bms.blocks.continuous.Division(input_variable1, input_variable2, output_variable)[source]

Bases: bms.core.Block

output=input1/input2

Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
LabelConnections()[source]
OutputValues(it, nsteps=None)
Solve(it, ts)
class bms.blocks.continuous.FunctionBlock(input_variable, output_variable, function)[source]

Bases: bms.core.Block

output=f(input)

Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
LabelConnections()[source]
OutputValues(it, nsteps=None)
Solve(it, ts)
class bms.blocks.continuous.Gain(input_variable, output_variable, value, offset=0)[source]

Bases: bms.core.Block

output=value* input + offset

Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
LabelConnections()[source]
OutputValues(it, nsteps=None)
Solve(it, ts)
class bms.blocks.continuous.ODE(input_variable, output_variable, a, b)[source]

Bases: bms.core.Block

a,b are vectors of coefficients such as H, the transfert function of the block, may be written as: H(p)=(a[i]p**i)/(b[j]p**j) (Einstein sum on i,j) p is Laplace’s variable

Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
LabelConnections()[source]
OutputMatrices(delta_t)[source]
OutputValues(it, nsteps=None)
Solve(it, ts)
class bms.blocks.continuous.Product(input_variable1, input_variable2, output_variable)[source]

Bases: bms.core.Block

output=input1*input2

Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
LabelConnections()[source]
OutputValues(it, nsteps=None)
Solve(it, ts)
class bms.blocks.continuous.Subtraction(input_variable1, input_variable2, output_variable)[source]

Bases: bms.core.Block

output=input1-input2

Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
LabelConnections()[source]
OutputValues(it, nsteps=None)
Solve(it, ts)
class bms.blocks.continuous.Sum(inputs, output_variable)[source]

Bases: bms.core.Block

output=sum inputs

Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
LabelConnections()[source]
OutputValues(it, nsteps=None)
Solve(it, ts)
class bms.blocks.continuous.WeightedSum(inputs, output_variable, weights, offset=0)[source]

Bases: bms.core.Block

Defines a weighted sum over inputs output=sum w_i * input_i

Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
LabelConnections()[source]
OutputValues(it, nsteps=None)
Solve(it, ts)

Non-linear Blocks

Collection of non-linear blocks

class bms.blocks.nonlinear.Coulomb(input_variable, speed_variable, output_variable, max_value, tolerance=0)[source]

Bases: bms.core.Block

Return coulomb force under condition of speed and sum of forces (input)

Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
OutputValues(it, nsteps=None)
Solve(it, ts)
class bms.blocks.nonlinear.CoulombVariableValue(external_force, speed_variable, value_variable, output_variable, tolerance=0)[source]

Bases: bms.core.Block

Return coulomb force under condition of speed and sum of forces (input) The max value is driven by an input

Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
OutputValues(it, nsteps=None)
Solve(it, ts)
class bms.blocks.nonlinear.RegCoulombVariableValue(external_force, speed_variable, value_variable, output_variable, tolerance=0)[source]

Bases: bms.core.Block

Return coulomb force under condition of speed and sum of forces (input) The max value is driven by an input

Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
OutputValues(it, nsteps=None)
Solve(it, ts)
class bms.blocks.nonlinear.Saturation(input_variable, output_variable, min_value, max_value)[source]

Bases: bms.core.Block

output=min_value if input < min_value output=max_value if input > max_value output=input if min_value < input < max_value

Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
OutputValues(it, nsteps=None)
Solve(it, ts)
class bms.blocks.nonlinear.Sign(input_variable, output_variable)[source]

Bases: bms.core.Block

Return the sign of a variable :returns: * -1 if input < 0

  • 1 if input > 0
Evaluate(it, ts)[source]
InputValues(it, nsteps=None)

Returns the input values at a given iteration for solving the block outputs

LabelBlock()[source]
OutputValues(it, nsteps=None)
Solve(it, ts)