EOPS Example Run

This example shows a basic EOPS series simulation.

It also contains two hydraulic couplings, one station joined and one non-station joined.

If licensed feature LTM_OPS_UTJAMNVASS is active, non-station joined coupling will also write additional results showing the hydraulic flow between the connected reservoirs.

[1]:
import os

from pyltmapi import LtmSession, LtmDot
from pathlib import Path

from generate_plots import generate_plots

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")))


with LtmSession("ikernel", overwrite_session=True) as session:
    session.load(filename="eops.json")
    print(session.model.global_settings.model_type)
    print(session.model.global_settings.simulation_type)
    LtmDot.display_dot_image(session.build_connection_tree())
ModelType.EOPS
SimulationType.Parallel
../../../_images/ltm-api_guides_eops_eops-example-run_1_1.svg
[2]:
from IPython.display import HTML, display, display_markdown
import logging
from pyltmapi import LtmPlot

logging.basicConfig(level=logging.DEBUG)

import pyltm
import datetime

output_path = ""

with LtmSession(
    "ikernel", ltm_core_path=ltm_core_path, overwrite_session=True
) as session:
    session.load(filename="eops.json")

    gs: pyltm.GlobalSettings = session.model.global_settings

    if False:
        hp = session.model.get("price_series_main", "HOVEDPRISREKKE.csv")
        session.model.remove(hp)

        mainprice = pyltm.MainPriceSeries()

        start_ts = pyltm.util.parse_timefmt("2024-W01")
        timestamps = []
        scenarios = []

        num_values = 104 * 7 * 24

        for n in range(0, num_values):
            timestamps.append(start_ts + datetime.timedelta(hours=n))
            pass

        for s in range(1, 11):
            sc = []

            for n in range(0, num_values):
                sc.append(s + n / 10000)

            scenarios.append(sc)

        txy = pyltm.Txy()

        txy.timestamps = timestamps
        txy.scenarios = scenarios

        mainprice.series = txy
        mainprice.name = "dynpris"

        session.model.add(mainprice)

    session.model.global_settings.ltm_license_file_path = license_file
    validation = session.validate_model()

    write_model = session.write_model()
    last_rc, results = session.execute_model()

    output_path = gs.output_path

    if last_rc != 0:
        err = results[0]["log_file_contents"]
        display_markdown(err)

    else:
        try:
            for a in session.model.areas():
                print(a)
                for hc in a.hydraulic_couplings():
                    print(hc)
                    print(f"hc.station_joined:              {hc.station_joined}")
                    print(
                        f"hc.have_hydraulic_flow_results: {hc.have_hydraulic_flow_results()}"
                    )

                    if hc.station_joined:
                        pass
                        LtmPlot.make_generic_plot(
                            hc.discharge(), f"Discharge '{hc.name}'"
                        )
                        LtmPlot.make_generic_plot(
                            hc.production(), f"Production '{hc.name}'"
                        )
                    else:
                        if hc.have_hydraulic_flow_results():
                            for rsv in hc.connected_reservoirs():
                                LtmPlot.make_generic_plot(
                                    rsv.flow(),
                                    f"Hydraulic flow '{hc.name}' - '{rsv.name}'",
                                )

                        else:
                            print(
                                f"{hc}: Does not have hydraulic exchange/flow results"
                            )

        except Exception as e:
            print(e)
            pass

        generate_plots(session)
