예제 #1
0
    def mdl(self, result_type: ResultTypes):
        """
        Plot the results
        :param result_type:
        :return:
        """

        index = self.branch_names

        if result_type == ResultTypes.BusVoltageModule:
            data = np.abs(self.voltage)
            y_label = '(p.u.)'
            title = 'Bus voltage '
            labels = self.bus_names
            # index = self.branch_names

        elif result_type == ResultTypes.BusVoltageAngle:
            data = np.angle(self.voltage, deg=True)
            y_label = '(Deg)'
            title = 'Bus voltage '
            labels = self.bus_names
            # index = self.branch_names

        elif result_type == ResultTypes.BusActivePower:
            data = self.S.real
            y_label = '(MW)'
            title = 'Bus active power '
            labels = self.bus_names
            # index = self.branch_names

        elif result_type == ResultTypes.BranchActivePowerFrom:
            data = self.Sf.real
            y_label = 'MW'
            title = 'Branch active power '
            labels = ['# ' + x for x in self.branch_names]
            # index = self.branch_names

        elif result_type == ResultTypes.BranchLoading:
            data = self.loading.real * 100
            y_label = '(%)'
            title = 'Branch loading '
            labels = ['# ' + x for x in self.branch_names]
            # index = self.branch_names

        elif result_type == ResultTypes.OTDF:
            data = self.otdf
            y_label = 'Per unit'
            labels = ['# ' + x for x in self.branch_names]

            title = 'OTDF'
        else:
            raise Exception('Result type not understood:' + str(result_type))

        # assemble model
        mdl = ResultsModel(data=data,
                           index=index,
                           columns=labels,
                           title=title,
                           ylabel=y_label)
        return mdl
예제 #2
0
    def mdl(self, result_type: ResultTypes) -> "ResultsModel":
        """
        Get ResultsModel instance
        :param result_type:
        :return: ResultsModel instance
        """

        if result_type == ResultTypes.BusActivePower:
            labels = self.bus_names
            data = self.S
            y_label = '(MW)'
            title = 'Bus active power '

        elif result_type == ResultTypes.BranchActivePowerFrom:
            labels = self.branch_names
            data = self.Sf.real
            y_label = '(MW)'
            title = 'Branch power '

        elif result_type == ResultTypes.BranchLoading:
            labels = self.branch_names
            data = self.loading * 100
            y_label = '(%)'
            title = 'Branch loading '

        elif result_type == ResultTypes.BranchLosses:
            labels = self.branch_names
            data = self.losses
            y_label = '(MVA)'
            title = 'Branch losses'

        elif result_type == ResultTypes.BusVoltageModule:
            labels = self.bus_names
            data = self.voltage
            y_label = '(p.u.)'
            title = 'Bus voltage'

        else:
            raise Exception('Result type not understood:' + str(result_type))

        if self.time is not None:
            index = self.time
        else:
            index = list(range(data.shape[0]))

        # assemble model
        return ResultsModel(data=data,
                            index=index,
                            columns=labels,
                            title=title,
                            ylabel=y_label,
                            units=y_label)
예제 #3
0
    def mdl(self, result_type: ResultTypes):
        """
        Plot the results
        :param result_type:
        :return:
        """

        index = self.branch_names

        if result_type == ResultTypes.ContingencyFrequency:
            data = self.overload_count
            y_label = '(#)'
            title = 'Contingency count '
            labels = ['#' + x for x in self.branch_names]

        elif result_type == ResultTypes.ContingencyRelativeFrequency:
            data = self.relative_frequency
            y_label = '(p.u.)'
            title = 'Contingency relative frequency '
            labels = ['#' + x for x in self.branch_names]

        elif result_type == ResultTypes.MaxOverloads:
            data = self.max_overload
            y_label = '(#)'
            title = 'Contingency count '
            labels = ['#' + x for x in self.branch_names]

        elif result_type == ResultTypes.WorstContingencyFlows:
            data = self.worst_flows
            y_label = '(MW)'
            title = 'Worst contingency flows '
            labels = self.branch_names
            index = self.time_array

        elif result_type == ResultTypes.WorstContingencyLoading:
            data = self.worst_loading * 100.0
            y_label = '(%)'
            title = 'Worst contingency loading '
            labels = self.branch_names
            index = self.time_array

        else:
            raise Exception('Result type not understood:' + str(result_type))

        # assemble model
        mdl = ResultsModel(data=data,
                           index=index,
                           columns=labels,
                           title=title,
                           ylabel=y_label)
        return mdl
