Pumps

This notebook is an example on how to use pumps with and without power plants. It contains an example on how to use revisions (unavailable capacity) on pumps and plants.

Unavailable capacity is set by attribute unavailable_capacity on Plant and Pump.

"unavailable_capacity": {
    "timestamps": [
        "2023-01-02T00:00:00Z",
        "2024-06-01T00:00:00Z",
        "2024-12-01T00:00:00Z"
    ],
    "scenarios": [
        [
            170,
            150,
            0
        ]
    ]
}

Example plot for a plant with a pump:

No revisions:

image.png

  • No revisions set

Plant revision:

image-2.png

  • A substantial revision set on the power plant to reduce production. Max power production is down to ~45WM from ~150MW.

Pump and plant revisions:

image-3.png

  • Same revision on the plant.

  • Pump capacity is down to ~25MW, from ~100MW.

[1]:
import os
import numpy as np
from pyltmapi import LtmSession, LtmPlot, LtmDot
import pyltm
import json

import logging
logging.basicConfig(level=logging.INFO)

from pathlib import Path

ltm_core_path =  os.environ.get("LTM_CORE_PATH", str(Path("~").expanduser().joinpath("ltm/release/bin/")))
license_file = os.environ.get("LTM_CORE_LICENSE_FILE", str(Path("~").expanduser().joinpath("ltm/ltm-license.dat")))
[2]:
from IPython.display import HTML, Image, display, display_markdown

ltmapi_version = LtmSession.version()
display(f"pyltm version {ltmapi_version}")
'pyltm version PyLTM version: 0.21.0'
[3]:
def usercallback(program_info, userdata):
    # print(userdata)
    # print(program_info)

    print(os.environ)

    return True


def generate_plots(ltm):
    # Water values and price series
    for busbar in ltm.model.busbars():
        display_markdown(f"# Busbar: {busbar}", raw=True)

        # Pumped energy
        if (busbar.have_water_value_results()):
            pumped_energy = busbar.sum_pumped_power()
            LtmPlot.make_generic_plot(pumped_energy, f"sum_pumped_power '{busbar.name}'")

            energy_pumping = busbar.sum_power_used_for_pumping()
            LtmPlot.make_generic_plot(energy_pumping, f"sum_power_used_for_pumping '{busbar.name}'")

        # Water values
        if (busbar.have_water_value_results()):
            LtmPlot.make_water_value_plot(busbar.water_value_results(), busbar.name)

        # Market results
        if (busbar.have_market_results()):
            LtmPlot.make_market_results_plot(busbar.market_result_price(), busbar.name)


    # Detailed hydro results from
    for busbar in ltm.model.busbars():
        display_markdown(f"## {busbar}", raw=True)

        LtmDot.display_dot_image(busbar.build_connection_tree())

        # Busbar reservoirs
        for rsv in busbar.reservoirs():
            display("Reservoir")
            LtmPlot.make_generic_plot(rsv.reservoir(), f"Reservoir '{rsv.name}'")
            LtmPlot.make_generic_plot(rsv.discharge(), f"Discharge '{rsv.name}'")
            LtmPlot.make_generic_plot(rsv.inflow(), f"Inflow '{rsv.name}'")
            LtmPlot.make_generic_plot(rsv.production(), f"Production '{rsv.name}'")
            LtmPlot.make_generic_plot(rsv.bypass(), f"Bypass '{rsv.name}'")
            LtmPlot.make_generic_plot(rsv.spill(), f"Spill '{rsv.name}'")
[4]:
def open_and_write_model(filename: str):
    session = LtmSession("ikernel", ltm_core_path=ltm_core_path, overwrite_session=True)

    session.set_execute_callback(usercallback, None)

    # Explicitly set license file
    session.model.global_settings.ltm_license_file_path = license_file

    session.model.global_settings.simulation_type=pyltm.SimulationType.Parallel

    with session:
        try:
            # Load model from file.
            session.load(filename=filename)
            # print(vars(session.model.global_settings))

            session.model.global_settings.model_type = pyltm.ModelType.EMPS

            print("EXTRA ENV")
            print(session.model.global_settings.extra_environment)

            # Write model to disk, and automatically generate an output directory.
            session.write_model()

            print(f"python pid: {os.getpid()}") # for debugging

            session.dump_model("pump_dump")

            # Display model graph
            LtmDot.display_dot_image(session.build_connection_tree())
            LtmDot.display_dot_image(session.build_busbar_graph())

            # return

            # Execute/run LTM/EMPS on the model
            last_rc, results = session.execute_model()

            # If last return code is not 0, then there was an error.
            if last_rc != 0:
                err = results[0]["log_file_contents"]
                LtmDot.print(err)
            else:
                # Make plots from the results
                generate_plots(session)

        except Exception as e:
            print(e)
            raise(e)
