Я пытаюсь вычислить температуру вдоль трубопровода, используя 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'"