{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Live LTM - minimal version\n", "\n", "This notebook creates a model by using only the Python interface without any input files." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2026-11-05T14:25:52.122230Z", "iopub.status.busy": "2026-11-05T14:25:52.122065Z", "iopub.status.idle": "2026-11-05T14:25:52.834820Z", "shell.execute_reply": "2026-11-05T14:25:52.833843Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Success\n" ] } ], "source": [ "import os\n", "from pyltmapi import LtmSession\n", "from pyltm import util, Area, DCLine, Load, AggregatedHydroModule, Inflow, MarketStep\n", "from pathlib import Path\n", "\n", "# import logging\n", "# logging.basicConfig(level=logging.DEBUG)\n", "\n", "ltm_core_path = os.environ.get(\n", " \"LTM_CORE_PATH\", str(Path(\"~\").expanduser().joinpath(\"ltm/release/bin/\"))\n", ")\n", "license_file = os.environ.get(\n", " \"LTM_CORE_LICENSE_FILE\", str(Path(\"~\").expanduser().joinpath(\"ltm/ltm-license.dat\"))\n", ")\n", "\n", "sim_period = (\"2026-W01\", \"2027-W01\")\n", "hist_period = (\"1980-01-01T00:00:00Z\", \"1990-01-01T00:00:00Z\")\n", "\n", "with LtmSession(\"live_ltm_minimal\", ltm_core_path, overwrite_session=True) as session:\n", " area1 = Area(name=\"area1\")\n", " area2 = Area(\"area2\")\n", " session.model.add(area1)\n", " session.model.add(area2)\n", "\n", " dcline = DCLine(\"dcline1\")\n", " dcline.forward_capacity = util.make_constant_txy(200)\n", " dcline.backward_capacity = util.make_constant_txy(200)\n", " session.model.add(dcline)\n", "\n", " session.connect(area1, dcline)\n", " session.connect(dcline, area2)\n", "\n", " load1 = Load(\"load1\")\n", " load2 = Load(\"load2\")\n", " load1.capacity = util.make_constant_txy(100)\n", " load2.capacity = util.make_constant_txy(50)\n", " session.model.add(load1)\n", " session.model.add(load2)\n", "\n", " session.connect(load1, area1)\n", " session.connect(load2, area2)\n", "\n", " constant = Inflow(\"constant\")\n", " constant.series = util.make_constant_txy(1.0)\n", " session.model.add(constant)\n", "\n", " aggregated = AggregatedHydroModule(\"aggregated_hydro\")\n", " aggregated.lower_production_limits = util.make_constant_txy(1.0)\n", " aggregated.upper_production_limits = util.make_constant_txy(100.0)\n", " aggregated.lower_reservoir_limits = util.make_constant_txy(0.1)\n", " aggregated.upper_reservoir_limits = util.make_constant_txy(10000.0)\n", " aggregated.regulated_power_inflow = util.make_constant_txy(350.0, 10)\n", " aggregated.unregulated_power_inflow = util.make_constant_txy(50.0, 10)\n", " aggregated.reservoir_energy = 10000\n", " aggregated.start_reservoir_energy = 100\n", " aggregated.station_power = 100\n", " session.model.add(aggregated)\n", " session.connect(aggregated, area2)\n", "\n", " ms = MarketStep(\"market_step\")\n", " ms.price = util.make_constant_txy(260.0)\n", " ms.capacity = util.make_constant_txy(150.0)\n", " session.model.add(ms)\n", " session.connect(ms, area1)\n", "\n", " session.model.global_settings.output_path = \"live_minimal_run\"\n", " session.model.global_settings.ltm_license_file_path = license_file\n", "\n", " session.model.global_settings.simulation_period = util.make_txy_period(*sim_period)\n", " session.model.global_settings.historical_period = util.make_txy_period(*hist_period)\n", " session.model.global_settings.timesteps_per_week = 56\n", "\n", " last_return_code, program_results = session.run()\n", "\n", " if last_return_code == 0:\n", " print(\"Success\")\n", " else:\n", " print(\"Failure\")\n" ] } ], "metadata": { "kernelspec": { "display_name": "venv-3.14", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.14.10" } }, "nbformat": 4, "nbformat_minor": 2 }