예제 #4
0
    def mdl(self, result_type: ResultTypes) -> ResultsModel:
        """
        Plot the results.

        Arguments:

            **result_type**: ResultTypes

            **indices**: Indices f the array to plot (indices of the elements)

            **names**: Names of the elements

        Returns:

            DataFrame
        """

        if result_type == ResultTypes.PTDFBranchesSensitivity:
            labels = self.br_names
            y = self.flows_sensitivity_matrix
            y_label = '(p.u.)'
            title = 'Branches sensitivity'

        elif result_type == ResultTypes.PTDFBusVoltageSensitivity:
            labels = self.bus_names
            y = self.voltage_sensitivity_matrix
            y_label = '(p.u.)'
            title = 'Buses voltage sensitivity'

        else:
            labels = []
            y = np.zeros(0)
            y_label = ''
            title = ''

        # assemble model
        mdl = ResultsModel(data=y,
                           index=self.get_var_names(),
                           columns=labels,
                           title=title,
                           ylabel=y_label,
                           units=y_label)
        return mdl
예제 #5
0
    def mdl(self, result_type: ResultTypes) -> ResultsModel:
        """
        Plot the results.

        Arguments:

            **result_type**: ResultTypes

        Returns: ResultsModel
        """

        if result_type == ResultTypes.PTDFBranchesSensitivity:
            labels = self.bus_names
            y = self.PTDF
            y_label = '(p.u.)'
            title = 'Branches sensitivity'

        elif result_type == ResultTypes.OTDF:
            labels = self.br_names
            y = self.LODF
            y_label = '(p.u.)'
            title = 'Branch failure sensitivity'

        else:
            labels = []
            y = np.zeros(0)
            y_label = ''
            title = ''

        # assemble model
        mdl = ResultsModel(data=y,
                           index=self.br_names,
                           columns=labels,
                           title=title,
                           ylabel=y_label,
                           units=y_label)
        return mdl
예제 #6
0
    def mdl(self, result_type: ResultTypes) -> "ResultsModel":
        """
        Plot the results
        :param result_type:
        :param ax:
        :param indices:
        :param names:
        :return:
        """
        cdf_result_types = [
            ResultTypes.BusVoltageCDF, ResultTypes.BusPowerCDF,
            ResultTypes.BranchPowerCDF, ResultTypes.BranchLoadingCDF,
            ResultTypes.BranchLossesCDF
        ]

        if result_type == ResultTypes.BusVoltageAverage:
            labels = self.bus_names
            y = self.v_avg_conv[1:-1, :]
            y_label = '(p.u.)'
            x_label = 'Sampling points'
            title = 'Bus voltage \naverage convergence'

        elif result_type == ResultTypes.BranchPowerAverage:
            labels = self.branch_names
            y = self.s_avg_conv[1:-1, :]
            y_label = '(MW)'
            x_label = 'Sampling points'
            title = 'Branch power \naverage convergence'

        elif result_type == ResultTypes.BranchLoadingAverage:
            labels = self.branch_names
            y = self.l_avg_conv[1:-1, :]
            y_label = '(%)'
            x_label = 'Sampling points'
            title = 'Branch loading \naverage convergence'

        elif result_type == ResultTypes.BranchLossesAverage:
            labels = self.branch_names
            y = self.loss_avg_conv[1:-1, :]
            y_label = '(MVA)'
            x_label = 'Sampling points'
            title = 'Branch losses \naverage convergence'

        elif result_type == ResultTypes.BusVoltageStd:
            labels = self.bus_names
            y = self.v_std_conv[1:-1, :]
            y_label = '(p.u.)'
            x_label = 'Sampling points'
            title = 'Bus voltage standard \ndeviation convergence'

        elif result_type == ResultTypes.BranchPowerStd:
            labels = self.branch_names
            y = self.s_std_conv[1:-1, :]
            y_label = '(MW)'
            x_label = 'Sampling points'
            title = 'Branch power standard \ndeviation convergence'

        elif result_type == ResultTypes.BranchLoadingStd:
            labels = self.branch_names
            y = self.l_std_conv[1:-1, :]
            y_label = '(%)'
            x_label = 'Sampling points'
            title = 'Branch loading standard \ndeviation convergence'

        elif result_type == ResultTypes.BranchLossesStd:
            labels = self.branch_names
            y = self.loss_std_conv[1:-1, :]
            y_label = '(MVA)'
            x_label = 'Sampling points'
            title = 'Branch losses standard \ndeviation convergence'

        elif result_type == ResultTypes.BusVoltageCDF:
            labels = self.bus_names
            cdf = CDF(np.abs(self.V_points))
            y_label = '(p.u.)'
            x_label = 'Probability $P(X \leq x)$'
            title = result_type.value[0]

        elif result_type == ResultTypes.BranchLoadingCDF:
            labels = self.branch_names
            cdf = CDF(np.abs(self.loading_points.real))
            y_label = '(p.u.)'
            x_label = 'Probability $P(X \leq x)$'
            title = result_type.value[0]

        elif result_type == ResultTypes.BranchLossesCDF:
            labels = self.branch_names
            cdf = CDF(np.abs(self.losses_points))
            y_label = '(MVA)'
            x_label = 'Probability $P(X \leq x)$'
            title = result_type.value[0]

        elif result_type == ResultTypes.BranchPowerCDF:
            labels = self.branch_names
            cdf = CDF(self.Sbr_points.real)
            y_label = '(MW)'
            x_label = 'Probability $P(X \leq x)$'
            title = result_type.value[0]

        elif result_type == ResultTypes.BusPowerCDF:
            labels = self.bus_names
            cdf = CDF(self.S_points.real)
            y_label = '(p.u.)'
            x_label = 'Probability $P(X \leq x)$'
            title = result_type.value[0]

        else:
            x_label = ''
            y_label = ''
            title = ''

        if result_type not in cdf_result_types:

            # assemble model
            index = np.arange(0, y.shape[0], 1)
            mdl = ResultsModel(data=np.abs(y),
                               index=index,
                               columns=labels,
                               title=title,
                               ylabel=y_label,
                               xlabel=x_label,
                               units=y_label)

        else:
            mdl = ResultsModel(data=cdf.arr,
                               index=cdf.prob,
                               columns=labels,
                               title=title,
                               ylabel=y_label,
                               xlabel=x_label,
                               units=y_label)
        return mdl
