Characteristics

In this part we give an introduction on the TESPy characteristics implementation. There two different types of characteristics available in TESPy: lines (CharLine) and maps (CharMap). The default characteristics available are to be found in the tespy.data module documentation.

Characteristic lines

The characteristic lines use linear interpolation in order to determine the y-value given a x-value as input, where x is between the lower boundary \(x_0\) and the upper boundary \(x_1\). \(y_0\) and \(y_1\) are the corresponding y-values.

\[y = y_0 + \frac{x-x_0}{x_1-x_0} \cdot \left(y_1-y_0 \right)\]

It is possible to specify an extrapolate parameter. If the value is False (default state) and the x-value is above the maximum or below the minimum value of the characteristic line the y-value corresponding to the maximum/minimum value is returned instead. If the extrapolate is True linear extrapolation is performed using the two lowermost or uppermost value pairs respectively.

Characteristic maps

The characteristic maps use linear interpolation as well. First step is interpolation on the x-dimension similar to the characteristic line functionality. As the y and z data are two-dimensional, each row of the data corresponds to one x value. Thus, the result of the first step is a vector for each dimension (y and z).

\[ \begin{align}\begin{aligned}\vec{y} = \vec{y_0} + \frac{x-x_0}{x_1-x_0} \cdot \left(\vec{y_1}- \vec{y_0} \right)\\\vec{z} = \vec{z_0} + \frac{x-x_0}{x_1-x_0} \cdot \left(\vec{z_1}- \vec{z_0} \right)\end{aligned}\end{align} \]

Using the y value as second input dimension the corresponding z values are calculated, again using linear interpolation.

\[z = z_0 + \frac{y-y_0}{y_1-y_0} \cdot \left(z_1-z_0 \right)\]

Note

Using compressors map functions \(\vec{y}\) and \(\vec{z}\) are manipulated with by the value of the inlet guide vane angle. Also see the corresponding methods tespy.components.turbomachinery.compressor.Compressor.char_map_eta_s_func and tespy.components.turbomachinery.compressor.Compressor.char_map_pr_func in the API documentation.

Import your own characteristics

It is possible to import your own characteristic lines or maps instead of writing the x, y (and z) data into your python script, for example:

from tespy.tools.characteristics import CharLine
from tespy.tools.characteristics import load_custom_char
from tespy.tools.characteristics import CharMap

gen_char = load_custom_char('generator', CharLine)
gen_char = load_custom_char('custom_map', CharMap)

For the imports to work in the way shown, navigate to your .tespy folder in your HOME directory HOME/.tespy. Create a folder named data, if it does not exist. In this folder, you can place two json-files for your characteristics.

  • char_lines.json

  • char_maps.json

Your custom definitions of characteristic lines go into the char_lines.json and your characteristic map definitions go into the char_maps.json document.

The char_lines.json should have names for identification of the characteristic lines on the first level. On the second level the x and y data are assigned to the name of the characteristic line. The x and y data must be stated as lists.

{
    "name_of_char_line": {
        "x": [0, 0.5, 1, 1.5, 2],
        "y": [0.8, 0.9, 1, 1.1, 1.2]
    },
    "name_of_2nd_char_line": {
        "x": [0, 0.5, 1, 1.5, 2],
        "y": [2, 1.1, 1, 1.2, 1.7]
    },
    "name_of_last_char_line": {
        "x": [0, 0.5, 1, 1.5, 2],
        "y": [0.8, 0.95, 1, 0.95, 0.8]
    }
}

The char_maps.json should also have names for identification of the characteristic lines on the first level. On the second level we additionally need z data. The x data are a list of values, the y and z data are arrays with a list of values for each dimension of the x data. The example below has 3 x values, thus the y and z data must contain 3 sets of values.

{
    "name_of_char_map": {
        "x": [0.971, 1, 1.029],
        "y": [[0.93, 0.943, 0.953, 0.961, 0.962, 0.963],
              [0.987, 0.995, 1.0, 1.002, 1.005, 1.005],
              [1.02, 1.023, 1.026,1.028, 1.03, 1.032]],
        "z": [[0.982, 0.939, 0.895, 0.851, 0.806, 0.762],
               [1.102, 1.052, 1.0, 0.951, 0.9, 0.85],
               [1.213, 1.149, 1.085, 1.022, 0.958, 0.894]]
    }
}