예제 #1
0
파일: system.py 프로젝트: davidlyu/moniqi
    def update(self):
        rho = 0
        if self.data['is_temp_active']:
            rod = self.data['current_temp_rod'].lower()
            rod_pos = rod + 'pos'
            rod_value = rod + '_value'
            value_table = self.data[rod_value]
            if self.data[rod_pos] < self.data['temp_target']:
                rho = (Tools.lookup(value_table, self.data[rod_pos]) +
                       Tools.lookup(value_table, self.data[rod_pos] + 1)) / 2
                self.data[rod_pos] += 1
            elif self.data[rod_pos] > self.data['temp_target']:
                rho = -(Tools.lookup(value_table, self.data[rod_pos]) +
                        Tools.lookup(value_table, self.data[rod_pos] - 1)) / 2
                self.data[rod_pos] -= 1
            else:
                self.data['is_temp_active'] = False

        if self.data['is_power_active']:
            rod = self.data['current_power_rod'].lower()
            rod_pos = rod + 'pos'
            rod_value = rod + '_value'
            value_table = self.data[rod_value]
            if self.data[rod_pos] < self.data['power_target']:
                rho = (Tools.lookup(value_table, self.data[rod_pos]) +
                       Tools.lookup(value_table, self.data[rod_pos] + 1)) / 2
                self.data[rod_pos] += 1
            elif self.data[rod_pos] > self.data['power_target']:
                rho = -(Tools.lookup(value_table, self.data[rod_pos]) +
                        Tools.lookup(value_table, self.data[rod_pos] - 1)) / 2
                self.data[rod_pos] -= 1
            else:
                self.data['is_power_active'] = False

        self.data['delta_rho'] = rho * self.random_item
예제 #2
0
파일: system.py 프로젝트: davidlyu/moniqi
    def update(self):
        loop_bc = self.data['loop_bc']
        rcp_vol = self.data['rcp_vol']
        boron_value = Tools.lookup(self.data['boron_value'], loop_bc)
        tank_bc = self.data['tank_bc']
        dilute_vol = self.data['dilute_vol']
        dilute_rate = self.data['dilute_rate']
        boron_vol = self.data['boron_vol']
        boron_rate = self.data['boron_rate']
        if self.data['is_dilute_active']:
            e = exp(-dilute_rate / 3600 / rcp_vol)
            if dilute_vol < (dilute_rate / 3600):
                self.data['dilute_vol'] = 0
                self.stop_dilute()
            else:
                loop_bc *= e
                self.data['dilute_vol'] -= dilute_rate / 3600
        elif self.data['is_boron_active']:
            e = exp(-boron_rate / 3600 / rcp_vol)
            if boron_vol < (boron_rate / 3600):
                self.data['boron_vol'] = 0
                self.stop_boron()
            else:
                loop_bc = e * loop_bc + (1 - e) * tank_bc
                self.data['boron_vol'] -= boron_rate / 3600
        elif self._residual_boron_on:
            if self._residual_boron_rate > 0.1:
                e = exp(-self._residual_boron_rate / 3600 / rcp_vol)
                loop_bc = e * loop_bc + (1 - e) * tank_bc
                self._residual_boron_rate *= 2 ** (-1 / self.data['boron_rate_half_time'])
                print('boron rate = %f, boron half time = %d' % (self._residual_boron_rate,
                                                                 self.data['boron_rate_half_time']))
            else:
                self._residual_boron_on = False
        elif self._residual_dilute_on:
            if self._residual_dilute_rate > 0.1:
                e = exp(-self._residual_dilute_rate / 3600 / rcp_vol)
                loop_bc *= e
                self._residual_dilute_rate *= 2 ** (-1 / self.data['dilute_rate_half_time'])
            else:
                self._residual_dilute_on = False

        rho = (loop_bc - self.data['loop_bc']) * boron_value
        self.data['delta_rho'] = rho
        self.data['loop_bc'] = loop_bc