
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "drive_examples/gradnet/plot_6kw_pmsyrm_flux_map_meas.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_drive_examples_gradnet_plot_6kw_pmsyrm_flux_map_meas.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_drive_examples_gradnet_plot_6kw_pmsyrm_flux_map_meas.py:


5.6-kW PM-SyRM, train flux map, measured data
=============================================

This example trains a GradNet flux-linkage map for a four-pole 5.6-kW PM synchronous
reluctance machine (Baldor ECS101M0H7EF4) from a measured dataset.

.. GENERATED FROM PYTHON SOURCE LINES 9-17

.. code-block:: Python


    from pathlib import Path

    import numpy as np

    import motulator.drive.gradnet as gn
    from motulator.drive import utils








.. GENERATED FROM PYTHON SOURCE LINES 18-19

Set nominal and base values.

.. GENERATED FROM PYTHON SOURCE LINES 19-23

.. code-block:: Python


    nom = utils.NominalValues(U=460, I=8.8, f=60, P=5.6e3, tau=29.7)
    base = utils.BaseValues.from_nominal(nom, n_p=2)








.. GENERATED FROM PYTHON SOURCE LINES 24-25

Set up the paths and parameters.

.. GENERATED FROM PYTHON SOURCE LINES 25-33

.. code-block:: Python


    p = Path(__file__).resolve().parent if "__file__" in globals() else Path.cwd()

    dataset_path = p / "datasets/baldor_meas.npz"
    trained_path = p / "trained_models/baldor_meas_flux_map_pnorm_d6_sub10.pth"
    subsample = 10
    activation = gn.PNormGradient








.. GENERATED FROM PYTHON SOURCE LINES 34-35

Train the model.

.. GENERATED FROM PYTHON SOURCE LINES 35-48

.. code-block:: Python


    if not trained_path.exists():
        gn.train_gradnet(
            dataset_path=dataset_path,
            base=base,
            save_model_path=trained_path,
            is_flux_map=True,
            embed_dim=6,
            epochs=20000,
            subsample=subsample,
            activation=activation,
        )








.. GENERATED FROM PYTHON SOURCE LINES 49-50

Create the GradNet model and its callable.

.. GENERATED FROM PYTHON SOURCE LINES 50-54

.. code-block:: Python


    model = gn.load_gradnet(trained_path, activation=activation)
    flux_map_fcn = gn.FluxMap(model)








.. GENERATED FROM PYTHON SOURCE LINES 55-56

Load the dataset for comparison and split it into training and validation sets.

.. GENERATED FROM PYTHON SOURCE LINES 56-61

.. code-block:: Python


    train_data, val_data = gn.get_training_data(
        str(dataset_path), base=base, subsample=subsample
    )








.. GENERATED FROM PYTHON SOURCE LINES 62-63

Plot the flux map.

.. GENERATED FROM PYTHON SOURCE LINES 63-99

.. code-block:: Python


    # Sample the map on a grid for plotting
    flux_map = gn.sample_map_on_grid(
        flux_map_fcn,
        map_type="flux_map",
        d_range=np.linspace(-2, 2, 50) * base.i,
        q_range=np.linspace(-2.5, 2.5, 50) * base.i,
    )

    # Constant current contours corresponding to the measured dataset, for visualization
    i_d_levels = np.arange(-20, 22, 2) / base.i
    i_q_levels = np.arange(-26, 28, 2) / base.i
    current_loci_levels = (i_d_levels, i_q_levels)

    gn.plot_maps(
        flux_map,
        "d",
        base,
        current_loci=True,
        lims={"x": (-2, 2), "y": (-2.5, 2.5), "z": (0, 1)},
        ticks={"x": [-2, -1, 0, 1, 2], "y": [-2, -1, 0, 1, 2], "z": [0, 0.5, 1]},
        raw_data=[val_data, train_data],
        current_loci_levels=current_loci_levels,
    )

    gn.plot_maps(
        flux_map,
        "q",
        base,
        current_loci=True,
        lims={"x": (-2, 2), "y": (-2.5, 2.5), "z": (-1.5, 1.5)},
        ticks={"x": [-2, -1, 0, 1, 2], "y": [-2, -1, 0, 1, 2], "z": [-1.5, 0, 1.5]},
        raw_data=[val_data, train_data],
        current_loci_levels=current_loci_levels,
    )




.. rst-class:: sphx-glr-horizontal


    *

      .. image-sg:: /drive_examples/gradnet/images/sphx_glr_plot_6kw_pmsyrm_flux_map_meas_001.png
         :alt: plot 6kw pmsyrm flux map meas
         :srcset: /drive_examples/gradnet/images/sphx_glr_plot_6kw_pmsyrm_flux_map_meas_001.png
         :class: sphx-glr-multi-img

    *

      .. image-sg:: /drive_examples/gradnet/images/sphx_glr_plot_6kw_pmsyrm_flux_map_meas_002.png
         :alt: plot 6kw pmsyrm flux map meas
         :srcset: /drive_examples/gradnet/images/sphx_glr_plot_6kw_pmsyrm_flux_map_meas_002.png
         :class: sphx-glr-multi-img





.. GENERATED FROM PYTHON SOURCE LINES 100-101

Print error metrics.

.. GENERATED FROM PYTHON SOURCE LINES 101-103

.. code-block:: Python


    gn.print_flux_map_errors_meas(flux_map_fcn, val_data, base=base)




.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    Flux-map error metrics: rmse=0.015 p.u., max=0.051 p.u., std=0.009 p.u.





.. rst-class:: sphx-glr-timing

   **Total running time of the script:** (0 minutes 0.410 seconds)


.. _sphx_glr_download_drive_examples_gradnet_plot_6kw_pmsyrm_flux_map_meas.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

      :download:`Download Jupyter notebook: plot_6kw_pmsyrm_flux_map_meas.ipynb <plot_6kw_pmsyrm_flux_map_meas.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: plot_6kw_pmsyrm_flux_map_meas.py <plot_6kw_pmsyrm_flux_map_meas.py>`

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: plot_6kw_pmsyrm_flux_map_meas.zip <plot_6kw_pmsyrm_flux_map_meas.zip>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
