Exemple #1
0
    def __call__(self, t, **kwargs):
        pL = self.pL_leftPress
        dpL = self.dpL_leftPress
        pR = self.pR_rightPress
        dpR = self.dpR_rightPress
        q = self.q_flowThrough
        dq = self.dq_flowThrough

        io = self.io_func(t)
        by_io = minimum(self.by_io_func(t), io)

        '''
            get target values
        '''
        bar_pR = self.target_upper_pR(t)
        ubar_pR = minimum(bar_pR, self.target_lower_pR(t))

        bar_pL = maximum(ubar_pR, self.target_upper_pL(t))
        ubar_pL = minimum(bar_pL, self.target_lower_pL(t))

        bar_ubar_q = maximum(0.0, self.target_q(t))


        '''
            define conditions and target values
        '''
        px = 100.0 * (pL - pR) - 0.001
        cond = maximum(0.0, minimum(maximum(bar_ubar_q, 1000.0*(ubar_pR - pR), 1000.0*(pL - bar_pL)),
                                    1000.0*(bar_pR - pR),
                                    1000.0*(pL - ubar_pL),
                                    px)) - q

        # mode determination
        cond = cond_assign(by_io > 0.01, pR - pL, cond) # not needed due to shortpipe condition
        cond = cond_assign(io < 0.01, q, cond)

        '''
            return statement
        '''
        return cond
Exemple #2
0
    def __call__(self, t, **kwargs):
        pL = self.pL_leftPress
        dpL = self.dpL_leftPress
        pR = self.pR_rightPress
        dpR = self.dpR_rightPress
        q = self.q_flowThrough
        dq = self.dq_flowThrough

        io = self.io_func(t)
        by_io = minimum(self.by_io_func(t), io)
        '''
            get target values
        '''
        bar_pR = self.target_upper_pR(t)
        ubar_pL = minimum(bar_pR, self.target_lower_pL(t))

        bar_ubar_q = self.target_q(t)
        '''
            define conditions and target values
        '''
        press_diff = pR - pL

        # target value: flow
        # cond = cond_assign(q > bar_ubar_q, press_diff, bar_ubar_q - q)
        cond = bar_ubar_q - q

        # target values: left and right pressure
        max_term = maximum(pR - bar_pR, ubar_pL - pL, pL - pR)
        cond = cond_assign(
            logical_or(logical_or(pR >= bar_pR, pL <= ubar_pL), pL >= pR),
            cond_assign(q <= 0.0, q, max_term), cond)

        # cond = cond_assign(q <= 0.0, cond_assign(logical_or(pR > bar_pR, pL < ubar_pL), q, cond), cond)
        # cond = cond_assign(pL >= pR, cond_assign(q <= 0.0, q, press_diff), cond)

        # mode determination
        cond = cond_assign(by_io > 0.01, press_diff, cond)
        cond = cond_assign(io < 0.01, q, cond)
        '''
            return statement
        '''
        return cond
Exemple #3
0
    def __call__(self, t, **kwargs):
        pL = self.pL_leftPress
        dpL = self.dpL_leftPress
        pR = self.pR_rightPress
        dpR = self.dpR_rightPress
        q = self.q_flowThrough
        dq = self.dq_flowThrough

        io = self.io_func(t)
        by_io = minimum(self.by_io_func(t), io)

        '''
            get target values
        '''
        bar_pR  = self.target_upper_pR(t)
        ubar_pL = minimum(bar_pR, self.target_lower_pL(t))

        bar_ubar_q = self.target_q(t)

        '''
            define conditions and target values
        '''
        cond = bar_ubar_q - q # target flow
        cond = minimum(cond, pL - ubar_pL, bar_pR - pR) # target pressures
        cond = maximum(cond, 1000.0*(pL - pR), -1000.0*q) # principal necessities of compressors

        '''
            mode determination
        '''
        cond = cond_assign(by_io > 0.01, pR - pL, cond)
        cond = cond_assign(io < 0.01, q, cond)

        # cond = cond - 1.0e-3*(dpR - dpL + dq) # may or may not improve solvabillity of this element

        '''
            return statement
        '''
        return cond
