Example #1
0
    def get_pump_energy_usage_statistics(self):
        """ Read pump energy usage statistics for all pumps.
            Returns: dictionary (keyed by each pump's link name) of PumpEnergy instances """
        all_pump_energy = {}
        pump_count = self._call_int(_lib.ENR_getNetSize, _lib.ENR_pumpCount)
        if pump_count:
            link_index_return = c_int()
            returned_length = c_int()
            error_new = c_int()
            array_pointer = _lib.ENR_newOutValueArray(self.ptrapi,
                                                      _lib.ENR_getEnergy,
                                                      _lib.ENR_link,
                                                      byref(returned_length),
                                                      byref(error_new))
            if error_new.value != 0:
                print("Error " + str(error_new.value) +
                      " calling ENR_newOutValueArray for getEnergy")
                self._raise_error(error_new.value)

            for pump_index in range(1, pump_count + 1):
                self.call(_lib.ENR_getEnergyUsage, pump_index,
                          byref(link_index_return), array_pointer)
                link_index = link_index_return.value
                for link in self.links.itervalues():
                    if link.index == link_index:
                        all_pump_energy[link.name] = PumpEnergy(
                            link.name, array_pointer[1], array_pointer[2],
                            array_pointer[3], array_pointer[4],
                            array_pointer[5], array_pointer[6])
                        break
            _lib.ENR_free(array_pointer)
        return all_pump_energy
    def get_LinkSeries(self,
                       LinkInd,
                       LinkAttr,
                       SeriesStartInd=0,
                       SeriesLen=-1):
        """
        Purpose: Get time series results for particular attribute. Specify series
        start and length using seriesStart and seriesLength respectively.

        SeriesLen = -1 Default input: Gets data from Series Start Ind to end
        
        """
        if SeriesLen > self.numPeriods:
            raise Exception("Outside Number of TimeSteps")
        elif SeriesLen == -1:
            SeriesLen = self.numPeriods

        sLength = c_int()
        ErrNo1 = c_int()
        SeriesPtr = _lib.ENR_newOutValueSeries(self.enrapi, SeriesStartInd,
                                               SeriesLen, byref(sLength),
                                               byref(ErrNo1))
        ErrNo2 = _lib.ENR_getLinkSeries(self.enrapi, LinkInd, LinkAttr,
                                        SeriesStartInd, sLength.value,
                                        SeriesPtr)
        BldArray = [SeriesPtr[i] for i in range(sLength.value)]
        ret = _lib.ENR_free(SeriesPtr)

        return BldArray
Example #3
0
    def get_attribute_for_all_at_time(cls, output, attribute, time_index):
        """ Purpose: For all items of this type (nodes or links) at given time, get a particular attribute.
            Args
            output: OutputObject that already has the desired output file open.
            attribute: attribute to get values of - must be an ENR_attribute from self.Attributes.
            time_index: time index to retrieve, 0 is the first time index.
            Examples
            for node in output.nodes:
                values = node.get_all_attributes_at_time(output, time_index)
                for attribute in (node.AttributeDemand, node.AttributeHead):
                    print(attribute.name, attribute.str(values[attribute.index]))

        """
        returned_length = c_int()
        error_new = c_int()
        array_pointer = _lib.ENR_newOutValueArray(output.ptrapi,
                                                  _lib.ENR_getAttribute,
                                                  cls._elementType,
                                                  byref(returned_length),
                                                  byref(error_new))
        if error_new.value != 0:
            print("Error " + str(error_new.value) +
                  " calling ENR_newOutValueArray for " + cls.TypeLabel)
            output._raise_error(error_new.value)

        error_get = cls._get_attribute(output.ptrapi, time_index,
                                       attribute.index, array_pointer)
        if error_get != 0:
            print("Error reading " + str(attribute.name) + " for all " +
                  cls.TypeLabel + "s at " + str(time_index))
            output._raise_error(error_get)

        BldArray = [array_pointer[i] for i in range(returned_length.value)]
        _lib.ENR_free(array_pointer)
        return BldArray
