KeyError: «Индекс» (0, 2500000) «недопустим для индексированного компонента« bbThor.tempera_out_cv »» - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь вычислить температуру вдоль трубопровода, используя 2 для петель, одну для времени и одну для разных точек вдоль трубы. и, наконец, я получаю (возвращаю) температуру на выходе трубы (которая находится в n_nodes = 2500000 или в последней точке self.block.all_x). Это часть моего кода:

            self.block.all_time = Set(
            initialize=range(n_steps), ordered=True)

        self.block.all_x = Set(
            initialize=range(1, self.n_nodes + 1), ordered=True)

Тогда Я определил переменные как:

            self.block.temperature_out_cv = Var(self.block.all_time,
                                            self.block.all_x)  # outlet temperature (future): supply line

        self.block.temperature_out = Var(lines,
                                        self.block.all_time)  # outlet temperature (future)

И, наконец, у нас есть расчет температуры в разное время:

def _bc_temp_out(b, l, t):
            if mass_flow.all() == 0:
                return Constraint.Skip
            else:
                if t == 0:
                    for j in self.block.all_x:
                        self.block.all_time.pprint()
                        if (t, j) in (0, self.block.all_x):
                            b.temperature_out_cv[0, j] = float(self.params['temperature_init_cv_' + l].v(j))
                    return b.temperature_out[l, 0] == b.temperature_out_cv[0, n_nodes]
                else:
                    for i in range(t):  # self.block.all_time
                        if i == 0:
                            for j in self.block.all_x:
                                b.temperature_out_cv[i, j] = self.params['temperature_init_cv_' + l].v(j)
                            if i == t:
                                return b.temperature_out[l, t] == b.temperature_out_cv[i, n_nodes]
                        else:
                            for j in self.block.all_x:  # self.block.all_x
                                if j == 1:
                                    print(b.u[t])
                                    b.temperature_out_cv[i, j] = (b.temperature_out_cv[i - 1, j] + b.u[
                                        i] * time_step / self.params['delta_x'].v() * b.temperatures[l, i]
                                                                  + time_step / Z * Tg[i]) / (
                                                                         1 + b.u[i] * time_step / self.params[
                                                                     'delta_x'].v()
                                                                         + time_step / Z)
                                else:
                                    b.temperature_out_cv[i, j] = (b.temperature_out_cv[i - 1, j] + b.u[
                                        i] * time_step / self.params['delta_x'].v() * b.temperature_out_cv[
                                                                      i, j - 1]
                                                                  + time_step / Z * Tg[i]) / (
                                                                         1 + b.u[i] * time_step / self.params[
                                                                     'delta_x'].v()
                                                                         + time_step / Z)
                            if i == t:
                                return b.temperature_out[l, t] == b.temperature_out_cv[i, n_nodes]

        self.block.bc_temp_out = Constraint(lines, self.block.all_time,
                                                   rule=_bc_temp_out)

Но я получаю ошибку ниже:

  File "C:\Users\Armaghan Bhr\Desktop\modesto-master\modesto\pipe.py", line 1719, in _bc_temp_out
return b.temperature_out[l, 0] == b.temperature_out_cv[0, n_nodes]

Файл "C: \ Users \ Armaghan Bhr \ Anaconda3 \ envs \ dhopt \ lib \ site-packages \ pyomo \ core \ base \ indexed_component.py", строка 401, в getitem validated_index = self._validate_index (index) Файл "C: \ Users \ Armaghan Bhr \ Anaconda3 \ envs \ dhopt \ lib \ site-packages \ pyomo \ core \ base \ indexed_component.py", строка 561, в _validate_index % (idx, self.name,)) KeyError: "Index '(0, 2500000)' недопустим для индексированного компонента 'bbThor.tempera_out_cv'"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...