.. _emps-fbmc-input: ================================================= Creating the EMPS FBMC input file from the LtmApi ================================================= This is a guide for creating the input file for the FBMC functionality for the EMPS. The guide is valid from pyltm release 0.25.3. and is still experimental. The following steps are necessary: 1. Minimal import of an existing CLI LTM v10 dataset. 2. Dump the imported model (``model.json``) and timeseries (``timeseries.h5``). 3. Define FBMC objects in the ``model.json`` file (see the :ref:`fbmc`) 4. Load and write EMPS files and the input file `ptdf_constraints.h5` to a directory Minimal import ============== A minimal import of an EMPS CLI v10 dataset is necessary for creating FBMC input file ptdf_constraints.h5, (see prerequisites for importing a CLI LTM v10 dataset :ref:`import-directory`). The necessary files include: - MASKENETT.DATA and cap_file.h5 - LtmSystem.xml - .ENMD All importer options can be turned off for a minimal import, as shown in the example. .. code:: python path = "/path/to/ltm/runtime/directory" session.import_directory(path,import_market_steps=False,import_loads=False, recalculate_average_yearly_inflow=False,import_detailed_hydro=False,import_wind=False) Dumping the model ================= Dump the model and timeseries to files with the following method. .. code:: python session.dump_model(path,model_filename="minimal_model.json",timeseries_filename="timeseries.h5") These files can be used a starting point for creating the FBMC input. Check that the minimal_model.json file contains the object keys: - ``global_settings`` - ``areas`` - ``dclines`` - ``connections`` In ``global_settings`` find the key ``timesteps_per_week`` and adjust it to your dataset's time resolution. Define the FBMC parameters ========================== It is recommended to read the sections :ref:`fbmc` and :ref:`fbmc-included` as an introduction. Necessary input: 1. Mapping of emps areas in bidding zones. .. collapse:: Bidding Zones :open: .. code-block:: json "bidding_zones": [ { "#comment": "numedal", "name": "N1", "is_fbmc": true }, { "#comment": "tev and battery", "name": "N2", "is_fbmc": true }, { "#comment": "otra", "name": "N3", "is_fbmc": true }, { "#comment": "HVDC numedal", "name": "N1_hvdc", "is_fbmc": true }, { "#comment": "HVDC tev", "name": "N2_hvdc", "is_fbmc": true }, { "#comment": "HVDC otra", "name": "N3_hvdc", "is_fbmc": true } ], 2. Exogenous FBMC domain parameters must be provided as ``cnes``: - RAM - Zone-to-slack PTDFs for relevant bidding zones .. collapse:: CNEs .. code-block:: json "cnes": [ { "name": "N1-N2", "cnecName": "Test1", "biddingZoneFrom": "N1", "biddingZoneTo": "N2", "active": { "name": "", "timestamps": [ "2025-02-13T00:00:00Z" ], "scenarios": [ [ 1 ] ] }, "ram": { "name": "", "timestamps": [ "2025-02-13T00:00:00Z" ], "scenarios": [ [ 20.0 ] ] }, "ptdf": { "N1": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.33333, 0.33333 ] ] }, "N2": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ -0.33333, -0.33333 ] ] }, "N3": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N1_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.33333, 0.33333 ] ] }, "N2_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ -0.33333, -0.33333 ] ] }, "N3_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] } } }, { "name": "N2-N3", "cnecName": "Test2", "biddingZoneFrom": "N2", "biddingZoneTo": "N3", "active": { "name": "", "timestamps": [ "2025-02-13T00:00:00Z" ], "scenarios": [ [ 1 ] ] }, "ram": { "name": "", "timestamps": [ "2025-02-13T00:00:00Z" ], "scenarios": [ [ 20.0 ] ] }, "ptdf": { "N1": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.33333, 0.33333 ] ] }, "N2": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.66666, 0.66666 ] ] }, "N3": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N1_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.33333, 0.33333 ] ] }, "N2_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.66666, 0.66666 ] ] }, "N3_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] } } }, { "name": "N3-N1", "cnecName": "Test3", "biddingZoneFrom": "N3", "biddingZoneTo": "N1", "active": { "name": "", "timestamps": [ "2025-02-13T00:00:00Z" ], "scenarios": [ [ 1 ] ] }, "ram": { "name": "", "timestamps": [ "2025-02-13T00:00:00Z" ], "scenarios": [ [ 20.0 ] ] }, "ptdf": { "N1": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ -0.66666, -0.66666 ] ] }, "N2": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ -0.33333, -0.33333 ] ] }, "N3": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N1_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ -0.66666, -0.66666 ] ] }, "N2_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ -0.33333, -0.33333 ] ] }, "N3_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] } } }, { "name": "N1_HVDC-N1", "cnecName": "Test3", "biddingZoneFrom": "N1_HVDC", "biddingZoneTo": "N1", "active": { "name": "", "timestamps": [ "2025-02-13T00:00:00Z" ], "scenarios": [ [ 1 ] ] }, "ram": { "name": "", "timestamps": [ "2025-02-13T00:00:00Z" ], "scenarios": [ [ 20.0 ] ] }, "ptdf": { "N1": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N2": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N3": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N1_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 1.0, 1.0 ] ] }, "N2_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N3_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] } } }, { "name": "N2_HVDC-N2", "cnecName": "Test3", "biddingZoneFrom": "N2_HVDC", "biddingZoneTo": "N2", "active": { "name": "", "timestamps": [ "2025-02-13T00:00:00Z" ], "scenarios": [ [ 1 ] ] }, "ram": { "name": "", "timestamps": [ "2025-02-13T00:00:00Z" ], "scenarios": [ [ 20.0 ] ] }, "ptdf": { "N1": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N2": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N3": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N1_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N2_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 1.0, 1.0 ] ] }, "N3_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] } } }, { "name": "N3_HVDC-N3", "cnecName": "Test3", "biddingZoneFrom": "N3_HVDC", "biddingZoneTo": "N3", "active": { "name": "", "timestamps": [ "2025-02-13T00:00:00Z" ], "scenarios": [ [ 1 ] ] }, "ram": { "name": "", "timestamps": [ "2025-02-13T00:00:00Z" ], "scenarios": [ [ 20.0 ] ] }, "ptdf": { "N1": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N2": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N3": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N1_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N2_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 0.0, 0.0 ] ] }, "N3_HVDC": { "timestamps": [ "2025-02-12T23:00:00Z", "2025-02-13T00:00:00Z" ], "scenarios": [ [ 1.0, 1.0 ] ] } } } ] The FBMC parameters can be provided by for example a calculator as the ``Småstein`` project or obtain from the JAO publication tool https://publicationtool.jao.eu/nordic/api/. If using an input file from the JAO publication tool obtained through their API is used, the input file can be referenced in ``global_settings`` and the LtmApi will read the file. .. code:: json "global_settings": { "jao_data_source": "test_jao_2hour.json" } .. note:: Disclaimer: If the input structure from the JAO API changes, please inform SINTEF and we can adjust the file-parser. We get no automatic notice of such changes. Load and write model ==================== To create the EMPS FBMC input file ``ptdf_constraints.h5`` see example below: .. code:: python # Load model from file. session.load(filename="minimal_model.json") # Write model to disk, and automatically generate an output directory. session.write_model() Check the output directory to obtain the input file.