[5]:
open_and_write_model("pumps.json")
INFO:LtmApiModel:(ikernel) Loading model from file: pumps.json
INFO:LtmApiModel:(ikernel) LtmApiModel::maybe_generate_output_dir: output_path: /builds/energy/ltm/pyltmapi/docs/ltm-api/guides/pumps/testout_pumps/2026-03-24-134214.951-EMPS-parallell
INFO:LtmApiModel:(ikernel) Using license file '/builds/energy/ltm/pyltmapi.tmp/CI_LTM_LICENSE_FILE'
INFO:LtmApiModel:(ikernel) Using license file '/builds/energy/ltm/pyltmapi.tmp/CI_LTM_LICENSE_FILE'
INFO:Validator:(ikernel) Model validation succeeded
INFO:LtmApiModel:(ikernel) Writing model to path /builds/energy/ltm/pyltmapi/docs/ltm-api/guides/pumps/testout_pumps/2026-03-24-134214.951-EMPS-parallell
INFO:Validator:(ikernel) Model validation succeeded
INFO:LtmApiModel:(ikernel) Not deleting output dir (/builds/energy/ltm/pyltmapi/docs/ltm-api/guides/pumps/testout_pumps/2026-03-24-134214.951-EMPS-parallell), as delete_output_dir: false, and has_generated_output_dir: true
EXTRA ENV
{}
python pid: 1195
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_2.svg
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_3.svg
INFO:LtmApiModel:(ikernel) Model executed successfully
environ({'AZURE_TENANT_ID': 'e1f00f39-6041-45b0-b309-e0210d8b32af', 'CI_DEFAULT_BRANCH_SLUG': 'main', 'CI_PROJECT_NAMESPACE': 'energy/ltm', 'GITLAB_USER_ID': '1175', 'CI_RUNNER_VERSION': '18.9.0', 'FF_SKIP_NOOP_BUILD_STAGES': 'true', 'PYTHON_SHA256': '2a84cd31dd8d8ea8aaff75de66fc1b4b0127dd5799aa50a64ae9a313885b4593', 'FF_USE_INIT_WITH_DOCKER_EXECUTOR': 'false', 'CI_SERVER_NAME': 'GitLab', 'CI_RUNNER_DESCRIPTION': 'Dracula (New Structure)', 'GITLAB_USER_EMAIL': 'kent.fagerjord@sintef.no', 'CI_SERVER_REVISION': '95bf6656b5a', 'FF_USE_WINDOWS_LEGACY_PROCESS_STRATEGY': 'false', 'FF_ENABLE_JOB_INPUTS_INTERPOLATION': 'true', 'CI_PIPELINE_NAME': '', 'CI_RUNNER_EXECUTABLE_ARCH': 'linux/amd64', 'CI_REGISTRY_USER': 'gitlab-ci-token', 'CI_PROJECT_TOPICS': '', 'CI_REGISTRY_PASSWORD': 'glcbt-64_CJVSs9Cx3zus6wKophn7', 'CI_API_V4_URL': 'https://gitlab.sintef.no/api/v4', 'CI_RUNNER_SHORT_TOKEN': 'JyEmKqmhu', 'CI_JOB_NAME': 'run-notebooks', 'HOSTNAME': 'runner-jyemkqmhu-project-17576-concurrent-0', 'PYTHON_VERSION': '3.13.12', 'FF_USE_JOB_ROUTER': 'false', 'GITLAB_USER_LOGIN': 'kent.fagerjord', 'CI_PROJECT_NAME': 'pyltmapi', 'CI_PIPELINE_SOURCE': 'push', 'AZURE_RESOURCE_GROUP': 'rg-ltm-services-prod-001', 'CI_JOB_STATUS': 'running', 'CI_PIPELINE_ID': '1431946', 'FF_DISABLE_POWERSHELL_STDIN': 'false', 'CI_COMMIT_REF_SLUG': 'main', 'CI_SERVER': 'yes', 'FF_SET_PERMISSIONS_BEFORE_CLEANUP': 'true', 'CI_COMMIT_SHORT_SHA': '94fc0b30', 'CI_JOB_NAME_SLUG': 'run-notebooks', 'RUNNER_TEMP_PROJECT_DIR': '/builds/energy/ltm/pyltmapi.tmp', 'FF_USE_GIT_BUNDLE_URIS': 'true', 'LTM_CORE_LICENSE_FILE': '/builds/energy/ltm/pyltmapi.tmp/CI_LTM_LICENSE_FILE', 'LTM_CORE_PATH': '/builds/energy/ltm/pyltmapi/release/bin', 'PWD': '/builds/energy/ltm/pyltmapi', 'CI_RUNNER_TAGS': '["dracula", "standard-runner"]', 'CI_PROJECT_PATH': 'energy/ltm/pyltmapi', 'FF_HASH_CACHE_KEYS': 'false', 'FF_TIMESTAMPS': 'true', 'CI_PROJECT_NAMESPACE_SLUG': 'energy-ltm', 'FF_USE_NEW_BASH_EVAL_STRATEGY': 'false', 'FF_MASK_ALL_DEFAULT_TOKENS': 'true', 'CI_SERVER_TLS_CA_FILE': '/builds/energy/ltm/pyltmapi.tmp/CI_SERVER_TLS_CA_FILE', 'FF_USE_LEGACY_S3_CACHE_ADAPTER': 'false', 'FF_WAIT_FOR_POD_TO_BE_REACHABLE': 'false', 'CI_JOB_GROUP_NAME': 'run-notebooks', 'FF_DISABLE_UMASK_FOR_KUBERNETES_EXECUTOR': 'false', 'CI_COMMIT_REF_PROTECTED': 'true', 'FF_USE_POWERSHELL_PATH_RESOLVER': 'false', 'FF_USE_DOCKER_AUTOSCALER_DIAL_STDIO': 'true', 'CI_API_GRAPHQL_URL': 'https://gitlab.sintef.no/api/graphql', 'CI_SERVER_VERSION_MINOR': '9', 'HOME': '/root', 'CI_COMMIT_SHA': '94fc0b302c5d83c4570bcf5b8f71e473b811b456', 'FF_NETWORK_PER_BUILD': 'false', 'AZURE_SUBSCRIPTION_ID': 'ca09f311-ef95-4bf0-9d74-06d3ef864284', 'CI_JOB_TIMEOUT': '3600', 'CI_PROJECT_VISIBILITY': 'public', 'CI_CONCURRENT_PROJECT_ID': '0', 'FF_SCRIPT_SECTIONS': 'false', 'FF_USE_WINDOWS_JOB_OBJECT': 'false', 'CI_COMMIT_MESSAGE': 'Release 0.21.0\n', 'CI_SERVER_SHELL_SSH_PORT': '22', 'FF_DISABLE_AUTOMATIC_TOKEN_ROTATION': 'false', 'FF_USE_DIRECT_DOWNLOAD': 'true', 'CI_PAGES_DOMAIN': 'pages.sintef.no', 'FF_PRINT_POD_EVENTS': 'false', 'CI_SERVER_VERSION': '18.9.1', 'GPG_KEY': '7169605F62C751356D054A26A821E680E5FA6305', 'FF_USE_POD_ACTIVE_DEADLINE_SECONDS': 'true', 'CI_SERVER_PORT': '443', 'CI_REGISTRY': 'gitlab.sintef.no:5050', 'CI_PAGES_HOSTNAME': 'pyltmapi-energy-ltm-ee43c4867866949a64a049a71e80d37e5813f054428.pages.sintef.no', 'CI_PROJECT_NAMESPACE_ID': '21791', 'FF_TEST_FEATURE': 'false', 'CI_PAGES_URL': 'https://pyltmapi-energy-ltm-ee43c4867866949a64a049a71e80d37e5813f054428.pages.sintef.no', 'LTM_CORE_ACCESS_TOKEN': 'tiZowXqAD9FWRkGkPY4t', 'CI_PIPELINE_IID': '686', 'CI_REPOSITORY_URL': 'https://gitlab-ci-token:glcbt-64_CJVSs9Cx3zus6wKophn7@gitlab.sintef.no/energy/ltm/pyltmapi.git', 'CI_SERVER_URL': 'https://gitlab.sintef.no', 'FF_USE_FLEETING_ACQUIRE_HEARTBEATS': 'false', 'AZURE_CDN_PROFILE': 'cdn-profile-ltm-docs', 'FF_ENABLE_BASH_EXIT_CODE_CHECK': 'false', 'GITLAB_FEATURES': '', 'FF_USE_GITALY_CORRELATION_ID': 'true', 'CI_COMMIT_DESCRIPTION': '', 'FF_USE_ADVANCED_POD_SPEC_CONFIGURATION': 'false', 'CI_TEMPLATE_REGISTRY_HOST': 'registry.gitlab.com', 'CI_JOB_STAGE': 'test', 'CI_PIPELINE_URL': 'https://gitlab.sintef.no/energy/ltm/pyltmapi/-/pipelines/1431946', 'CI_DEFAULT_BRANCH': 'main', 'FF_EXPORT_HIGH_CARDINALITY_METRICS': 'false', 'FF_GIT_URLS_WITHOUT_TOKENS': 'false', 'GITLAB_ENV': '/builds/energy/ltm/pyltmapi.tmp/gitlab_runner_env', 'CI_SERVER_VERSION_PATCH': '1', 'CI_COMMIT_TITLE': 'Release 0.21.0', 'CI_SERVER_FQDN': 'gitlab.sintef.no', 'CI_PROJECT_ROOT_NAMESPACE': 'energy', 'FF_ENABLE_JOB_CLEANUP': 'false', 'FF_RESOLVE_FULL_TLS_CHAIN': 'false', 'PYLTM_PYPI_ACCESS_TOKEN': 'gldt-X63xfsB9hjyiq7P93_LB', 'GITLAB_USER_NAME': 'Kent Fagerjord', 'CI_PROJECT_DIR': '/builds/energy/ltm/pyltmapi', 'CI_JOB_STARTED_AT_SLUG': '2026-03-24t14-37-00-01-00', 'SHLVL': '2', 'CI_RUNNER_ID': '6047', 'CI_PIPELINE_CREATED_AT': '2026-03-24T14:35:49+01:00', 'CI_COMMIT_TIMESTAMP': '2026-03-24T13:55:40+01:00', 'CI_DISPOSABLE_ENVIRONMENT': 'true', 'CI_SERVER_SHELL_SSH_HOST': 'gitlab.sintef.no', 'CI_REGISTRY_IMAGE': 'gitlab.sintef.no:5050/energy/ltm/pyltmapi', 'AZURE_STORAGE_ACCOUNT': 'stltmdocs001', 'CI_SERVER_PROTOCOL': 'https', 'AZURE_CLIENT_ID': '39610142-972f-41cd-982a-4b7f3f0c00b6', 'FF_SCRIPT_TO_STEP_MIGRATION': 'false', 'CI_COMMIT_AUTHOR': 'Kent Fagerjord <kent.fagerjord@sintef.no>', 'FF_POSIXLY_CORRECT_ESCAPES': 'false', 'CI_COMMIT_REF_NAME': 'main', 'CI_SERVER_HOST': 'gitlab.sintef.no', 'FF_USE_DUMB_INIT_WITH_KUBERNETES_EXECUTOR': 'false', 'CI_JOB_URL': 'https://gitlab.sintef.no/energy/ltm/pyltmapi/-/jobs/2819963', 'CI_JOB_TOKEN': 'glcbt-64_CJVSs9Cx3zus6wKophn7', 'CI_CONCURRENT_ID': '0', 'CI_JOB_STARTED_AT': '2026-03-24T14:37:00+01:00', 'CI_PROJECT_DESCRIPTION': '', 'CI_COMMIT_BRANCH': 'main', 'FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY': 'false', 'CI_PROJECT_CLASSIFICATION_LABEL': '', 'CI_RUNNER_REVISION': '07e534ba', 'FF_KUBERNETES_HONOR_ENTRYPOINT': 'false', 'FF_CLEAN_UP_FAILED_CACHE_EXTRACT': 'false', 'FF_USE_DYNAMIC_TRACE_FORCE_SEND_INTERVAL': 'false', 'FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR': 'false', 'CI_PROJECT_PATH_SLUG': 'energy-ltm-pyltmapi', 'CI_NODE_TOTAL': '1', 'FF_USE_GIT_NATIVE_CLONE': 'false', 'FF_USE_ADAPTIVE_REQUEST_CONCURRENCY': 'true', 'CI_JOB_ID': '2819963', 'CI_BUILDS_DIR': '/builds', 'CI_PROJECT_REPOSITORY_LANGUAGES': 'python,shell', 'DOCKER_AUTH_CONFIG': '{\n    "auths": {\n        "gitlab.sintef.no:5050": {\n            "auth": "Z2l0bGFiK2RlcGxveS10b2tlbi00Mjp6bU1NRFV6cXlNdXZFVnhuRi1hWg=="\n        }\n    }\n}', 'FF_LOG_IMAGES_CONFIGURED_FOR_JOB': 'false', 'PATH': '/builds/energy/ltm/pyltmapi/release/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'CI_PROJECT_ID': '17576', 'FF_SECRET_RESOLVING_FAILS_IF_MISSING': 'true', 'CI': 'true', 'GITLAB_CI': 'true', 'CI_JOB_IMAGE': 'python:3.13', 'CI_PROJECT_TITLE': 'pyltmapi', 'CI_COMMIT_BEFORE_SHA': '0670fb2ce558ddd5e024357248d8f85d2a5a80f4', 'AZURE_CDN_ENDPOINT': 'cdn-endpoint-ltm-docs', 'LTMAPI_ARTIFACT_TOKEN': 'yUk9SpAxyVESQVrz4umZ', 'CI_SERVER_VERSION_MAJOR': '18', 'FF_USE_EXPONENTIAL_BACKOFF_STAGE_RETRY': 'true', 'CI_CONFIG_PATH': '.gitlab-ci.yml', 'FF_USE_LEGACY_GCS_CACHE_ADAPTER': 'false', 'FF_USE_FASTZIP': 'false', 'PYPI_TOKEN': 'pypi-AgEIcHlwaS5vcmcCJDFhNjg4MmJhLWEzMTgtNGMzNi04ZGIwLTUzNGZiNDYyMDc2YwACEFsxLFsicHlsdG1hcGkiXV0AAixbMixbIjNlZDIxOTJhLTU5OGMtNDQyMy05ZjhkLWZhZDNiN2YwZTQzZCJdXQAABiDQc1OXGHWbFFYLecbHFMnzVVP6vTu4H47MhEzPpio1eQ', 'CI_COMMIT_MESSAGE_IS_TRUNCATED': 'false', 'CI_LTM_LICENSE_FILE': '/builds/energy/ltm/pyltmapi.tmp/CI_LTM_LICENSE_FILE', 'CI_PROJECT_URL': 'https://gitlab.sintef.no/energy/ltm/pyltmapi', 'OLDPWD': '/', '_': '/usr/local/bin/jupyter', 'LC_CTYPE': 'C.UTF-8', 'JPY_PARENT_PID': '371', 'PYDEVD_USE_FRAME_EVAL': 'NO', 'TERM': 'xterm-color', 'CLICOLOR': '1', 'FORCE_COLOR': '1', 'CLICOLOR_FORCE': '1', 'PAGER': 'cat', 'GIT_PAGER': 'cat', 'MPLBACKEND': 'module://matplotlib_inline.backend_inline'})
environ({'AZURE_TENANT_ID': 'e1f00f39-6041-45b0-b309-e0210d8b32af', 'CI_DEFAULT_BRANCH_SLUG': 'main', 'CI_PROJECT_NAMESPACE': 'energy/ltm', 'GITLAB_USER_ID': '1175', 'CI_RUNNER_VERSION': '18.9.0', 'FF_SKIP_NOOP_BUILD_STAGES': 'true', 'PYTHON_SHA256': '2a84cd31dd8d8ea8aaff75de66fc1b4b0127dd5799aa50a64ae9a313885b4593', 'FF_USE_INIT_WITH_DOCKER_EXECUTOR': 'false', 'CI_SERVER_NAME': 'GitLab', 'CI_RUNNER_DESCRIPTION': 'Dracula (New Structure)', 'GITLAB_USER_EMAIL': 'kent.fagerjord@sintef.no', 'CI_SERVER_REVISION': '95bf6656b5a', 'FF_USE_WINDOWS_LEGACY_PROCESS_STRATEGY': 'false', 'FF_ENABLE_JOB_INPUTS_INTERPOLATION': 'true', 'CI_PIPELINE_NAME': '', 'CI_RUNNER_EXECUTABLE_ARCH': 'linux/amd64', 'CI_REGISTRY_USER': 'gitlab-ci-token', 'CI_PROJECT_TOPICS': '', 'CI_REGISTRY_PASSWORD': 'glcbt-64_CJVSs9Cx3zus6wKophn7', 'CI_API_V4_URL': 'https://gitlab.sintef.no/api/v4', 'CI_RUNNER_SHORT_TOKEN': 'JyEmKqmhu', 'CI_JOB_NAME': 'run-notebooks', 'HOSTNAME': 'runner-jyemkqmhu-project-17576-concurrent-0', 'PYTHON_VERSION': '3.13.12', 'FF_USE_JOB_ROUTER': 'false', 'GITLAB_USER_LOGIN': 'kent.fagerjord', 'CI_PROJECT_NAME': 'pyltmapi', 'CI_PIPELINE_SOURCE': 'push', 'AZURE_RESOURCE_GROUP': 'rg-ltm-services-prod-001', 'CI_JOB_STATUS': 'running', 'CI_PIPELINE_ID': '1431946', 'FF_DISABLE_POWERSHELL_STDIN': 'false', 'CI_COMMIT_REF_SLUG': 'main', 'CI_SERVER': 'yes', 'FF_SET_PERMISSIONS_BEFORE_CLEANUP': 'true', 'CI_COMMIT_SHORT_SHA': '94fc0b30', 'CI_JOB_NAME_SLUG': 'run-notebooks', 'RUNNER_TEMP_PROJECT_DIR': '/builds/energy/ltm/pyltmapi.tmp', 'FF_USE_GIT_BUNDLE_URIS': 'true', 'LTM_CORE_LICENSE_FILE': '/builds/energy/ltm/pyltmapi.tmp/CI_LTM_LICENSE_FILE', 'LTM_CORE_PATH': '/builds/energy/ltm/pyltmapi/release/bin', 'PWD': '/builds/energy/ltm/pyltmapi', 'CI_RUNNER_TAGS': '["dracula", "standard-runner"]', 'CI_PROJECT_PATH': 'energy/ltm/pyltmapi', 'FF_HASH_CACHE_KEYS': 'false', 'FF_TIMESTAMPS': 'true', 'CI_PROJECT_NAMESPACE_SLUG': 'energy-ltm', 'FF_USE_NEW_BASH_EVAL_STRATEGY': 'false', 'FF_MASK_ALL_DEFAULT_TOKENS': 'true', 'CI_SERVER_TLS_CA_FILE': '/builds/energy/ltm/pyltmapi.tmp/CI_SERVER_TLS_CA_FILE', 'FF_USE_LEGACY_S3_CACHE_ADAPTER': 'false', 'FF_WAIT_FOR_POD_TO_BE_REACHABLE': 'false', 'CI_JOB_GROUP_NAME': 'run-notebooks', 'FF_DISABLE_UMASK_FOR_KUBERNETES_EXECUTOR': 'false', 'CI_COMMIT_REF_PROTECTED': 'true', 'FF_USE_POWERSHELL_PATH_RESOLVER': 'false', 'FF_USE_DOCKER_AUTOSCALER_DIAL_STDIO': 'true', 'CI_API_GRAPHQL_URL': 'https://gitlab.sintef.no/api/graphql', 'CI_SERVER_VERSION_MINOR': '9', 'HOME': '/root', 'CI_COMMIT_SHA': '94fc0b302c5d83c4570bcf5b8f71e473b811b456', 'FF_NETWORK_PER_BUILD': 'false', 'AZURE_SUBSCRIPTION_ID': 'ca09f311-ef95-4bf0-9d74-06d3ef864284', 'CI_JOB_TIMEOUT': '3600', 'CI_PROJECT_VISIBILITY': 'public', 'CI_CONCURRENT_PROJECT_ID': '0', 'FF_SCRIPT_SECTIONS': 'false', 'FF_USE_WINDOWS_JOB_OBJECT': 'false', 'CI_COMMIT_MESSAGE': 'Release 0.21.0\n', 'CI_SERVER_SHELL_SSH_PORT': '22', 'FF_DISABLE_AUTOMATIC_TOKEN_ROTATION': 'false', 'FF_USE_DIRECT_DOWNLOAD': 'true', 'CI_PAGES_DOMAIN': 'pages.sintef.no', 'FF_PRINT_POD_EVENTS': 'false', 'CI_SERVER_VERSION': '18.9.1', 'GPG_KEY': '7169605F62C751356D054A26A821E680E5FA6305', 'FF_USE_POD_ACTIVE_DEADLINE_SECONDS': 'true', 'CI_SERVER_PORT': '443', 'CI_REGISTRY': 'gitlab.sintef.no:5050', 'CI_PAGES_HOSTNAME': 'pyltmapi-energy-ltm-ee43c4867866949a64a049a71e80d37e5813f054428.pages.sintef.no', 'CI_PROJECT_NAMESPACE_ID': '21791', 'FF_TEST_FEATURE': 'false', 'CI_PAGES_URL': 'https://pyltmapi-energy-ltm-ee43c4867866949a64a049a71e80d37e5813f054428.pages.sintef.no', 'LTM_CORE_ACCESS_TOKEN': 'tiZowXqAD9FWRkGkPY4t', 'CI_PIPELINE_IID': '686', 'CI_REPOSITORY_URL': 'https://gitlab-ci-token:glcbt-64_CJVSs9Cx3zus6wKophn7@gitlab.sintef.no/energy/ltm/pyltmapi.git', 'CI_SERVER_URL': 'https://gitlab.sintef.no', 'FF_USE_FLEETING_ACQUIRE_HEARTBEATS': 'false', 'AZURE_CDN_PROFILE': 'cdn-profile-ltm-docs', 'FF_ENABLE_BASH_EXIT_CODE_CHECK': 'false', 'GITLAB_FEATURES': '', 'FF_USE_GITALY_CORRELATION_ID': 'true', 'CI_COMMIT_DESCRIPTION': '', 'FF_USE_ADVANCED_POD_SPEC_CONFIGURATION': 'false', 'CI_TEMPLATE_REGISTRY_HOST': 'registry.gitlab.com', 'CI_JOB_STAGE': 'test', 'CI_PIPELINE_URL': 'https://gitlab.sintef.no/energy/ltm/pyltmapi/-/pipelines/1431946', 'CI_DEFAULT_BRANCH': 'main', 'FF_EXPORT_HIGH_CARDINALITY_METRICS': 'false', 'FF_GIT_URLS_WITHOUT_TOKENS': 'false', 'GITLAB_ENV': '/builds/energy/ltm/pyltmapi.tmp/gitlab_runner_env', 'CI_SERVER_VERSION_PATCH': '1', 'CI_COMMIT_TITLE': 'Release 0.21.0', 'CI_SERVER_FQDN': 'gitlab.sintef.no', 'CI_PROJECT_ROOT_NAMESPACE': 'energy', 'FF_ENABLE_JOB_CLEANUP': 'false', 'FF_RESOLVE_FULL_TLS_CHAIN': 'false', 'PYLTM_PYPI_ACCESS_TOKEN': 'gldt-X63xfsB9hjyiq7P93_LB', 'GITLAB_USER_NAME': 'Kent Fagerjord', 'CI_PROJECT_DIR': '/builds/energy/ltm/pyltmapi', 'CI_JOB_STARTED_AT_SLUG': '2026-03-24t14-37-00-01-00', 'SHLVL': '2', 'CI_RUNNER_ID': '6047', 'CI_PIPELINE_CREATED_AT': '2026-03-24T14:35:49+01:00', 'CI_COMMIT_TIMESTAMP': '2026-03-24T13:55:40+01:00', 'CI_DISPOSABLE_ENVIRONMENT': 'true', 'CI_SERVER_SHELL_SSH_HOST': 'gitlab.sintef.no', 'CI_REGISTRY_IMAGE': 'gitlab.sintef.no:5050/energy/ltm/pyltmapi', 'AZURE_STORAGE_ACCOUNT': 'stltmdocs001', 'CI_SERVER_PROTOCOL': 'https', 'AZURE_CLIENT_ID': '39610142-972f-41cd-982a-4b7f3f0c00b6', 'FF_SCRIPT_TO_STEP_MIGRATION': 'false', 'CI_COMMIT_AUTHOR': 'Kent Fagerjord <kent.fagerjord@sintef.no>', 'FF_POSIXLY_CORRECT_ESCAPES': 'false', 'CI_COMMIT_REF_NAME': 'main', 'CI_SERVER_HOST': 'gitlab.sintef.no', 'FF_USE_DUMB_INIT_WITH_KUBERNETES_EXECUTOR': 'false', 'CI_JOB_URL': 'https://gitlab.sintef.no/energy/ltm/pyltmapi/-/jobs/2819963', 'CI_JOB_TOKEN': 'glcbt-64_CJVSs9Cx3zus6wKophn7', 'CI_CONCURRENT_ID': '0', 'CI_JOB_STARTED_AT': '2026-03-24T14:37:00+01:00', 'CI_PROJECT_DESCRIPTION': '', 'CI_COMMIT_BRANCH': 'main', 'FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY': 'false', 'CI_PROJECT_CLASSIFICATION_LABEL': '', 'CI_RUNNER_REVISION': '07e534ba', 'FF_KUBERNETES_HONOR_ENTRYPOINT': 'false', 'FF_CLEAN_UP_FAILED_CACHE_EXTRACT': 'false', 'FF_USE_DYNAMIC_TRACE_FORCE_SEND_INTERVAL': 'false', 'FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR': 'false', 'CI_PROJECT_PATH_SLUG': 'energy-ltm-pyltmapi', 'CI_NODE_TOTAL': '1', 'FF_USE_GIT_NATIVE_CLONE': 'false', 'FF_USE_ADAPTIVE_REQUEST_CONCURRENCY': 'true', 'CI_JOB_ID': '2819963', 'CI_BUILDS_DIR': '/builds', 'CI_PROJECT_REPOSITORY_LANGUAGES': 'python,shell', 'DOCKER_AUTH_CONFIG': '{\n    "auths": {\n        "gitlab.sintef.no:5050": {\n            "auth": "Z2l0bGFiK2RlcGxveS10b2tlbi00Mjp6bU1NRFV6cXlNdXZFVnhuRi1hWg=="\n        }\n    }\n}', 'FF_LOG_IMAGES_CONFIGURED_FOR_JOB': 'false', 'PATH': '/builds/energy/ltm/pyltmapi/release/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'CI_PROJECT_ID': '17576', 'FF_SECRET_RESOLVING_FAILS_IF_MISSING': 'true', 'CI': 'true', 'GITLAB_CI': 'true', 'CI_JOB_IMAGE': 'python:3.13', 'CI_PROJECT_TITLE': 'pyltmapi', 'CI_COMMIT_BEFORE_SHA': '0670fb2ce558ddd5e024357248d8f85d2a5a80f4', 'AZURE_CDN_ENDPOINT': 'cdn-endpoint-ltm-docs', 'LTMAPI_ARTIFACT_TOKEN': 'yUk9SpAxyVESQVrz4umZ', 'CI_SERVER_VERSION_MAJOR': '18', 'FF_USE_EXPONENTIAL_BACKOFF_STAGE_RETRY': 'true', 'CI_CONFIG_PATH': '.gitlab-ci.yml', 'FF_USE_LEGACY_GCS_CACHE_ADAPTER': 'false', 'FF_USE_FASTZIP': 'false', 'PYPI_TOKEN': 'pypi-AgEIcHlwaS5vcmcCJDFhNjg4MmJhLWEzMTgtNGMzNi04ZGIwLTUzNGZiNDYyMDc2YwACEFsxLFsicHlsdG1hcGkiXV0AAixbMixbIjNlZDIxOTJhLTU5OGMtNDQyMy05ZjhkLWZhZDNiN2YwZTQzZCJdXQAABiDQc1OXGHWbFFYLecbHFMnzVVP6vTu4H47MhEzPpio1eQ', 'CI_COMMIT_MESSAGE_IS_TRUNCATED': 'false', 'CI_LTM_LICENSE_FILE': '/builds/energy/ltm/pyltmapi.tmp/CI_LTM_LICENSE_FILE', 'CI_PROJECT_URL': 'https://gitlab.sintef.no/energy/ltm/pyltmapi', 'OLDPWD': '/', '_': '/usr/local/bin/jupyter', 'LC_CTYPE': 'C.UTF-8', 'JPY_PARENT_PID': '371', 'PYDEVD_USE_FRAME_EVAL': 'NO', 'TERM': 'xterm-color', 'CLICOLOR': '1', 'FORCE_COLOR': '1', 'CLICOLOR_FORCE': '1', 'PAGER': 'cat', 'GIT_PAGER': 'cat', 'MPLBACKEND': 'module://matplotlib_inline.backend_inline'})

Busbar: busbar/pumpekraft

../../../_images/ltm-api_guides_pumps_pumps-notebook_5_7.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_8.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_9.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_10.png

Busbar: busbar/tev

busbar/pumpekraft

../../../_images/ltm-api_guides_pumps_pumps-notebook_5_13.svg
'Reservoir'
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_15.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_16.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_17.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_18.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_19.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_20.png
'Reservoir'
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_22.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_23.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_24.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_25.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_26.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_27.png
'Reservoir'
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_29.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_30.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_31.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_32.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_33.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_34.png
'Reservoir'
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_36.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_37.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_38.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_39.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_40.png
../../../_images/ltm-api_guides_pumps_pumps-notebook_5_41.png

busbar/tev

../../../_images/ltm-api_guides_pumps_pumps-notebook_5_43.svg
INFO:LtmApiModel:(ikernel) Not deleting output dir (/builds/energy/ltm/pyltmapi/docs/ltm-api/guides/pumps/testout_pumps/2026-03-24-134214.951-EMPS-parallell), as delete_output_dir: false, and has_generated_output_dir: true
INFO:LtmApiModel:(ikernel) Not deleting output dir (/builds/energy/ltm/pyltmapi/docs/ltm-api/guides/pumps/testout_pumps/2026-03-24-134214.951-EMPS-parallell), as delete_output_dir: false, and has_generated_output_dir: true