Exemple #4
0
    def __call__(self, t, **kwargs):
        pL = self.pL_leftPress
        dpL = self.dpL_leftPress
        pR = self.pR_rightPress
        dpR = self.dpR_rightPress
        q = self.q_flowThrough
        dq = self.dq_flowThrough

        io = self.io_func(t)
        by_io = minimum(self.by_io_func(t), io)
        '''
            get target values
        '''
        bar_pR = self.target_upper_pR(t)
        ubar_pR = minimum(bar_pR, self.target_lower_pR(t))

        bar_pL = maximum(ubar_pR, self.target_upper_pL(t))
        ubar_pL = minimum(bar_pL, self.target_lower_pL(t))

        bar_ubar_q = maximum(0.0, self.target_q(t))
        '''
            define conditions and target values
        '''
        # # target value driven modelling
        # press_diff = pL - pR
        #
        # # target value: flow
        # # cond = bar_ubar_q - q
        # cond = cond_assign(q < bar_ubar_q,
        #                    cond_assign(logical_and(pL >= pR, q >= 0.0),
        #                                minimum(bar_ubar_q - q, press_diff),
        #                                q),
        #                    cond_assign(logical_and(pL >= pR, q >= 0.0),
        #                                bar_ubar_q - q,
        #                                q)) # bar_ubar_q - q)
        #
        # # target values: left upper and right lower pressure
        # max_term = maximum(ubar_pR - pR, pL - bar_pL)
        # cond = cond_assign(logical_or(pR <= ubar_pR, pL >= bar_pL),
        #                    cond_assign(logical_and(pL >= pR, q >= 0.0),
        #                                max_term,
        #                                q),
        #                    cond_assign(pL >= pR,
        #                                cond,
        #                                q))
        #
        # # target values: left lower and right upper pressure
        # max_term = maximum(pR - bar_pR, ubar_pL - pL, pR - pL)
        # cond = cond_assign(logical_or(pR >= bar_pR, pL <= ubar_pL),
        #                    cond_assign(pL >= pR,
        #                                cond_assign(q > 0.0,
        #                                            max_term,
        #                                            q),
        #                                q),
        #                    cond_assign(pL >= pR,
        #                                cond,
        #                                q))
        #
        # # cond = min(cond, press_diff) # cond_assign(logical_or(q < 0.0, pR > pL), press_diff, cond)
        #
        # # cond = cond_assign(q <= 0.0, cond_assign(logical_or(pR > bar_pR, pL < ubar_pL), q, cond), cond)
        # # cond = cond_assign(logical_or(pR >= pL, q <= 0.0), cond_assign(pR >= pL, q, cond), cond)
        # # cond = cond_assign(bar_ubar_q <= 0.0, q, cond)

        cond = cond_assign(pL >= pR, minimum(bar_ubar_q - q, pL - pR), q)

        cond = cond_assign(
            logical_or(pR <= ubar_pR, pL >= bar_pL),
            cond_assign(q < bar_ubar_q, cond, maximum(ubar_pR - pR,
                                                      pL - bar_pL)), cond)

        cond = cond_assign(
            logical_or(logical_or(pR >= bar_pR, pL <= ubar_pL), pL <= pR),
            cond_assign(
                logical_or(q <= bar_ubar_q,
                           logical_or(pR <= ubar_pR, pL >= bar_pL)),
                maximum(pR - bar_pR, ubar_pL - pL, pR - pL), cond), cond)

        cond = cond_assign(
            q == 0.0,
            cond_assign(
                logical_or(logical_or(pL < ubar_pL, pR > bar_pR), pL < pR), q,
                cond), cond_assign(q < 0.0, q, cond))

        # cond = minimum(bar_ubar_q - q, pL - pR)
        #
        # cond = cond_assign(logical_or(pR <= ubar_pR, pL >= bar_pL),
        #                    cond_assign(q < bar_ubar_q,
        #                                cond,
        #                                maximum(ubar_pR - pR, pL - bar_pL)),
        #                    cond)
        #
        # cond = cond_assign(logical_or(pR >= bar_pR, pL <= ubar_pL),
        #                    cond_assign(logical_or(q <= bar_ubar_q, logical_or(pR <= ubar_pR, pL >= bar_pL)),
        #                                maximum(pR - bar_pR, ubar_pL - pL),
        #                                cond),
        #                    cond)

        # mode determination
        cond = cond_assign(by_io > 0.01, pR - pL,
                           cond)  # not needed due to shortpipe condition
        cond = cond_assign(io < 0.01, q, cond)
        '''
            return statement
        '''
        return cond
Exemple #5
0
    def __call__(self, t, **kwargs):
        pL = self.pL_leftPress
        pR = self.pR_rightPress
        q = self.q_flowThrough

        return maximum(-q, pL - pR)