Battery.java

/**
 * Copyright (c) 2019, RTE (http://www.rte-france.com)
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 * SPDX-License-Identifier: MPL-2.0
 */
package com.powsybl.iidm.network;

/**
 * A battery system.
 *
 * <p>
 *  Characteristics
 * </p>
 *
 * <table style="border: 1px solid black; border-collapse: collapse">
 *     <thead>
 *         <tr>
 *             <th style="border: 1px solid black">Attribute</th>
 *             <th style="border: 1px solid black">Type</th>
 *             <th style="border: 1px solid black">Unit</th>
 *             <th style="border: 1px solid black">Required</th>
 *             <th style="border: 1px solid black">Default value</th>
 *             <th style="border: 1px solid black">Description</th>
 *         </tr>
 *     </thead>
 *     <tbody>
 *         <tr>
 *             <td style="border: 1px solid black">Id</td>
 *             <td style="border: 1px solid black">String</td>
 *             <td style="border: 1px solid black"> - </td>
 *             <td style="border: 1px solid black">yes</td>
 *             <td style="border: 1px solid black"> - </td>
 *             <td style="border: 1px solid black">Unique identifier of the battery</td>
 *         </tr>
 *         <tr>
 *             <td style="border: 1px solid black">Name</td>
 *             <td style="border: 1px solid black">String</td>
 *             <td style="border: 1px solid black">-</td>
 *             <td style="border: 1px solid black">yes</td>
 *             <td style="border: 1px solid black"> - </td>
 *             <td style="border: 1px solid black">Human-readable name of the battery</td>
 *         </tr>
 *         <tr>
 *             <td style="border: 1px solid black">TargetP</td>
 *             <td style="border: 1px solid black">double</td>
 *             <td style="border: 1px solid black">MW</td>
 *             <td style="border: 1px solid black">yes</td>
 *             <td style="border: 1px solid black"> - </td>
 *             <td style="border: 1px solid black">The active power target</td>
 *         </tr>
 *         <tr>
 *             <td style="border: 1px solid black">TargetQ</td>
 *             <td style="border: 1px solid black">double</td>
 *             <td style="border: 1px solid black">MVar</td>
 *             <td style="border: 1px solid black">yes</td>
 *             <td style="border: 1px solid black"> - </td>
 *             <td style="border: 1px solid black">The reactive power target</td>
 *         </tr>
 *         <tr>
 *             <td style="border: 1px solid black">MinP</td>
 *             <td style="border: 1px solid black">double</td>
 *             <td style="border: 1px solid black">MW</td>
 *             <td style="border: 1px solid black">yes</td>
 *             <td style="border: 1px solid black"> - </td>
 *             <td style="border: 1px solid black">The minimum active power (charging limit)</td>
 *         </tr>
 *         <tr>
 *             <td style="border: 1px solid black">MaxP</td>
 *             <td style="border: 1px solid black">double</td>
 *             <td style="border: 1px solid black">MW</td>
 *             <td style="border: 1px solid black">yes</td>
 *             <td style="border: 1px solid black"> - </td>
 *             <td style="border: 1px solid black">The maximum active power (discharging limit)</td>
 *         </tr>
 *         <tr>
 *             <td style="border: 1px solid black">ReactiveLimits</td>
 *             <td style="border: 1px solid black">-</td>
 *             <td style="border: 1px solid black">-</td>
 *             <td style="border: 1px solid black">no</td>
 *             <td style="border: 1px solid black">min/max</td>
 *             <td style="border: 1px solid black">Operational limits of the battery (P/Q/U diagram)</td>
 *         </tr>
 *     </tbody>
 * </table>
 *
 * <p>
 * To create a battery, see {@link BatteryAdder}
 *
 * @author Ghiles Abdellah {@literal <ghiles.abdellah at rte-france.com>}
 * @see BatteryAdder
 * @see MinMaxReactiveLimits
 * @see ReactiveCapabilityCurve
 */
public interface Battery extends Injection<Battery>, ReactiveLimitsHolder {

    /**
     * @deprecated Use {@link #getTargetP()} instead.
     */
    @Deprecated(since = "4.9.0")
    default double getP0() {
        return getTargetP();
    }

    /**
     * Get the target active power in MW.
     * <p>Depends on the working variant.
     * @see VariantManager
     */
    double getTargetP();

    /**
     * @deprecated Use {@link #setTargetP(double)} instead.
     */
    @Deprecated(since = "4.9.0")
    default Battery setP0(double p0) {
        return setTargetP(p0);
    }

    /**
     * Set the target active power in MW.
     * <p>Depends on the working variant.
     * @see VariantManager
     */
    Battery setTargetP(double targetP);

    /**
     * @deprecated Use {@link #getTargetQ()} instead.
     */
    @Deprecated(since = "4.9.0")
    default double getQ0() {
        return getTargetQ();
    }

    /**
     * Get the target reactive power in MVar.
     * <p>Depends on the working variant.
     * @see VariantManager
     */
    double getTargetQ();

    /**
     * @deprecated Use {@link #setTargetP(double)} instead.
     */
    @Deprecated(since = "4.9.0")
    default Battery setQ0(double q0) {
        return setTargetQ(q0);
    }

    /**
     * Set the target reactive power in MVar.
     * <p>Depends on the working variant.
     * @see VariantManager
     */
    Battery setTargetQ(double targetQ);

    /**
     * Get the minimal active power in MW.
     */
    double getMinP();

    /**
     * Set the minimal active power in MW.
     */
    Battery setMinP(double minP);

    /**
     * Get the maximal active power in MW.
     */
    double getMaxP();

    /**
     * Set the maximal active power in MW.
     */
    Battery setMaxP(double maxP);

    @Override
    default IdentifiableType getType() {
        return IdentifiableType.BATTERY;
    }
}