Anda di halaman 1dari 14

COMPUTATIONAL FLUID

DYNAMICS I

Assignment:
Tridiagonal Matrix Algorithm on 1-D
Heat Equation

Muhamad Fakhrusy
23616034

Graduate Program of Aeronautics and Astronautics


Faculty of Mechanical and Aerospace Engineering
Institut Teknologi Bandung
2016

1. Introduction
Our assignment is to do a numerical computation by using the implicit finite diffirence method
on 1D Heat Equation, which has a general form of:
T
2T
2 =0
t
x

(1)

which has a implicit discretization form of:



 n+1
Tin+1 Tin
n+1

Ti+1 2Tin+1 + Ti1


=0
2
t
(x)
Rewrite the equation for convenience:


t n+1
t n+1
t

Tin+1
Ti1 + 1 + 2
T
= Tin
2
2
(x)
(x)
(x)2 i+1

(2)

(3)

The (3)-th equation above is called implicit scheme because one need to do a solution for all
grid points simultaneously. If we expand equation (3), we will have a tridiagonal matrix. For
t
convenience, take s = (x)
2 , thus the equation will be as simple as:
n+1
n+1
= Tin
sTi1
+ (1 + 2s) Tin+1 sTi+1

(4)

For simplifying things up, take any arbitrary number of grid, lets say 6. For these points,
expand the equation (4) above, we will have: (start from 0 index)
(1 + 2s) T0n+1 sT1n+1
sT0n+1 + (1 + 2s) T1n+1 sT2n+1
sT1n+1 + (1 + 2s) T2n+1 sT3n+1
sT2n+1 + (1 + 2s) T3n+1 sT4n+1
sT3n+1 + (1 + 2s) T4n+1 sT5n+1
sT4n+1 + (1 + 2s) T5n+1
The above equations will be solved simultaneously.

= T0n
= T1n
= T2n
= T3n
= T4n
= T5n

(5)

2. Boundary Condition: Dirichlet


For the assignment, I use dirichlet boundary condition. This boundary condition basically
means I introduce a fixed value on both edges. If dirichlet boundary condition is introduced to
the equation (3) and use 6 number of grids, the equations become, in matrix form:

n+1 n
n+1
T1
T1
T0
1 + 2s
s
0
0
n+1
n
s

1 + 2s
s
0 T2 T2
0

=
+
s
n+1
0
0
s
1 + 2s
s T3 T3n
0
0
s
1 + 2s
T4n+1
T4n
T5n+1

(6)

where as the last term is given by the dirichlet boundary condition, on this case, T0 and T5 as
the first and last grid points respectively.
For solve the above matrix, we will use gauss method to make a upper triangular matrix and
finally use backward substitution for getting the distribution of temperature. The algorithm
of the computation is shown below:

Figure 1: Computation Flowchart

3. Implementation with C++


First, the header file:
1
2
3
4
5

#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e
#i n c l u d e

<i o s t r e a m >
<v e c t o r >
<array >
<cmath>
<iomanip>

After that, the main file:


1

#i n c l u d e g l o b a l . hpp

2
3

c l a s s Parameters {

public :
// d e c l a r e i n p u t
d o u b l e alpha ;
d o u b l e delta_t ;
d o u b l e delta_x ;
d o u b l e error_max ;
d o u b l e temperature_initial ;
d o u b l e temperature_final ;
i n t N_iter_max ;
i n t N_nodes ;

5
6
7
8
9
10
11
12
13
14
15

v o i d print_params ( ) {

16
17

std : : cout << std : : fixed << std : : setprecision ( 5 ) << std : : endl << Thus , t h e d i s t r i b u t i o n o f t e m p e r a t u r e with p a r a m e t e r s \n << std : : endl << a l p h a : << alpha << std : : endl << d e l t a t : << delta_t << std : : endl<< d e l t a x : << delta_x << std : : endl << m a x e r r o r : << error_max<< std : : endl << i n i t i a l t e m p e r a t u r e : << temperature_initial << std : : endl << f i n a l t e m p e r a t u r e : << temperature_final << std : : endl << max i t e r a t i o n : << N_iter_max << std : : endl << Number o f g r i d p o i n t s : << N_nodes << std : : endl << i s : << std : : endl << std : : endl;
}

18

19
20

};

21
22