예제 #7
0
    def mdl(self, result_type) -> "ResultsModel":
        """
        Plot the results
        :param result_type: type of results (string)
        :return: DataFrame of the results (or None if the result was not understood)
        """

        if result_type == ResultTypes.BusVoltageModule:
            labels = self.bus_names
            y = np.abs(self.voltage)
            y_label = '(p.u.)'
            title = 'Bus voltage module'

        elif result_type == ResultTypes.BusVoltageAngle:
            labels = self.bus_names
            y = np.angle(self.voltage)
            y_label = '(Radians)'
            title = 'Bus voltage angle'

        elif result_type == ResultTypes.BranchPower:
            labels = self.branch_names
            y = self.Sf.real
            y_label = '(MW)'
            title = 'Branch power'

        elif result_type == ResultTypes.BusPower:
            labels = self.bus_names
            y = self.Sbus.real
            y_label = '(MW)'
            title = 'Bus power'

        elif result_type == ResultTypes.BranchLoading:
            labels = self.branch_names
            y = np.abs(self.loading * 100.0)
            y_label = '(%)'
            title = 'Branch loading'

        elif result_type == ResultTypes.BranchOverloads:
            labels = self.branch_names
            y = np.abs(self.overloads)
            y_label = '(MW)'
            title = 'Branch overloads'

        elif result_type == ResultTypes.BranchLosses:
            labels = self.branch_names
            y = self.losses.real
            y_label = '(MW)'
            title = 'Branch losses'

        elif result_type == ResultTypes.LoadShedding:
            labels = self.load_names
            y = self.load_shedding
            y_label = '(MW)'
            title = 'Load shedding'

        elif result_type == ResultTypes.ControlledGeneratorShedding:
            labels = self.generator_names
            y = self.generation_shedding
            y_label = '(MW)'
            title = 'Controlled generator shedding'

        elif result_type == ResultTypes.ControlledGeneratorPower:
            labels = self.generator_names
            y = self.generators_power
            y_label = '(MW)'
            title = 'Controlled generators power'

        elif result_type == ResultTypes.BatteryPower:
            labels = self.battery_names
            y = self.battery_power
            y_label = '(MW)'
            title = 'Battery power'

        else:
            labels = []
            y = np.zeros(0)
            y_label = '(MW)'
            title = 'Battery power'

        mdl = ResultsModel(data=y,
                           index=labels,
                           columns=[result_type.value[0]],
                           title=title,
                           ylabel=y_label,
                           xlabel='',
                           units=y_label)
        return mdl