DEBUG:LtmApiModule:(ikernel) Session created: "ikernel"
INFO:LtmApiModel:(ikernel) Not deleting output dir (testout_EOPS/), as delete_output_dir: false, and has_generated_output_dir: false
INFO:LtmApiModel:(ikernel) Loading model from file: eops.json
DEBUG:LtmApiModel:(ikernel) Loading model from JSON
DEBUG:LtmApiModel:(ikernel) Parsing model JSON
DEBUG:Validator:(ikernel) Performing model validation
INFO:Validator:(ikernel) Model validation succeeded
DEBUG:LtmApiModel:(ikernel) LtmApiModel::maybe_generate_output_dir: has_generated_output_dir false, generate_output_dir true
INFO:LtmApiModel:(ikernel) LtmApiModel::maybe_generate_output_dir: output_path: /home/sintef/gitlab/pyltmapi/docs/ltm-api/guides/eops/testout_EOPS/2026-11-05-142842.121-EOPS-parallell
INFO:LtmApiModel:(ikernel) Using license file '/home/sintef/ltm/ltm-license.dat'
DEBUG:Validator:(ikernel) Performing model validation
INFO:Validator:(ikernel) Model validation succeeded
INFO:LtmApiModel:(ikernel) Writing model to path /home/sintef/gitlab/pyltmapi/docs/ltm-api/guides/eops/testout_EOPS/2026-11-05-142842.121-EOPS-parallell
DEBUG:LtmApiModel:(ikernel) Creating directory: /home/sintef/gitlab/pyltmapi/docs/ltm-api/guides/eops/testout_EOPS/2026-11-05-142842.121-EOPS-parallell
INFO:InflowHandler:(ikernel) Writing inflow series
DEBUG:AreaHandler:(ikernel) Checking consistency
DEBUG:LtmApiModel:(ikernel) Creating directory: /home/sintef/gitlab/pyltmapi/docs/ltm-api/guides/eops/testout_EOPS/2026-11-05-142842.121-EOPS-parallell
DEBUG:EnergyInflowHandler:(ikernel) Writing energy inflow series
DEBUG:Validator:(ikernel) Performing model validation
INFO:Validator:(ikernel) Model validation succeeded
DEBUG:LtmApiModel:(ikernel) Running command: "eops"
DEBUG:LtmApiModel:(ikernel) Configured stop words: "kritisk,critical,error,feil"
DEBUG:LtmApiModel:(ikernel) Command "eops LtmSystem_EOPS.xml" exited with code 0. Duration: 0.556798019s
INFO:LtmApiModel:(ikernel) Model executed successfully
DEBUG:matplotlib.pyplot:Loaded backend module://matplotlib_inline.backend_inline version unknown.
DEBUG:matplotlib.pyplot:Loaded backend module://matplotlib_inline.backend_inline version unknown.
DEBUG:matplotlib.font_manager:findfont: Matching sans\-serif:style=normal:variant=normal:weight=normal:stretch=normal:size=10.0.
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmr10.ttf', name='cmr10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymBol.ttf', name='STIXSizeThreeSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymBol.ttf', name='STIXSizeOneSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralBol.ttf', name='STIXGeneral', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansDisplay.ttf', name='DejaVu Sans Display', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-BoldOblique.ttf', name='DejaVu Sans Mono', style='oblique', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmex10.ttf', name='cmex10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralBolIta.ttf', name='STIXGeneral', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Oblique.ttf', name='DejaVu Sans', style='oblique', variant='normal', weight=400, stretch='normal', size='scalable')) = 1.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmmi10.ttf', name='cmmi10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-Bold.ttf', name='DejaVu Serif', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymBol.ttf', name='STIXSizeFourSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono.ttf', name='DejaVu Sans Mono', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Bold.ttf', name='DejaVu Sans', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 0.33499999999999996
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-Oblique.ttf', name='DejaVu Sans Mono', style='oblique', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-Bold.ttf', name='DejaVu Sans Mono', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif.ttf', name='DejaVu Serif', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmsy10.ttf', name='cmsy10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBol.ttf', name='STIXNonUnicode', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmb10.ttf', name='cmb10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-BoldOblique.ttf', name='DejaVu Sans', style='oblique', variant='normal', weight=700, stretch='normal', size='scalable')) = 1.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBolIta.ttf', name='STIXNonUnicode', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf', name='DejaVu Sans', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 0.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymReg.ttf', name='STIXSizeFourSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmtt10.ttf', name='cmtt10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFiveSymReg.ttf', name='STIXSizeFiveSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymReg.ttf', name='STIXSizeThreeSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-BoldItalic.ttf', name='DejaVu Serif', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymBol.ttf', name='STIXSizeTwoSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmss10.ttf', name='cmss10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-Italic.ttf', name='DejaVu Serif', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymReg.ttf', name='STIXSizeTwoSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerifDisplay.ttf', name='DejaVu Serif Display', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymReg.ttf', name='STIXSizeOneSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralItalic.ttf', name='STIXGeneral', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneral.ttf', name='STIXGeneral', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniIta.ttf', name='STIXNonUnicode', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUni.ttf', name='STIXNonUnicode', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: Matching sans\-serif:style=normal:variant=normal:weight=normal:stretch=normal:size=10.0 to DejaVu Sans ('/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf') with score of 0.050000.
DEBUG:matplotlib.font_manager:findfont: Matching sans\-serif:style=normal:variant=normal:weight=normal:stretch=normal:size=12.0.
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmr10.ttf', name='cmr10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymBol.ttf', name='STIXSizeThreeSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymBol.ttf', name='STIXSizeOneSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralBol.ttf', name='STIXGeneral', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansDisplay.ttf', name='DejaVu Sans Display', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-BoldOblique.ttf', name='DejaVu Sans Mono', style='oblique', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmex10.ttf', name='cmex10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralBolIta.ttf', name='STIXGeneral', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Oblique.ttf', name='DejaVu Sans', style='oblique', variant='normal', weight=400, stretch='normal', size='scalable')) = 1.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmmi10.ttf', name='cmmi10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-Bold.ttf', name='DejaVu Serif', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymBol.ttf', name='STIXSizeFourSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono.ttf', name='DejaVu Sans Mono', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Bold.ttf', name='DejaVu Sans', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 0.33499999999999996
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-Oblique.ttf', name='DejaVu Sans Mono', style='oblique', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSansMono-Bold.ttf', name='DejaVu Sans Mono', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif.ttf', name='DejaVu Serif', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmsy10.ttf', name='cmsy10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBol.ttf', name='STIXNonUnicode', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmb10.ttf', name='cmb10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-BoldOblique.ttf', name='DejaVu Sans', style='oblique', variant='normal', weight=700, stretch='normal', size='scalable')) = 1.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBolIta.ttf', name='STIXNonUnicode', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf', name='DejaVu Sans', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 0.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymReg.ttf', name='STIXSizeFourSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmtt10.ttf', name='cmtt10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFiveSymReg.ttf', name='STIXSizeFiveSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymReg.ttf', name='STIXSizeThreeSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-BoldItalic.ttf', name='DejaVu Serif', style='italic', variant='normal', weight=700, stretch='normal', size='scalable')) = 11.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymBol.ttf', name='STIXSizeTwoSym', style='normal', variant='normal', weight=700, stretch='normal', size='scalable')) = 10.335
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/cmss10.ttf', name='cmss10', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerif-Italic.ttf', name='DejaVu Serif', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymReg.ttf', name='STIXSizeTwoSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSerifDisplay.ttf', name='DejaVu Serif Display', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymReg.ttf', name='STIXSizeOneSym', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralItalic.ttf', name='STIXGeneral', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneral.ttf', name='STIXGeneral', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniIta.ttf', name='STIXNonUnicode', style='italic', variant='normal', weight=400, stretch='normal', size='scalable')) = 11.05
DEBUG:matplotlib.font_manager:findfont: score(FontEntry(fname='/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUni.ttf', name='STIXNonUnicode', style='normal', variant='normal', weight=400, stretch='normal', size='scalable')) = 10.05
DEBUG:matplotlib.font_manager:findfont: Matching sans\-serif:style=normal:variant=normal:weight=normal:stretch=normal:size=12.0 to DejaVu Sans ('/home/sintef/gitlab/venv-3.14/lib/python3.14/site-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans.ttf') with score of 0.050000.
area/numedal
hydraulic_coupling/plant_coupling_100
hc.station_joined:              True
hc.have_hydraulic_flow_results: True
../../../_images/ltm-api_guides_eops_eops-example-run_2_2.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_3.png
hydraulic_coupling/coupling_200
hc.station_joined:              False
hc.have_hydraulic_flow_results: True
../../../_images/ltm-api_guides_eops_eops-example-run_2_5.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_6.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_7.png
DEBUG:matplotlib.colorbar:locator: <matplotlib.ticker.FixedLocator object at 0x7f68bcd84440>
Area: numedal
../../../_images/ltm-api_guides_eops_eops-example-run_2_10.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_11.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_12.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_13.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_14.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_15.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_16.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_17.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_18.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_19.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_20.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_21.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_22.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_23.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_24.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_25.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_26.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_27.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_28.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_29.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_30.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_31.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_32.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_33.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_34.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_35.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_36.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_37.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_38.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_39.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_40.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_41.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_42.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_43.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_44.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_45.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_46.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_47.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_48.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_49.png
../../../_images/ltm-api_guides_eops_eops-example-run_2_50.png
INFO:LtmApiModel:(ikernel) Not deleting output dir (/home/sintef/gitlab/pyltmapi/docs/ltm-api/guides/eops/testout_EOPS/2026-11-05-142842.121-EOPS-parallell), as delete_output_dir: false, and has_generated_output_dir: true
[3]:
import subprocess

