Source code for VeraGridEngine.DataStructures.battery_data

# 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 https://mozilla.org/MPL/2.0/.
# SPDX-License-Identifier: MPL-2.0

import numpy as np
from VeraGridEngine.DataStructures.generator_data import GeneratorData
from VeraGridEngine.basic_structures import Vec, IntVec


[docs] class BatteryData(GeneratorData): """ Structure to host the battery compiled data """ def __init__(self, nelm: int, nbus: int): """ Battery data arrays :param nelm: number of batteries :param nbus: number of buses """ GeneratorData.__init__(self, nelm=nelm, nbus=nbus) self.enom: Vec = np.zeros(nelm) self.e_min: Vec = np.zeros(nelm) self.e_max: Vec = np.zeros(nelm) self.min_soc: Vec = np.zeros(nelm) self.max_soc: Vec = np.ones(nelm) self.soc_0: Vec = np.ones(nelm) self.discharge_efficiency: Vec = np.ones(nelm) self.charge_efficiency: Vec = np.ones(nelm) self.efficiency: Vec = np.ones(nelm)
[docs] def slice(self, elm_idx: IntVec, bus_idx: IntVec, bus_map: IntVec) -> "BatteryData": """ Slice battery data by given indices :param elm_idx: array of element indices :param bus_idx: array of bus indices :param bus_map: map from bus to index :return: new BatteryData instance """ data: BatteryData = super().slice(elm_idx, bus_idx, bus_map) data.__class__ = BatteryData data.enom = self.enom[elm_idx] data.e_min = self.e_min[elm_idx] data.e_max = self.e_max[elm_idx] data.min_soc = self.min_soc[elm_idx] data.max_soc = self.max_soc[elm_idx] data.soc_0 = self.soc_0[elm_idx] data.discharge_efficiency = self.discharge_efficiency[elm_idx] data.charge_efficiency = self.charge_efficiency[elm_idx] data.efficiency = self.efficiency[elm_idx] return data
[docs] def copy(self) -> "BatteryData": """ Get a deep copy of this object :return: new BatteryData instance """ data: BatteryData = super().copy() data.__class__ = BatteryData data.enom = self.enom.copy() data.e_min = self.e_min.copy() data.e_max = self.e_max.copy() data.min_soc = self.min_soc.copy() data.max_soc = self.max_soc.copy() data.soc_0 = self.soc_0.copy() data.discharge_efficiency = self.discharge_efficiency.copy() data.charge_efficiency = self.charge_efficiency.copy() data.efficiency = self.efficiency.copy() return data