예제 #8
0
    def mdl(self,
            result_type: ResultTypes,
            indices=None,
            names=None) -> "ResultsModel":
        """

        :param result_type:
        :param ax:
        :param indices:
        :param names:
        :return:
        """

        if indices is None and names is not None:
            indices = np.array(range(len(names)))

        if len(indices) > 0:
            labels = names[indices]

            if result_type == ResultTypes.SigmaDistances:
                y = np.abs(self.distances[indices])
                y_label = '(p.u.)'
                title = 'Sigma distances '

            elif result_type == ResultTypes.SigmaReal:
                y = self.sigma_re[indices]
                y_label = '(deg)'
                title = 'Real sigma '

            elif result_type == ResultTypes.SigmaImag:
                y = self.sigma_im[indices]
                y_label = '(p.u.)'
                title = 'Imaginary Sigma '

            elif result_type == ResultTypes.SigmaPlusDistances:
                y = np.c_[self.sigma_re[indices], self.sigma_im[indices],
                          self.distances[indices]]
                y_label = '(p.u.)'
                title = 'Sigma and distances'

                mdl = ResultsModel(
                    data=y,
                    index=labels,
                    columns=['σ real', 'σ imaginary', 'Distances'],
                    title=title,
                    ylabel=y_label,
                    units=y_label)
                return mdl

            else:
                n = len(labels)
                y = np.zeros(n)
                y_label = ''
                title = ''

            # assemble model
            mdl = ResultsModel(data=y,
                               index=labels,
                               columns=[result_type.value[0]],
                               title=title,
                               ylabel=y_label,
                               units=y_label)
            return mdl

        else:
            return None
예제 #9
0
    def mdl(self, result_type) -> "ResultsModel":
        """
        Plot the results
        :param result_type:
        :return:
        """

        if result_type == ResultTypes.BusVoltageModule:
            labels = self.bus_names
            y = np.abs(self.voltage)
            y_label = '(p.u.)'
            title = 'Bus voltage module'

        elif result_type == ResultTypes.BusVoltageAngle:
            labels = self.bus_names
            y = np.angle(self.voltage)
            y_label = '(Radians)'
            title = 'Bus voltage angle'

        elif result_type == ResultTypes.ShadowPrices:
            labels = self.bus_names
            y = self.shadow_prices
            y_label = '(currency)'
            title = 'Bus shadow prices'

        elif result_type == ResultTypes.BranchPower:
            labels = self.branch_names
            y = self.Sf.real
            y_label = '(MW)'
            title = 'Branch power '

        elif result_type == ResultTypes.BusPower:
            labels = self.bus_names
            y = self.Sbus.real
            y_label = '(MW)'
            title = 'Bus power '

        elif result_type == ResultTypes.BranchLoading:
            labels = self.branch_names
            y = np.abs(self.loading * 100.0)
            y_label = '(%)'
            title = 'Branch loading '

        elif result_type == ResultTypes.BranchOverloads:
            labels = self.branch_names
            y = np.abs(self.overloads)
            y_label = '(MW)'
            title = 'Branch overloads '

        elif result_type == ResultTypes.BranchLosses:
            labels = self.branch_names
            y = self.losses.real
            y_label = '(MW)'
            title = 'Branch losses '

        elif result_type == ResultTypes.LoadShedding:
            labels = self.load_names
            y = self.load_shedding
            y_label = '(MW)'
            title = 'Load shedding'

        elif result_type == ResultTypes.ControlledGeneratorPower:
            labels = self.generator_names
            y = self.generator_power
            y_label = '(MW)'
            title = 'Controlled generator power'

        elif result_type == ResultTypes.ControlledGeneratorShedding:
            labels = self.generator_names
            y = self.generator_shedding
            y_label = '(MW)'
            title = 'Controlled generator power'

        elif result_type == ResultTypes.BatteryPower:
            labels = self.battery_names
            y = self.battery_power
            y_label = '(MW)'
            title = 'Battery power'

        elif result_type == ResultTypes.BatteryEnergy:
            labels = self.battery_names
            y = self.battery_energy
            y_label = '(MWh)'
            title = 'Battery energy'

        else:
            labels = ''
            y_label = ''
            title = ''
            y = np.zeros(0)

        if self.time is not None:
            index = self.time
        else:
            index = np.arange(0, y.shape[0], 1)

        mdl = ResultsModel(data=y,
                           index=index,
                           columns=labels,
                           title=title,
                           ylabel=y_label,
                           xlabel='',
                           units=y_label)
        return mdl
