1 | package Bug2
|
---|
2 | connector HeatPortVector
|
---|
3 | parameter Integer n = 4;
|
---|
4 | Modelica.Thermal.HeatTransfer.Interfaces.HeatPort port[n];
|
---|
5 | end HeatPortVector;
|
---|
6 |
|
---|
7 | model Component
|
---|
8 | HeatPortVector bottom(n = rows);
|
---|
9 |
|
---|
10 | parameter Integer rows = 4;
|
---|
11 | parameter Integer cols = 1; //This causes index out of bounds
|
---|
12 |
|
---|
13 | parameter Modelica.SIunits.HeatCapacity c = 1;
|
---|
14 | parameter Modelica.SIunits.ThermalConductance gx = 1;
|
---|
15 | parameter Modelica.SIunits.ThermalConductance gy = 1;
|
---|
16 | parameter Modelica.SIunits.ThermalConductance gf = 1;
|
---|
17 | parameter Modelica.SIunits.Temperature inletFluidTemperature = 300;
|
---|
18 |
|
---|
19 | Modelica.SIunits.Temperature T[rows, cols](each start = inletFluidTemperature, each fixed = true);
|
---|
20 | equation
|
---|
21 |
|
---|
22 | for i in 1:rows loop
|
---|
23 | bottom.port[i].Q_flow = 2 * gx * (bottom.port[i].T - T[i, 1]);
|
---|
24 | end for;
|
---|
25 |
|
---|
26 | c * der(T[1, 1]) = gx * (T[1, 2] - T[1, 1])
|
---|
27 | + gy * (T[2, 1] - T[1, 1])
|
---|
28 | + gf * (inletFluidTemperature - T[1, 1])
|
---|
29 | + bottom.port[1].Q_flow;
|
---|
30 |
|
---|
31 | if cols > 1 then
|
---|
32 | c * der(T[1, cols]) = gx * (T[1, cols - 1] - T[1, cols])
|
---|
33 | + gy * (T[2, cols] - T[1, cols])
|
---|
34 | + gf * (inletFluidTemperature - T[1, cols]);
|
---|
35 | end if;
|
---|
36 |
|
---|
37 | if rows > 1 then
|
---|
38 | c * der(T[rows, 1]) = gx * (T[rows, 2] - T[rows, 1])
|
---|
39 | + gy * (T[rows - 1, 1] - T[rows, 1])
|
---|
40 | + gf * (inletFluidTemperature - T[rows, 1])
|
---|
41 | + bottom.port[rows].Q_flow;
|
---|
42 | end if;
|
---|
43 |
|
---|
44 | if rows > 1 and cols > 1 then
|
---|
45 | c * der(T[rows, cols]) = gx * (T[rows, cols - 1] - T[rows, cols])
|
---|
46 | + gy * (T[rows - 1, cols] - T[rows, cols])
|
---|
47 | + gf * (inletFluidTemperature - T[rows, cols]);
|
---|
48 | end if;
|
---|
49 |
|
---|
50 | for i in 2:rows - 1 loop
|
---|
51 | c * der(T[i, 1]) = gx * (T[i, 2] - T[i, 1])
|
---|
52 | + gy * (T[i - 1, 1] + T[i + 1, 1] - 2 * T[i, 1])
|
---|
53 | + gf * (inletFluidTemperature - T[i, 1])
|
---|
54 | + bottom.port[i].Q_flow;
|
---|
55 |
|
---|
56 | if cols > 1 then
|
---|
57 | c * der(T[i, cols]) = gx * (T[i, cols - 1] - T[i, cols])
|
---|
58 | + gy * (T[i - 1, cols] + T[i + 1, cols] - 2 * T[i, cols])
|
---|
59 | + gf * (inletFluidTemperature - T[i, cols]);
|
---|
60 | end if;
|
---|
61 | end for;
|
---|
62 |
|
---|
63 | for j in 2:cols - 1 loop
|
---|
64 | c * der(T[1, j]) = gx * (T[1, j - 1] + T[1, j + 1] - 2 * T[1, j])
|
---|
65 | + gy * (T[2, j] - T[1, j])
|
---|
66 | + gf * (inletFluidTemperature - T[1, j]);
|
---|
67 |
|
---|
68 | if rows > 1 then
|
---|
69 | c * der(T[rows, j]) = gx * (T[rows, j - 1] + T[rows, j + 1] - 2 * T[rows, j])
|
---|
70 | + gy * (T[rows - 1, j] - T[rows, j])
|
---|
71 | + gf * (inletFluidTemperature - T[rows, j]);
|
---|
72 | end if;
|
---|
73 | end for;
|
---|
74 |
|
---|
75 | for i in 2:rows - 1 loop
|
---|
76 | for j in 2:cols - 1 loop
|
---|
77 | c * der(T[i, j]) = gx * (T[i, j - 1] + T[i, j + 1] - 2 * T[i, j])
|
---|
78 | + gy * (T[i - 1, j] + T[i + 1, j] - 2 * T[i, j])
|
---|
79 | + gf * (inletFluidTemperature - T[i, j]);
|
---|
80 | end for;
|
---|
81 | end for;
|
---|
82 | end Component;
|
---|
83 | end Bug2;
|
---|