Теплопроводность с краевым условием

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск

Авторы

Федоров Евгений

Цель работы

Визуализация процесса теплопередачи в неравномерно нагретой пластине. Постановка задачи в приложенном файле.

Визуализация

  • Визуализация решения первого уравнения

  • Визуализация решения второго уравнения

Код программы первого решения

JS:
 1 function main() {
 2     var ctx = canvas_example.getContext('2d');
 3 	var s = 400;
 4 	var p = 400;
 5 	var a = 1;
 6 	var b = 4;
 7 	function fe(x,y) {
 8 		return Math.sin(b*x*Math.PI/p)*Math.sin(b*y*Math.PI/s);
 9 	}
10 	var i = [];
11 	var m = [];
12 	for (var k = 1; k<1+b; k++) {
13 		i[k] = [];
14 		m[k] = [];
15 		for (var n = 1; n<1+b; n++) {
16 			var t = 0;
17 			var L = 0;
18 			for (var x = 1; x<1+p; x++) {
19 				for (var y=1; y<1+s; y++) {
20 					t = t + fe(x,y)*Math.sin(x*k*Math.PI/p)*Math.sin(y*n*Math.PI/s);
21 				}			
22 			}
23 			L = Math.PI*Math.PI*k*k/p/p+Math.PI*Math.PI*n*n/s/s;
24 			i[k][n] = t*4/p/s;
25 			if (Math.abs(i[k][n]) < 0.001) {
26 				i[k][n] = 0;
27 			}
28 			var j = 1/Math.exp(a*a*L);
29 			m[k][n] = j;
30 		}
31 	}
32 	var dc = 255/2;
33 	var r = 1;
34 	var xn = 100;
35 	var yn = 100;
36     var vr = 0;
37 	function control() {
38 			
39 	for (x=1; x<1+p; x++) {
40 		for (y=1; y<1+s; y++) {
41 	        var ot=0;
42 			var q=0;
43 			for (k = 1; k<1+b; k++) {
44 				for (n = 1; n<1+b; n++) {
45 			     ot = ot + i[k][n]*Math.sin(x*k*Math.PI/p)*Math.sin(y*n*Math.PI/s)*Math.pow(m[k][n],vr);
46 				}
47 			}
48 			ot = (ot+1)*dc;
49 			c = `rgb(${ot},${ot/2},${0})`;
50         ctx.fillStyle = c;
51         ctx.beginPath();
52         ctx.arc(x+xn, y+yn, r, 0, 0.5 * Math.PI);
53         ctx.fill();
54 		}
55 	}
56 	vr = vr + 100;
57 	}
58 	setInterval(control, 300)
59 }

Код программы второго решения

JS:
 1  
 2 window.addEventListener('load', main, false);
 3 
 4 function main() {
 5     var ctx = canvas_example.getContext('2d');
 6 	var s = 400;
 7 	var p = 400;
 8 	var a = 1;
 9 	var b = 3;
10 	function fe(x,y) {
11 		return x*(x-s)*y*(y-p);
12 	}
13 	var i = [];
14 	var m = [];
15 	for (var k = 1; k<1+b; k++) {
16 		i[k] = [];
17 		m[k] = [];
18 		for (var n = 1; n<1+b; n++) {
19 			var t = 0;
20 			var L = 0;
21 			for (var x = 1; x<1+p; x++) {
22 				for (var y=1; y<1+s; y++) {
23 					t = t + fe(x,y)*Math.sin(x*k*Math.PI/p)*Math.sin(y*n*Math.PI/s);
24 				}			
25 			}
26 			L = Math.PI*Math.PI*k*k/p/p+Math.PI*Math.PI*n*n/s/s;
27 			i[k][n] = t*4/p/s;
28 			if (Math.abs(i[k][n]) < 0.001) {
29 				i[k][n] = 0;
30 			}
31 			var j = 1/Math.exp(a*a*L);
32 			m[k][n] = j;
33 		}
34 	}
35 	var max = s*s*p*p/16;
36 	var dc = 255/max;
37 	var r = 1;
38 	var xn = 100;
39 	var yn = 100;
40     var vr = 0;
41 	function control() {
42 			
43 	for (x=1; x<1+p; x++) {
44 		for (y=1; y<1+s; y++) {
45 	        var ot=0;
46 			var q=0;
47 			for (k = 1; k<1+b; k++) {
48 				for (n = 1; n<1+b; n++) {
49 			     ot = ot + i[k][n]*Math.sin(x*k*Math.PI/p)*Math.sin(y*n*Math.PI/s)*Math.pow(m[k][n],vr);
50 				}
51 			}
52 			ot = (ot+1)*dc;
53 			c = `rgb(${ot},${ot/2},${0})`;
54         ctx.fillStyle = c;
55         ctx.beginPath();
56         ctx.arc(x+xn, y+yn, r, 0, 0.5 * Math.PI);
57         ctx.fill();
58 		}
59 	}
60 	vr = vr + 1000;
61 	}
62 	setInterval(control, 300)
63 }