예제 #10
0
    def mdl(self, result_type: ResultTypes) -> "ResultsModel":
        """

        :param result_type:
        :return:
        """

        if result_type == ResultTypes.BusVoltageModule:
            labels = self.bus_names
            y = np.abs(self.voltage)
            y_label = '(p.u.)'
            title = 'Bus voltage '

        elif result_type == ResultTypes.BusVoltageAngle:
            labels = self.bus_names
            y = np.angle(self.voltage, deg=True)
            y_label = '(deg)'
            title = 'Bus voltage '

        elif result_type == ResultTypes.BusActivePower:
            labels = self.bus_names
            y = self.Sbus.real
            y_label = '(MW)'
            title = 'Bus Active power '

        elif result_type == ResultTypes.BusReactivePower:
            labels = self.bus_names
            y = self.Sbus.imag
            y_label = '(MVAr)'
            title = 'Bus Reactive power '

        elif result_type == ResultTypes.BusVoltagePolar:
            labels = self.bus_names
            y = self.voltage
            y_label = '(p.u.)'
            title = 'Bus voltage '

        elif result_type == ResultTypes.BranchPower:
            labels = self.branch_names
            y = self.Sf
            y_label = '(MVA)'
            title = 'Branch power '

        elif result_type == ResultTypes.BranchActivePowerFrom:
            labels = self.branch_names
            y = self.Sf.real
            y_label = '(MW)'
            title = 'Branch active power '

        elif result_type == ResultTypes.BranchReactivePowerFrom:
            labels = self.branch_names
            y = self.Sf.imag
            y_label = '(MVAr)'
            title = 'Branch reactive power '

        elif result_type == ResultTypes.BranchActivePowerTo:
            labels = self.branch_names
            y = self.St.real
            y_label = '(MW)'
            title = 'Branch active power '

        elif result_type == ResultTypes.BranchReactivePowerTo:
            labels = self.branch_names
            y = self.St.imag
            y_label = '(MVAr)'
            title = 'Branch reactive power '

        elif result_type == ResultTypes.Transformer2WTapModule:
            labels = self.transformer_names
            y = self.transformer_tap_module
            y_label = '(p.u.)'
            title = 'Transformer tap module '

        elif result_type == ResultTypes.BranchCurrent:
            labels = self.branch_names
            y = self.If
            y_label = '(p.u.)'
            title = 'Branch current '

        elif result_type == ResultTypes.BranchActiveCurrentFrom:
            labels = self.branch_names
            y = self.If.real
            y_label = '(p.u.)'
            title = 'Branch active current '

        elif result_type == ResultTypes.BranchReactiveCurrentFrom:
            labels = self.branch_names
            y = self.If.imag
            y_label = '(p.u.)'
            title = 'Branch reactive current '

        elif result_type == ResultTypes.BranchActiveCurrentTo:
            labels = self.branch_names
            y = self.It.real
            y_label = '(p.u.)'
            title = 'Branch active current '

        elif result_type == ResultTypes.BranchReactiveCurrentTo:
            labels = self.branch_names
            y = self.It.imag
            y_label = '(p.u.)'
            title = 'Branch reactive current '

        elif result_type == ResultTypes.BranchLoading:
            labels = self.branch_names
            y = np.abs(self.loading) * 100
            y_label = '(%)'
            title = 'Branch loading '

        elif result_type == ResultTypes.BranchLosses:
            labels = self.branch_names
            y = self.losses
            y_label = '(MVA)'
            title = 'Branch losses '

        elif result_type == ResultTypes.BranchActiveLosses:
            labels = self.branch_names
            y = self.losses.real
            y_label = '(MW)'
            title = 'Branch active losses '

        elif result_type == ResultTypes.BranchReactiveLosses:
            labels = self.branch_names
            y = self.losses.imag
            y_label = '(MVAr)'
            title = 'Branch reactive losses '

        elif result_type == ResultTypes.BranchVoltage:
            labels = self.branch_names
            y = np.abs(self.Vbranch)
            y_label = '(p.u.)'
            title = 'Branch voltage drop '

        elif result_type == ResultTypes.BranchAngles:
            labels = self.branch_names
            y = np.angle(self.Vbranch, deg=True)
            y_label = '(deg)'
            title = 'Branch voltage angle '

        elif result_type == ResultTypes.BranchTapModule:
            labels = self.branch_names
            y = self.ma
            y_label = '(p.u.)'
            title = 'Branch tap module '

        elif result_type == ResultTypes.BranchTapAngle:
            labels = self.branch_names
            y = self.theta
            y_label = '(rad)'
            title = 'Branch tap angle '

        elif result_type == ResultTypes.BranchBeq:
            labels = self.branch_names
            y = self.Beq
            y_label = '(p.u.)'
            title = 'Branch Beq '

        elif result_type == ResultTypes.HvdcLosses:
            labels = self.hvdc_names
            y = self.hvdc_losses
            y_label = '(MW)'
            title = result_type.value

        elif result_type == ResultTypes.HvdcPowerFrom:
            labels = self.hvdc_names
            y = self.hvdc_Pf
            y_label = '(MW)'
            title = result_type.value

        elif result_type == ResultTypes.HvdcPowerTo:
            labels = self.hvdc_names
            y = self.hvdc_Pt
            y_label = '(MW)'
            title = result_type.value

        else:
            raise Exception('Unsupported result type: ' + str(result_type))

        # assemble model
        mdl = ResultsModel(data=y,
                           index=labels,
                           columns=[result_type.value[0]],
                           title=title,
                           ylabel=y_label,
                           units=y_label)
        return mdl