with LtmSession(
    "ikernel", ltm_core_path=ltm_core_path, overwrite_session=True
) as import_session:
    # konvtiltser expects `LtmSystem.xml`, symlink `LtmSystem_EOPS.xml` to `LtmSystem.XML`
    os.symlink(f"{output_path}/LtmSystem_EOPS.xml", f"{output_path}/LtmSystem.XML")
    subprocess.run(f"konvtiltser", cwd=output_path)

    # Import runtime directory
    import_session.import_directory(output_path)

    # Dump the model to a new directory
    import_session.dump_model("eops-dump-out")
DEBUG:LtmApiModule:(ikernel) Session created: "ikernel"
INFO:LtmApiModel:(ikernel) Starting import from classic LTM folder '/home/sintef/gitlab/pyltmapi/docs/ltm-api/guides/eops/testout_EOPS/2026-11-05-142842.121-EOPS-parallell'
INFO:LtmApiModel:(ikernel) Importing EOPS dataset from '/home/sintef/gitlab/pyltmapi/docs/ltm-api/guides/eops/testout_EOPS/2026-11-05-142842.121-EOPS-parallell'
INFO:LtmApiModel:(ikernel) Importing market description from 'numedal.ENMD'
INFO:DetdImporter:(ikernel) Starting import of system 'numedal'
INFO:DetdImporter:(ikernel)  - Importing reservoir 'VITTINGFOSS'
INFO:DetdImporter:(ikernel)  - Importing reservoir 'mid1'
INFO:DetdImporter:(ikernel)  - Importing reservoir 'coupl_mid2'
INFO:DetdImporter:(ikernel)  - Importing reservoir 'LABRO'
INFO:DetdImporter:(ikernel)  - Importing reservoir 'mid2'
INFO:DetdImporter:(ikernel)  - Importing reservoir 'STORFALL'
INFO:DetdImporter:(ikernel)  - Importing reservoir 'mid3'
INFO:DetdImporter:(ikernel)  - Importing reservoir 'BLASJO'
INFO:DetdImporter:(ikernel)  - Importing reservoir 'coupl_mid3'
INFO:DetdImporter:(ikernel)  - Importing reservoir 'coupl_mid1'
INFO:DetdImporter:(ikernel)  - Importing hydraulic coupling 'plant_coupling_100' of type 100
INFO:DetdImporter:(ikernel) Importing system numedal
INFO:LtmApiModel:(ikernel) Importing Historical series 'constant'
INFO:LtmApiModel:(ikernel) Recalculated average yearly inflow from 1.00 (1979.01.01-1988.12.31) to 1.00 (1979.01.01-1988.12.31) for module mid1
INFO:LtmApiModel:(ikernel) Done importing 'constant'
INFO:LtmApiModel:(ikernel) Importing Historical series 'regulated_inflow_BLASJO'
INFO:LtmApiModel:(ikernel) Recalculated average yearly inflow from 6.36 (1979.01.01-1988.12.31) to 6.36 (1979.01.01-1988.12.31) for module BLASJO
INFO:LtmApiModel:(ikernel) Done importing 'regulated_inflow_BLA'
INFO:LtmApiModel:(ikernel) Importing Historical series 'regulated_inflow_LABRO'
INFO:LtmApiModel:(ikernel) Recalculated average yearly inflow from 6.36 (1979.01.01-1988.12.31) to 6.36 (1979.01.01-1988.12.31) for module LABRO
INFO:LtmApiModel:(ikernel) Done importing 'regulated_inflow_LAB'
INFO:LtmApiModel:(ikernel) Importing Historical series 'regulated_inflow_STORFALL'
INFO:LtmApiModel:(ikernel) Recalculated average yearly inflow from 6.36 (1979.01.01-1988.12.31) to 6.36 (1979.01.01-1988.12.31) for module STORFALL
INFO:LtmApiModel:(ikernel) Done importing 'regulated_inflow_STO'
INFO:LtmApiModel:(ikernel) Importing Historical series 'regulated_inflow_VITTINGFOSS'
INFO:LtmApiModel:(ikernel) Recalculated average yearly inflow from 6.36 (1979.01.01-1988.12.31) to 6.36 (1979.01.01-1988.12.31) for module VITTINGFOSS
INFO:LtmApiModel:(ikernel) Done importing 'regulated_inflow_VIT'
INFO:LtmApiModel:(ikernel) Importing Historical series 'small'
INFO:LtmApiModel:(ikernel) Recalculated average yearly inflow from 0.00 (1979.01.01-1988.12.31) to 0.00 (1979.01.01-1988.12.31) for module mid1-plant
INFO:LtmApiModel:(ikernel) Done importing 'small'
INFO:LtmApiModel:(ikernel) Importing Historical series 'unregulated_inflow_BLASJO_plant'
INFO:LtmApiModel:(ikernel) Recalculated average yearly inflow from 0.64 (1979.01.01-1988.12.31) to 0.64 (1979.01.01-1988.12.31) for module BLASJO-plant
INFO:LtmApiModel:(ikernel) Done importing 'unregulated_inflow_B'
INFO:LtmApiModel:(ikernel) Importing Historical series 'unregulated_inflow_LABRO_plant'
INFO:LtmApiModel:(ikernel) Recalculated average yearly inflow from 0.64 (1979.01.01-1988.12.31) to 0.64 (1979.01.01-1988.12.31) for module LABRO-plant
INFO:LtmApiModel:(ikernel) Done importing 'unregulated_inflow_L'
INFO:LtmApiModel:(ikernel) Importing Historical series 'unregulated_inflow_STORFALL_plant'
INFO:LtmApiModel:(ikernel) Recalculated average yearly inflow from 0.64 (1979.01.01-1988.12.31) to 0.64 (1979.01.01-1988.12.31) for module STORFALL-plant
INFO:LtmApiModel:(ikernel) Done importing 'unregulated_inflow_S'
INFO:LtmApiModel:(ikernel) Importing Historical series 'unregulated_inflow_VITTINGFOSS_plant'
INFO:LtmApiModel:(ikernel) Recalculated average yearly inflow from 0.64 (1979.01.01-1988.12.31) to 0.64 (1979.01.01-1988.12.31) for module VITTINGFOSS-plant
INFO:LtmApiModel:(ikernel) Done importing 'unregulated_inflow_V'
INFO:LtmApiModel:(ikernel) Not deleting output dir (), as delete_output_dir: false, and has_generated_output_dir: false
INFO:LtmApiModel:(ikernel) Not deleting output dir (), as delete_output_dir: false, and has_generated_output_dir: false


   ::::: :: ::   :: :::::: :::::: ::::::
  ::     :: :::  ::   ::   ::     ::
   ::::  :: :: : ::   ::   ::::   ::::
      :: :: ::  :::   ::   ::     ::
  :::::  :: ::   ::   ::   :::::: ::    Energi AS

  KONVTILTSER - R10.18.0/Release/1a9a23166 - 2026-10-30
  -------------------------------------------------------------------
  Brukerveiledning..: LTM v10
  SINTEF Support....: support.energy@sintef.no, Tel: 40471700/Senb: 45456000
  Kj�retidspunkt....:  5. november 2026, kl 15:28:48



 -> logfile_with_path: logfiles/konvtiltser.log

 -> Creating directory: logfiles

 -> Moving file konvtiltser.log to directory logfiles
 WARNING: Reading ENMIN values from file: numedal.ENMIN

 -> Managed to successfully read an EOPS dataset.

 -> Clean up internal files that have to be removed ...

 -> Backup directory for the original ENMD-files: ENMD_OPPR

 -> Creating directory: ENMD_OPPR

 -> For the EOPS area convert all ENMD contracts to h5 timeseries.

 -> Area : 0    : numedal.ENMD

 -> Backup copy of the wanted file to the directory: ENMD_OPPR

 -> Convert to ts-contracts and save to h5-file.
 WARNING: Reading ENMIN values from file: numedal.ENMIN
 WARNING: Reading ENMIN values from file: numedal.ENMIN