Example #4
0
    def get_series(self, output, attribute, start_index=0, end_index=-1):
        """
            Purpose: Get time series results for the requested attribute.
            Args
            output: OutputObject that already has the desired output file open.
            attribute: attribute to get values of - must be an ENR_attribute from self.Attributes.
            start_index: first time index to retrieve, default = 0 for first time index.
            end_index: last time index to retrieve, or -1 to get all values starting at start_index.
        """
        if end_index == -1:
            end_index = output.num_periods - 1
        if start_index < 0:
            raise Exception("get_series start_index " + str(start_index) +
                            " cannot be less than zero.")
        if start_index >= output.num_periods:
            raise Exception("get_series start_index " + str(start_index) +
                            " must be less than number of time steps " +
                            str(output.num_periods))
        if end_index < start_index:
            raise Exception("get_series end_index " + str(end_index) +
                            " less than start_index " + str(start_index))
        if end_index >= output.num_periods:
            raise Exception("get_series end_index " + str(end_index) +
                            " must be less than number of time steps " +
                            str(output.num_periods))
        returned_length = c_int()
        error_new = c_int()
        ask_for_end = end_index
        # if output.newOutValueSeriesLengthIsEnd:
        #     ask_for_end += start_index + 1
        series_pointer = _lib.ENR_newOutValueSeries(output.ptrapi, start_index,
                                                    ask_for_end,
                                                    byref(returned_length),
                                                    byref(error_new))
        if error_new.value != 0:
            print("Error " + str(error_new.value) +
                  " allocating series start=" + str(start_index) + ", end=" +
                  str(ask_for_end))
            output._raise_error(error_new.value)

        if self.index >= 0:
            error_get = self._get_series(output.ptrapi, self.index,
                                         attribute.index, start_index,
                                         returned_length.value, series_pointer)
        else:
            error_get = self._get_series(output.ptrapi, attribute.index,
                                         start_index, returned_length.value,
                                         series_pointer)

        if error_get != 0:
            print("Error reading series " + self.TypeLabel + " " +
                  str(self.name) + ', att #' + str(attribute.index))
            output._raise_error(error_get)

        build_array = [series_pointer[i] for i in range(returned_length.value)]
        _lib.ENR_free(series_pointer)
        return build_array
 def get_LinkResult(self, LinkInd, TimeInd):
     """
     Purpose: For a link at given time, get all attributes
     """
     alength = c_int()
     ErrNo1 = c_int()
     ValArrayPtr = _lib.ENR_newOutValueArray(self.enrapi,
                                             _lib.ENR_getResult,
                                             _lib.ENR_link, byref(alength),
                                             byref(ErrNo1))
     ErrNo2 = _lib.ENR_getLinkResult(self.enrapi, TimeInd, LinkInd,
                                     ValArrayPtr)
     BldArray = [ValArrayPtr[i] for i in range(alength.value)]
     _lib.ENR_free(ValArrayPtr)
     return BldArray
 def get_LinkAttribute(self, LinkAttr, TimeInd):
     """
     Purpose: For all links at given time, get a particular attribute
     """
     alength = c_int()
     ErrNo1 = c_int()
     ValArrayPtr = _lib.ENR_newOutValueArray(self.enrapi,
                                             _lib.ENR_getAttribute,
                                             _lib.ENR_link, byref(alength),
                                             byref(ErrNo1))
     ErrNo2 = _lib.ENR_getLinkAttribute(self.enrapi, TimeInd, LinkAttr,
                                        ValArrayPtr)
     BldArray = [ValArrayPtr[i] for i in range(alength.value)]
     _lib.ENR_free(ValArrayPtr)
     return BldArray
Example #7
0
    def _measure_new_out_value_series(self):
        """Test ENR_newOutValueSeries to see whether it treats the requested length as length or end.
            Sets self.newOutValueSeriesLengthIsEnd flag so we can adjust how we call this method."""

        returned_length = c_int()
        error_new = c_int()

        try:
            series_pointer = _lib.ENR_newOutValueSeries(
                self.ptrapi, 0, 1, byref(returned_length), byref(error_new))
            if error_new.value != 0:
                print(
                    "Error allocating series start to test ENR_newOutValueSeries: "
                    + str(error_new.value))
                self._raise_error(error_new.value)
            self.newOutValueSeriesLengthIsEnd = (returned_length.value == 1)
            _lib.ENR_free(series_pointer)
        except Exception as ex:
            print(str(ex))
            raise Exception(
                "SWMM output error calling ENR_newOutValueSeries: " + str(ex))
Example #8
0
    def get_reaction_summary(self):
        """ Read reaction summary (network-wide average reaction rates and average source mass inflow)
            Returns: four floating-point numbers: bulk, wall, tank, source """
        returned_length = c_int()
        error_new = c_int()
        array_pointer = _lib.ENR_newOutValueArray(self.ptrapi,
                                                  _lib.ENR_getReacts,
                                                  _lib.ENR_link,
                                                  byref(returned_length),
                                                  byref(error_new))
        if error_new.value != 0:
            print("Error " + str(error_new.value) +
                  " calling ENR_newOutValueArray for getReacts")
            self._raise_error(error_new.value)

        self.call(_lib.ENR_getNetReacts, array_pointer)
        bulk = array_pointer[1]
        wall = array_pointer[2]
        tank = array_pointer[3]
        source = array_pointer[4]
        _lib.ENR_free(array_pointer)
        return bulk, wall, tank, source
Example #9
0
    def get_all_attributes_at_time(self, output, time_index):
        """
        For one location at one time, get all attributes.

        Returns: List of attribute values in the same order as self.attributes.

        Examples

        output = ENOutputWrapper.OutputObject("Net1.out")
        for time_index in range(0, output.num_periods):
            for node in output.nodes:
                attribute_values = node.get_all_attributes_at_time(output, time_index)
                for value, definition in zip(attribute_values, node.attributes):
                    print("At node " + node.name + ", attribute " + definition.name +
                          " has value " + str(value) + " at time step " + time_index)
        """

        returned_length = c_int()
        error_new = c_int()
        array_pointer = _lib.ENR_newOutValueArray(output.ptrapi,
                                                  _lib.ENR_getResult,
                                                  self._elementType,
                                                  byref(returned_length),
                                                  byref(error_new))
        if error_new.value != 0:
            print("Error " + str(error_new.value) +
                  " calling ENR_newOutValueArray for " + self.TypeLabel)
            output._raise_error(error_new.value)

        error_get = self._get_result(output.ptrapi, time_index, self.index,
                                     array_pointer)
        if error_get != 0:
            print("Error reading all attributes for " + self.name + " at " +
                  str(time_index))
            output._raise_error(error_get)
        BldArray = [array_pointer[i] for i in range(returned_length.value)]
        _lib.ENR_free(array_pointer)
        return BldArray