예제 #11
0
    def mdl(self, result_type: ResultTypes) -> "ResultsModel":
        """

        :param result_type:
        :return:
        """

        if result_type == ResultTypes.BusVoltageModule:
            labels = self.bus_names
            data = np.abs(self.voltage)
            y_label = '(p.u.)'
            title = 'Bus voltage '

        elif result_type == ResultTypes.BusVoltageAngle:
            labels = self.bus_names
            data = np.angle(self.voltage, deg=True)
            y_label = '(Deg)'
            title = 'Bus voltage '

        elif result_type == ResultTypes.BusActivePower:
            labels = self.bus_names
            data = self.S.real
            y_label = '(MW)'
            title = 'Bus active power '

        elif result_type == ResultTypes.BusReactivePower:
            labels = self.bus_names
            data = self.S.imag
            y_label = '(MVAr)'
            title = 'Bus reactive power '

        elif result_type == ResultTypes.BranchPower:
            labels = self.branch_names
            data = self.Sf
            y_label = '(MVA)'
            title = 'Branch power '

        elif result_type == ResultTypes.BranchActivePowerFrom:
            labels = self.branch_names
            data = self.Sf.real
            y_label = '(MW)'
            title = 'Branch power '

        elif result_type == ResultTypes.BranchReactivePowerFrom:
            labels = self.branch_names
            data = self.Sf.imag
            y_label = '(MVAr)'
            title = 'Branch power '

        elif result_type == ResultTypes.BranchLoading:
            labels = self.branch_names
            data = np.abs(self.loading) * 100
            y_label = '(%)'
            title = 'Branch loading '

        elif result_type == ResultTypes.BranchLosses:
            labels = self.branch_names
            data = self.losses
            y_label = '(MVA)'
            title = 'Branch losses'

        elif result_type == ResultTypes.BranchActiveLosses:
            labels = self.branch_names
            data = self.losses.real
            y_label = '(MW)'
            title = 'Branch losses'

        elif result_type == ResultTypes.BranchReactiveLosses:
            labels = self.branch_names
            data = self.losses.imag
            y_label = '(MVAr)'
            title = 'Branch losses'

        elif result_type == ResultTypes.BranchVoltage:
            labels = self.branch_names
            data = np.abs(self.Vbranch)
            y_label = '(p.u.)'
            title = result_type.value[0]

        elif result_type == ResultTypes.BranchAngles:
            labels = self.branch_names
            data = np.angle(self.Vbranch, deg=True)
            y_label = '(deg)'
            title = result_type.value[0]

        elif result_type == ResultTypes.BatteryPower:
            labels = self.branch_names
            data = np.zeros_like(self.losses)
            y_label = '$\Delta$ (MVA)'
            title = 'Battery power'

        elif result_type == ResultTypes.SimulationError:
            data = self.error_values.reshape(-1, 1)
            y_label = 'p.u.'
            labels = ['Error']
            title = 'Error'

        elif result_type == ResultTypes.HvdcLosses:
            labels = self.hvdc_names
            data = self.hvdc_losses
            y_label = '(MW)'
            title = result_type.value

        elif result_type == ResultTypes.HvdcPowerFrom:
            labels = self.hvdc_names
            data = self.hvdc_Pf
            y_label = '(MW)'
            title = result_type.value

        elif result_type == ResultTypes.HvdcPowerTo:
            labels = self.hvdc_names
            data = self.hvdc_Pt
            y_label = '(MW)'
            title = result_type.value

        else:
            raise Exception('Result type not understood:' + str(result_type))

        if self.time is not None:
            index = self.time
        else:
            index = list(range(data.shape[0]))

        # assemble model
        mdl = ResultsModel(data=data,
                           index=index,
                           columns=labels,
                           title=title,
                           ylabel=y_label,
                           units=y_label)
        return mdl
