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
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