Форма капли жидкости
Программы моделирования формы капли, лежащей на поверхности в зависимости от плотности, смачиваемости.
Замерзание капли PROGRAM zam_capl; uses crt; label w1,w2,w3,w4; const n=100; {количество точек} z1=1.0;z2=0.1; {коэффициент теплопроводности/ плотность/ уд. Теплоёмкость} s=0.001;s2=0.002; {коэффициент теплопроводности/плотность/уд. Теплота плавления} t0=0; {температура замерзания воды } T1=50;lm=0; {температура и радиус внутренней области капли} l=100;T2=-50; {температура и радиус внешней области капли} VAR Rl,dR,r,dt,dtm:real; k,i,nt,nm,j:integer; T,tt,td,TT1:array [0..n+1] of real; RR:array [0..200] of real; capl:text; BEGIN assign(capl, 'c:\kapl50.dat'); rewrite(capl); clrscr; dtm:=0.001; dr:=l/n; nm:=trunc(n/l*lm); FOR k:=1 TO n do begin T[k]:=T1; end; T[n]:=t0; T[n+1]:=T2; nt:=n; Rl:=dR*Nt; i:=0; while i<100 do begin dt:=32; for k:=nm+1 to nt-1 do begin r:=l/n*k; td[k]:=z1/(dR*dR)*(T[k-1]*(1-dR/r)+T[k+1]*(1+dr/r)-2*T[k]); for j:=1 to 200 do begin if T[j]+dt*td[j]>T[j-1]+dt*td[j-1] then dt:=dt/2 else goto w1; if dt=0 then dt:=dtm; w1:end; end; for k:=1 to 200 do begin if T[nt-1]+dt*td[nt-1]<T[nt] then dt:=dt/2 else goto w2; if dt=0 then dt:=dtm; w2:end; for k:=nt+1 to n do begin r:=l/n*k; td[k]:=z2/(dR*dR)*(T[k-1]*(1-dR/r)+T[k+1]*(1+dr/r)-2*T[k]); for j:=1 to 500 do begin if T[j]+dt*td[j]>T[j-1]+dt*td[j-1] then dt:=dt/2 else goto w3; if dt=0 then dt:=dtm; w3:end; end; for j:=1 to 200 do begin if T[nt+1]+dt*td[nt+1]>T[nt] then dt:=dt/2 else goto w4; if dt=0 then dt:=dtm; w4:end; Rl:=Rl-(s*(T[nt]-T[nt-1])-s2*(T[nt+1]-T[nt]))*dt; nt:=trunc(Rl/dR); RR[J]:=RL; if T[nt]<>t0 then T[nt]:=t0; td[nt]:=0; T[nt+1]:=(T[nt+2]+t0)/2; T[nt-1]:=(T[nt-2]+t0)/2; for k:=0 to n do begin T[k]:=T[k]+td[k]*dt; end; i:=i+1; T[0]:=T[1] end; for i:=0 to n do begin writeln (capl,RR[n],' ',T[i]); end; close(capl); end.
6.20. Решение уравнения теплопроводности
program teplo; const nt=200;mx=20; var ht,hx,a,c,gg:real; i,j,j0,i0,i1:integer; inf,outf:text; v1:array[0..nt,0..mx] of real; begin assign(inf,'c:\teplo.dat'); assign(outf,'c:\teplo1.dat'); rewrite(inf); rewrite(outf); ht:=1.0; hx:=0.7; a:=0.5; j0:=5; i0:=100; i1:=30; c:=0.2; gg:=8; for i:=0 to nt do begin if i>=i0 then v1[i,0]:=0; if i<i0 then v1[i,0]:=20.0*exp(-sqr(hx*(i-i1)/gg)/2)/(gg*sqrt(2*3.14)); v1[i,1]:=5; end; for j:=0 to mx do begin if j>=j0 then v1[0,j]:=0.0; if j<j0 then v1[0,j]:=0.0; v1[1,j]:=0.005; end; for i:=1 to nt -1 do begin for j:=1 to mx-1 do begin v1[i+1,j]:=v1[i,j]+a*a*(v1[i,j+1]-2*v1[i,j]+v1[i,j-1])*ht/(hx*hx); end; end; for j:=0 to mx do begin writeln(inf,v1[0,j],' ',v1[10,j],' ',v1[20,j],' ',v1[30,j],' ',v1[40,j],' ',v1[50,j], ' ',v1[60,j],' ',v1[70,j],' ',v1[80,j],' ',v1[90,j],' ',v1[100,j]); end; for i:=0 to nt do begin writeln(outf,v1[i,0],' ',v1[i,5],' ',v1[i,10],' ',v1[i,15],' ',v1[i,18],' ',v1[i,20]); end; close(inf); close(outf); end. Силовые линии электрического поля
Программа построения одной силовой линии электрического поля
program zar; const n=200; var i:integer; q1,q2,l,r13,r23:real; h,r1,r2,a,a1,pi: real; x:array[0..n] of real; y:array[0..n] of real; lod:text; begin assign(lod,'d:\zar8.dat'); rewrite(lod); pi:=3.14; a1:=0.6; q1:=2.;q2:=2.;l:=200.;h:=0.5;a:=a1*pi; y[1]:=1.5; x[1]:=y[1]*cos(a)/sin(a); for i:=1 to (n-1) do begin r2:=Sqrt(sqr(l-x[i])+sqr(y[i])); r1:=Sqrt(sqr(x[i])+sqr(y[i])); r13:=r1*r1*r1; r23:=r2*r2*r2; y[i+1]:=h+y[i]; x[i+1]:=x[i]+h*((q1*r23+q2*r13)*x[i]-q2*l*r13)/((q1*r23+q2*r13)*y[i]); end; for i:=1 to n do begin writeln(lod,x[i],' ',y[i]); end; Close(lod); end.
|