예제 #12
0
    def mdl(self, result_type: ResultTypes = ResultTypes.BusVoltage) -> ResultsModel:
        """
        Plot the results
        :param result_type:
        :return:
        """
        y_label = ''
        x_label = ''
        title = ''
        if result_type == ResultTypes.BusVoltage:
            labels = self.bus_names
            y = abs(np.array(self.voltages))
            x = self.lambdas
            title = 'Bus voltage'
            y_label = '(p.u.)'
            x_label = 'Loading from the base situation ($\lambda$)'

        elif result_type == ResultTypes.BusActivePower:
            labels = self.bus_names
            y = self.Sbus.real
            x = self.lambdas
            title = 'Bus active power'
            y_label = '(p.u.)'
            x_label = 'Loading from the base situation ($\lambda$)'

        elif result_type == ResultTypes.BusReactivePower:
            labels = self.bus_names
            y = self.Sbus.imag
            x = self.lambdas
            title = 'Bus reactive power'
            y_label = '(p.u.)'
            x_label = 'Loading from the base situation ($\lambda$)'

        elif result_type == ResultTypes.BranchActivePowerFrom:
            labels = self.branch_names
            y = self.Sf.real
            x = self.lambdas
            title = 'Branch active power (from)'
            y_label = 'MW'
            x_label = 'Loading from the base situation ($\lambda$)'

        elif result_type == ResultTypes.BranchReactivePowerFrom:
            labels = self.branch_names
            y = self.Sf.imag
            x = self.lambdas
            title = 'Branch reactive power (from)'
            y_label = 'MVAr'
            x_label = 'Loading from the base situation ($\lambda$)'

        elif result_type == ResultTypes.BranchActivePowerTo:
            labels = self.branch_names
            y = self.St.real
            x = self.lambdas
            title = 'Branch active power (to)'
            y_label = 'MW'
            x_label = 'Loading from the base situation ($\lambda$)'

        elif result_type == ResultTypes.BranchReactivePowerTo:
            labels = self.branch_names
            y = self.St.imag
            x = self.lambdas
            title = 'Branch reactive power (to)'
            y_label = 'MVAr'
            x_label = 'Loading from the base situation ($\lambda$)'

        elif result_type == ResultTypes.BranchActiveLosses:
            labels = self.branch_names
            y = self.losses.real
            x = self.lambdas
            title = 'Branch active power losses'
            y_label = 'MW'
            x_label = 'Loading from the base situation ($\lambda$)'

        elif result_type == ResultTypes.BranchReactiveLosses:
            labels = self.branch_names
            y = self.losses.imag
            x = self.lambdas
            title = 'Branch reactive power losses'
            y_label = 'MVAr'
            x_label = 'Loading from the base situation ($\lambda$)'

        elif result_type == ResultTypes.BranchLoading:
            labels = self.branch_names
            y = np.abs(self.loading) * 100.0
            x = self.lambdas
            title = 'Branch loading'
            y_label = '%'
            x_label = 'Loading from the base situation ($\lambda$)'

        else:
            labels = self.bus_names
            x = self.lambdas
            y = self.voltages

        # assemble model
        mdl = ResultsModel(data=y, index=x, columns=labels, title=title,
                           ylabel=y_label, xlabel=x_label, units=y_label)
        return mdl