c l a s s TDMA_SOLVER_DIRICHLET : p u b l i c Parameters {

23
24
25
26

private :
c o n s t i n t N_nodes_const = N_nodes ;
d o u b l e error_computation ;

27
28
29

30
31

// compute A c o n s t a n t
d o u b l e A_constant_computation ( d o u b l e alpha , d o u b l e
delta_x ) {
r e t u r n ( ( alpha delta_t ) / pow ( delta_x , 2 ) ) ;
}

delta_t , d o u b l e -

32
33
34

35
36

// compute B c o n s t a n t WHERE AS B = 1 + 2A
d o u b l e B_constant_computation ( d o u b l e alpha , d o u b l e
delta_x ) {
r e t u r n ( 1 + ( 2 alpha delta_t ) / pow ( delta_x , 2 ) ) ;
}

delta_t , d o u b l e -

37
38
39
40
41
42
43
44
45
46

public :
std : : vector<double> temperature_computation ( d o u b l e alpha ,
d o u b l e delta_t ,
d o u b l e delta_x ,
d o u b l e error_max ,
d o u b l e temperature_initial ,
d o u b l e temperature_final ,
i n t N_iter_max ,
i n t N_nodes_const ) {

47
48
49

50

std : : vector<double> temperature_spatial ( N_nodes_const ) ;


std : : vector<std : : vector<double>> temperature_time ( N_iter_max , std : : vector<double >(N_nodes_const ) ) ;
std : : vector<double> temperature_temp ( N_nodes_const ) ;

51
52
53

d o u b l e B = B_constant_computation ( alpha , delta_t , delta_x ) ;


d o u b l e A = A_constant_computation ( alpha , delta_t , delta_x ) ;

54
55
56

57
58
59
60

// s o l v e t h e A x = y
//A i s t h e matrix , x i s t e m p e r a t u r e s p a t i a l , y i s t e m p e r a t u r e f i n a l +s BC on both e d g e s .
// i n i t i a l i z e t h e v e c t o r by i n i t i a l c o n d i t i o n s
f o r ( i n t i=0; i<N_nodes_const ; i++) {
temperature_spatial [ i ] = 0 . ;
}

61
62
63
64
65
66

// i n i t i a l i z e t h e t e m p e r a t u r e t i m e
f o r ( i n t i=0; i<N_nodes_const ; i++) {
temperature_time [ 0 ] [ i ] = temperature_spatial [ i ] ;
}
std : : cout << std : : endl ;

67
68
69
70
71
72

73
74
75

76
77
78
79
80
81

// b u i l d t h e y column
temperature_temp [ 0 ] = temperature_initial ;
f o r ( i n t i=1; i<N_nodes_const 1; i++) {
i f ( i == 1 ) {
temperature_temp [ i ] = temperature_time [ 0 ] [ i ] + Atemperature_initial ;
}
e l s e i f ( i == N_nodes_const 2) {
temperature_temp [ i ] = temperature_time [ 0 ] [ i ] + Atemperature_final ;
}
else {
temperature_temp [ i ] = temperature_time [ 0 ] [ i ] ;
}
}
temperature_temp [ N_nodes_const 1] = temperature_final ;

82
83
84

std : : cout << s t e p [ 0 ] : ;


f o r ( i n t i = 0 ; i<N_nodes_const ; i++) std : : cout << std : : fixed << std: : setprecision ( 4 ) << temperature_temp [ i ] << ; std : : cout << \n;

85
86
87

//make t h e i n i t i a l matrix
std : : vector<std : : vector<double>> the_matrix ( N_nodes_const , std : : vector <double >(N_nodes_const ) ) ;

88

89
90

f o r ( i n t j=1; j<N_nodes_const 1; j++) {


// v e r t i c a l > rows
f o r ( i n t i=1; i<N_nodes_const 1; i++) {
// h o r i z o n t a l > columns

91

i f ( j == 0 ) {
i f ( i == 0 ) {
the_matrix [ j ] [ i ]
}
else {
the_matrix [ j ] [ i ]
}
}

92
93
94
95
96
97
98
99

B;

= A ;

100

e l s e i f ( j == N_nodes_const 1 ) {
i f ( i == N_nodes_const 1 ) {
the_matrix [ j ] [ i ] = B ;
}
else {
the_matrix [ j ] [ i ] = A ;
}
}

101
102
103
104
105
106
107
108
109

else {
i f ( i == j ) {
the_matrix [ j ] [ i ]
}
e l s e i f ( i == j1 | |
the_matrix [ j ] [ i ]
}
else {
the_matrix [ j ] [ i ]
}
}

110
111
112
113
114
115
116
117
118
119
120

B;

i == j+1) {
= A ;

0;

121
122

123
124
125
126

i n t time_count = 0 ;
d o u b l e error_computation = 0 . ;

127
128
129

// l o o p i n g p r o c e s s
do {

130
131
132
133

// do t h e g a u s s method
f o r ( i n t j = 2 ; j<N_nodes_const 1; j++) {
d o u b l e temp_const = the_matrix [ j ] [ j 1]/ the_matrix [ j 1 ] [ j 1 ] ;

134

// f i r s t , make a bottom t r i a n g l e matrix on A matrix


f o r ( i n t i=0; i<N_nodes_const ; i++) {
the_matrix [ j ] [ i ] = the_matrix [ j ] [ i ] the_matrix [ j 1 ] [ i ] temp_const ;
}

135
136
137

138
139

// do t h e same o p e r a t i o n on y column
temperature_temp [ j ] = temperature_temp [ j ] temperature_temp [ j1] temp_const ;

140
141

142
143

144
145

// do backward s u b s t i t u t i o n , f i r s t

i n i t i a l i z e both edge with BC

146
147
148
149

150
151
152

153

temperature_spatial [ N_nodes_const 1 ]
= temperature_final ;
temperature_spatial [ 0 ]
= temperature_initial ;
// compute t h e N2 node
temperature_spatial [ N_nodes_const 2 ] = temperature_temp [ N_nodes_const 2 ] / the_matrix [ N_nodes_const 2 ] [ N_nodes_const 2];
// compute t h e r e s t with backward s u b s t i t u t i o n
f o r ( i n t i = N_nodes_const 3 ; i >0; i) {
temperature_spatial [ i ] = ( temperature_temp [ i ] the_matrix [ i ] [ i+1] temperature_spatial [ i +1]) / the_matrix [ i ] [ i ] ;
}

154
155

156
157
158
159

160
161

// p r i n t t h e output f o r c h e c k i n g p u r p o s e and more v e r b o s e computation


time_count = time_count + 1 ;
std : : cout << s t e p [ << time_count<< ] : ;
f o r ( i n t i = 0 ; i<N_nodes_const ; i++) {
std : : cout <<std : : fixed<<std : : setprecision ( 4 ) << temperature_spatial [ i ] << ;
}
std : : cout << std : : endl ;

162
163
164
165
166

// append t h e r e s u l t t o g l o b a l r e s u l t
f o r ( i n t i=0; i<N_nodes_const ; i++) {
temperature_time [ time_count ] [ i ] = temperature_spatial [ i ] ;
}

167
168
169
170
171

// BUILD NEW MATRIX


f o r ( i n t j=1; j<N_nodes_const 1; j++) {
// v e r t i c a l > rows
f o r ( i n t i=1; i<N_nodes_const 1; i++) {
// h o r i z o n t a l > columns

172
173
174
175
176

i f ( j == 0 ) {
i f ( i == 0 ) {
the_matrix [ j ] [ i ]
}

B;

177

else {

178
179

the_matrix [ j ] [ i ]

180

182

= A ;

181

183
184

e l s e i f ( j == N_nodes_const 1 ) {

185

i f ( i == N_nodes_const 1 ) {
the_matrix [ j ] [ i ] = B ;
}

186
187
188
189

else {
the_matrix [ j ] [ i ]
}

190
191
192
193

= A ;

194
195
196
197
198

else {
i f ( i == j ) {
the_matrix [ j ] [ i ]
}

B;

199

e l s e i f ( i == j1 | | i == j+1) {

200
201

the_matrix [ j ] [ i ]

202

= A ;

203
204

else {

205
206

the_matrix [ j ] [ i ]

207

0;

208

209

210

211
212

// b u i l d t h e y column
temperature_temp [ 0 ] = temperature_initial ;
f o r ( i n t i=1; i<N_nodes_const 1; i++) {

213
214
215
216

i f ( i == 1 ) {
temperature_temp [ i ] = temperature_time [ time_count ] [ i ] + Atemperature_initial ;
}
e l s e i f ( i == N_nodes_const 2) {
temperature_temp [ i ] = temperature_time [ time_count ] [ i ] + Atemperature_final ;
}
else {
temperature_temp [ i ] = temperature_time [ time_count ] [ i ] ;
}

217
218

219
220
221

222
223
224
225
226

}
temperature_temp [ N_nodes_const 1] = temperature_final ;

227
228
229

// compute e r r o r
f o r ( i n t i = 0 ; i <N_nodes_const ; i++) {
d o u b l e temp = abs ( temperature_time [ time_count ] [ i ] temperature_time [ time_count 1 ] [ i ] ) ;
error_computation = ( error_computation + temp ) ;
}
error_computation = error_computation / N_nodes_const ;

230
231
232

233
234
235
236

// f a i l s a v e o f d i v e r g e n t computation
i f ( time_count > N_iter_max ) {
std : : cout << FAIL ! ! ! << std : : endl ;
break ;
}

237
238
239
240
241
242

} w h i l e ( error_computation > error_max ) ;

243
244

r e t u r n temperature_spatial ;

245
246

247
248

};

249
250
251

i n t main ( ) {

252
253
254

Parameters par_1 ;
// d e f i n e i n p u t o f p a r 1 o b j e c t

par_1 . alpha
= 0.1;
par_1 . delta_t
= 0.05;
par_1 . delta_x
= 0.05;
par_1 . error_max
= 0.00001;
par_1 . temperature_initial = 1 ;
par_1 . temperature_final
= 300;
par_1 . N_iter_max
= 1000;
par_1 . N_nodes
= 15;

255
256
257
258
259
260
261
262
263

TDMA_SOLVER_DIRICHLET tdma_1 ;

264
265

std : : vector<double> first = tdma_1 . temperature_computation ( par_1 . alpha , par_1 . delta_t , par_1 . delta_x , par_1 . error_max , par_1 . temperature_initial , par_1 . temperature_final , par_1 . N_iter_max , par_1 . N_nodes ) ;

266

267

par_1 . print_params ( ) ;

268
269

f o r ( i n t i = 0 ; i<par_1 . N_nodes ; i++) {


std : : cout << first [ i ] << ;
}
std : : cout << std : : endl << F i n i s h e d ! << std : : endl ;

270
271
272
273
274
275

I use makefile to compile the source conveniently:


1
2
3
4
5
6

#
#
#
#
#
#

F i l e name
Date
Version
Author

: Makefile
:
:
:

7
8

DEST

= .

HDRS

LIBS

COMPILER

= g++

9
10
11

global . hpp

12
13
14
15
16
17

= std=c++11 O2

OPTFLAG

18
19

= Makefile

MAKEFILE

20
21

= tdma_solver

PROGRAM

22
23

SRCS

= main . cpp

OBJS

= $ ( SRCS : . cpp =.o )

24
25
26
27

. cpp . o :
$ ( COMPILER ) $ ( OPTFLAG ) c $ . cpp o $ . o

28
29
30

all :

$ ( PROGRAM )

31
32

$ ( PROGRAM ) :

$ ( OBJS ) $ ( LIBS )

@echo n Loading Program $ (PROGRAM) . . .


@$ ( COMPILER ) $ ( OPTFLAG ) $ ( LDFLAGS ) $ ( OBJS ) $ ( LIBS ) o $ ( PROGRAM )
@echo done

33
34
35
36
37

clean : ;

@rm f $ ( SRCS : . cpp =.o ) $ ( SRCS : . cpp =.il ) $ ( PROGRAM )

4. Results
First Case:

Parameter
Value

0.1
t
0.05
x
0.05
Maximum Error
0.00001
Temperature Initial
1
Temperature Final
300
Maximum Iteration
1000
Number of Grids
8
step[0]: 1.0000 2.0000 0.0000 0.0000 0.0000 0.0000 600.0000 300.0000
step[1]: 1.0000 4.0157 9.0394 18.5827 37.4173 74.9606 149.9843 300.0000
step[2]: 1.0000 10.4334 23.0757 42.7361 74.4732 124.7383 199.8922 300.0000
step[3]: 1.0000 17.4559 37.4230 64.5638 102.6185 154.7457 221.8767 300.0000
step[4]: 1.0000 23.7962 49.7626 81.8987 122.7023 173.5479 233.7945 300.0000
step[5]: 1.0000 28.9644 59.5130 94.9367 136.8794 185.9106 241.1231 300.0000
step[6]: 1.0000 32.9458 66.8824 104.5037 146.9085 194.3278 245.9557 300.0000
step[7]: 1.0000 35.9171 72.3200 111.4415 154.0320 200.1843 249.2649 300.0000
step[8]: 1.0000 38.0952 76.2794 116.4433 159.1082 204.3111 251.5774 300.0000
step[9]: 1.0000 39.6757 79.1415 120.0385 162.7331 207.2400 253.2115 300.0000
step[10]: 1.0000 40.8160 81.2021 122.6185 165.3249 209.3273 254.3732 300.0000
step[11]: 1.0000 41.6361 82.6822 124.4684 167.1796 210.8180 255.2018 300.0000
step[12]: 1.0000 42.2248 83.7441 125.7942 168.5072 211.8841 255.7940 300.0000
step[13]: 1.0000 42.6471 84.5053 126.7441 169.4579 212.6470 256.2176 300.0000
step[14]: 1.0000 42.9497 85.0508 127.4246 170.1387 213.1932 256.5208 300.0000
step[15]: 1.0000 43.1666 85.4417 127.9121 170.6263 213.5843 256.7379 300.0000
step[16]: 1.0000 43.3220 85.7216 128.2613 170.9756 213.8644 256.8934 300.0000
step[17]: 1.0000 43.4333 85.9222 128.5114 171.2257 214.0650 257.0047 300.0000
step[18]: 1.0000 43.5130 86.0659 128.6906 171.4049 214.2087 257.0844 300.0000
Where as the 18-th step is the final value of the temperature distribution

10

Second Case:

Parameter
Value

0.3
t
0.05
x
0.15
Maximum Error
0.00001
Temperature Initial
1
Temperature Final
300
Maximum Iteration
1000
Number of Grids
8
step[0]: 1.0000 0.6667 0.0000 0.0000 0.0000 0.0000 200.0000 300.0000
step[1]: 1.0000 0.5724 1.0033 2.9393 9.2841 29.5550 94.1586 300.0000
step[2]: 1.0000 1.5168 3.4503 9.0543 23.8309 60.4275 143.3330 300.0000
step[3]: 1.0000 3.0214 7.2995 17.3515 39.8493 86.3748 171.8212 300.0000
step[4]: 1.0000 5.0703 12.2142 26.7300 55.3134 107.0930 189.9500 300.0000
step[5]: 1.0000 7.5381 17.7779 36.3632 69.3983 123.5606 202.4245 300.0000
step[6]: 1.0000 10.2642 23.6174 45.7298 81.8923 136.7958 211.5521 300.0000
step[7]: 1.0000 13.0981 29.4471 54.5408 92.8508 147.5986 218.5505 300.0000
step[8]: 1.0000 15.9195 35.0713 62.6592 102.4249 156.5516 224.1078 300.0000
step[9]: 1.0000 18.6423 40.3686 70.0409 110.7857 164.0718 228.6381 300.0000
step[10]: 1.0000 21.2106 45.2736 76.6942 118.0949 170.4592 232.4047 300.0000
step[11]: 1.0000 23.5931 49.7599 82.6560 124.4947 175.9333 235.5829 300.0000
step[12]: 1.0000 25.7760 53.8264 87.9765 130.1076 180.6578 238.2949 300.0000
step[13]: 1.0000 27.7578 57.4883 92.7116 135.0374 184.7579 240.6287 300.0000
step[14]: 1.0000 29.5447 60.7698 96.9171 139.3727 188.3313 242.6498 300.0000
step[15]: 1.0000 31.1477 63.6998 100.6470 143.1890 191.4556 244.4086 300.0000
step[16]: 1.0000 32.5801 66.3090 103.9516 146.5512 194.1941 245.9449 300.0000
step[17]: 1.0000 33.8566 68.6278 106.8773 149.5152 196.5991 247.2904 300.0000
step[18]: 1.0000 34.9915 70.6855 109.4659 152.1294 198.7141 248.4714 300.0000
step[19]: 1.0000 35.9990 72.5094 111.7555 154.4359 200.5762 249.5095 300.0000
step[20]: 1.0000 36.8923 74.1246 113.7798 156.4716 202.2169 250.4232 300.0000
step[21]: 1.0000 37.6837 75.5543 115.5693 158.2686 203.6634 251.2280 300.0000
step[22]: 1.0000 38.3841 76.8190 117.1509 159.8552 204.9394 251.9376 300.0000
step[23]: 1.0000 39.0039 77.9374 118.5486 161.2562 206.0653 252.5633 300.0000
step[24]: 1.0000 39.5520 78.9262 119.7836 162.4934 207.0591 253.1155 300.0000
step[25]: 1.0000 40.0366 79.8002 120.8747 163.5861 207.9364 253.6027 300.0000
step[26]: 1.0000 40.4650 80.5726 121.8388 164.5511 208.7111 254.0329 300.0000
step[27]: 1.0000 40.8436 81.2552 122.6905 165.4035 209.3951 254.4127 300.0000
step[28]: 1.0000 41.1782 81.8583 123.4430 166.1564 209.9992 254.7481 300.0000
step[29]: 1.0000 41.4738 82.3911 124.1077 166.8214 210.5327 255.0442 300.0000
step[30]: 1.0000 41.7351 82.8619 124.6950 167.4089 211.0039 255.3058 300.0000
Where as the 30-th step is the final value of the temperature distribution

11

Third Case:
Parameter
Value

0.01
t
0.2
x
0.075
Maximum Error
0.00001
Temperature Initial
99
Temperature Final
1350
Maximum Iteration
1000
Number of Grids
8
step[0]: 99.0000 35.2000 0.0000 0.0000 0.0000 0.0000 480.0000 1350.0000
step[1]: 99.0000 21.6824 5.3467 4.0488 14.1380 63.9905 293.8162 1350.0000
step[2]: 99.0000 36.0443 13.4815 13.7977 41.5326 146.3146 482.6333 1350.0000
step[3]: 99.0000 46.5409 23.6032 29.1329 77.7931 228.4360 610.0451 1350.0000
step[4]: 99.0000 55.1362 35.4470 49.0684 118.7581 303.6617 700.1379 1350.0000
step[5]: 99.0000 62.9403 48.8296 72.3572 161.3848 370.3002 766.6365 1350.0000
step[6]: 99.0000 70.5542 63.5226 97.8150 203.7077 428.6333 817.6204 1350.0000
step[7]: 99.0000 78.2715 79.2478 124.4511 244.5685 479.6068 858.0082 1350.0000
step[8]: 99.0000 86.2013 95.7054 151.4965 283.3527 524.2894 890.8961 1350.0000
step[9]: 99.0000 94.3469 112.6032 178.3845 319.7884 563.6678 918.2988 1350.0000
step[10]: 99.0000 102.6549 129.6762 204.7151 353.8090 598.5857 941.5691 1350.0000
step[11]: 99.0000 111.0470 146.6969 230.2176 385.4642 629.7411 961.6424 1350.0000
step[12]: 99.0000 119.4387 163.4788 254.7182 414.8653 657.7030 979.1839 1350.0000
step[13]: 99.0000 127.7498 179.8748 278.1136 442.1520 682.9340 994.6781 1350.0000
step[14]: 99.0000 135.9106 195.7735 300.3514 467.4730 705.8102 1008.4868 1350.0000
step[15]: 99.0000 143.8635 211.0943 321.4148 490.9760 726.6394 1020.8849 1350.0000
step[16]: 99.0000 151.5633 225.7824 341.3118 512.8014 745.6749 1032.0859 1350.0000
step[17]: 99.0000 158.9768 239.8040 360.0672 533.0802 763.1272 1042.2585 1350.0000
step[18]: 99.0000 166.0809 253.1422 377.7172 551.9329 779.1721 1051.5375 1350.0000
step[19]: 99.0000 172.8614 265.7930 394.3050 569.4701 793.9583 1060.0327 1350.0000
step[20]: 99.0000 179.3112 277.7625 409.8779 585.7922 807.6124 1067.8347 1350.0000
step[21]: 99.0000 185.4290 289.0642 424.4856 600.9910 820.2430 1075.0188 1350.0000
step[22]: 99.0000 191.2179 299.7173 438.1783 615.1501 831.9444 1081.6488 1350.0000
step[23]: 99.0000 196.6847 309.7445 451.0061 628.3458 842.7986 1087.7789 1350.0000
step[24]: 99.0000 201.8384 319.1715 463.0180 640.6480 852.8779 1093.4558 1350.0000
step[25]: 99.0000 206.6900 328.0253 474.2616 652.1206 862.2462 1098.7201 1350.0000
step[26]: 99.0000 211.2518 336.3336 484.7827 662.8223 870.9604 1103.6074 1350.0000
step[27]: 99.0000 215.5367 344.1247 494.6251 672.8072 879.0717 1108.1491 1350.0000
step[28]: 99.0000 219.5581 351.4263 503.8305 682.1250 886.6259 1112.3730 1350.0000
step[29]: 99.0000 223.3295 358.2659 512.4387 690.8218 893.6647 1116.3042 1350.0000
step[30]: 99.0000 226.8642 364.6700 520.4870 698.9401 900.2259 1119.9650 1350.0000
step[31]: 99.0000 230.1755 370.6641 528.0110 706.5193 906.3439 1123.3757 1350.0000
step[32]: 99.0000 233.2761 376.2728 535.0441 713.5958 912.0505 1126.5547 1350.0000
step[33]: 99.0000 236.1785 381.5197 541.6176 720.2037 917.3745 1129.5189 1350.0000
step[34]: 99.0000 238.8943 386.4269 547.7612 726.3744 922.3426 1132.2835 1350.0000
step[35]: 99.0000 241.4350 391.0158 553.5026 732.1371 926.9794 1134.8627 1350.0000
step[36]: 99.0000 243.8114 395.3062 558.8678 737.5192 931.3077 1137.2694 1350.0000
12

step[37]:
step[38]:
step[39]:
step[40]:
step[41]:
step[42]:
step[43]:
step[44]:
step[45]:
step[46]:
step[47]:
step[48]:
step[49]:
step[50]:
step[51]:
step[52]:
step[53]:
step[54]:
step[55]:
step[56]:
step[57]:
step[58]:
step[59]:
step[60]:
step[61]:
step[62]:
step[63]:
step[64]:
step[65]:

99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000
99.0000

246.0336
248.1113
250.0537
251.8695
253.5666
255.1527
256.6350
258.0203
259.3147
260.5242
261.6544
262.7103
263.6969
264.6187
265.4800
266.2846
267.0364
267.7387
268.3949
269.0079
269.5806
270.1157
270.6156
271.0825
271.5188
271.9264
272.3071
272.6629
272.9952

399.3171
403.0663
406.5706
409.8456
412.9063
415.7665
418.4391
420.9365
423.2699
425.4502
427.4873
429.3905
431.1687
432.8301
434.3822
435.8324
437.1871
438.4528
439.6353
440.7400
441.7720
442.7362
443.6370
444.4785
445.2646
445.9991
446.6852
447.3262
447.9250

563.8813
568.5660
572.9431
577.0330
580.8542
584.4244
587.7600
590.8764
593.7880
596.5081
599.0495
601.4237
603.6418
605.7140
607.6499
609.4585
611.1482
612.7267
614.2014
615.5790
616.8661
618.0685
619.1917
620.2411
621.2215
622.1374
622.9930
623.7923
624.5390

742.5460
747.2411
751.6265
755.7229
759.5493
763.1235
766.4623
769.5813
772.4948
775.2166
777.7591
780.1343
782.3532
784.4260
786.3624
788.1714
789.8613
791.4401
792.9150
794.2928
795.5799
796.7824
797.9058
798.9552
799.9356
800.8515
801.7071
802.5065
803.2532

935.3484
939.1212
942.6440
945.9338
949.0060
951.8753
954.5551
957.0581
959.3961
961.5798
963.6197
965.5252
967.3051
968.9678
970.5211
971.9720
973.3275
974.5937
975.7766
976.8816
977.9139
978.8783
979.7792
980.6209
981.4071
982.1416
982.8278
983.4689
984.0677

1139.5156
1141.6122
1143.5695
1145.3970
1147.1034
1148.6968
1150.1849
1151.5747
1152.8727
1154.0851
1155.2174
1156.2752
1157.2632
1158.1861
1159.0482
1159.8535
1160.6058
1161.3086
1161.9651
1162.5784
1163.1513
1163.6865
1164.1865
1164.6536
1165.0899
1165.4976
1165.8784
1166.2341
1166.5665

Where as the 65-th step is the final value of the temperature distribution

13

1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000
1350.0000