pathsim.blocks.function module

class pathsim.blocks.function.Function(func=<function Function.<lambda>>)[source]

Bases: Block

Arbitrary MIMO function block, defined by a callable object, i.e. function or lambda expression.

The function can have multiple arguments that are then provided by the input channels of the function block.

Form multi input, the function has to specify multiple arguments and for multi output, the aoutputs have to be provided as a tuple or list.

In the context of the global system, this block implements algebraic components of the global system ODE/DAE.

\[\vec{y} = \mathrm{func}(\vec{u})\]

Note

This block is purely algebraic and its operation (op_alg) will be called multiple times per timestep, each time when Simulation._update(t) is called in the global simulation loop. Therefore func must be purely algebraic and not introduce states, delay, etc. For interfacing with external stateful APIs, use the API block.

Note

If the outputs are provided as a single numpy array, they are considered a single output. For MIMO, output has to be tuple.

Example

consider the function:

from pathsim.blocks import Function

def f(a, b, c):
    return a**2, a*b, b/c

fn = Function(f)

then, when the block is uldated, the input channels of the block are assigned to the function arguments following this scheme:

inputs[0] -> a
inputs[1] -> b
inputs[2] -> c

and the function outputs are assigned to the output channels of the block in the same way:

a**2 -> outputs[0]
a*b  -> outputs[1]
b/c  -> outputs[2]
Parameters:

func (callable) – MIMO function that defines algebraic block IO behaviour

op_alg

internal algebraic operator that wraps ‘func’

Type:

Operator

update(t)[source]

Evaluate function block as part of algebraic component of global system DAE.

Parameters:

t (float) – evaluation time

Returns:

error – absolute error to previous iteration for convergence control

Return type:

float