Narzędzia użytkownika

Narzędzia witryny


studia:magisterskie:1sem:modelowanie_procesow_fizycznych

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Nowa wersja
Poprzednia wersja
studia:magisterskie:1sem:modelowanie_procesow_fizycznych [2016/04/13 09:12]
149.156.112.6 utworzono
studia:magisterskie:1sem:modelowanie_procesow_fizycznych [2016/06/01 08:49] (aktualna)
91.227.212.3 [Drugi Program Maciek]
Linia 1: Linia 1:
 ===== Lab 5-9 ===== ===== Lab 5-9 =====
 +==== Zajęcia 2 ====
 <code matlab> <code matlab>
 y=[0.67 0.67 0.67 0.67 0.67 0.02 0.02 0.02 0.02]; y=[0.67 0.67 0.67 0.67 0.67 0.02 0.02 0.02 0.02];
Linia 39: Linia 40:
  
 plot(y2, '​DisplayName',​ '​y2',​ '​yDataSource',​ '​y2'​);​ plot(y2, '​DisplayName',​ '​y2',​ '​yDataSource',​ '​y2'​);​
 +</​code>​
 +==== Zajęcia 3 ====
 +<code matlab>​temp = 727;
 +R = 8.3144;
 +Q = 140000;
 +temp_k = temp + 273;
 +d0= 0.000041;
 +D = d0 * exp( -Q /( R * temp_k)) * 1 * 10^10;
 +
 +dt = 0.01;
 +dx = 0.1;
 +pN = 0.1;
 +
 +if (D*dt)/dx^2 <= 0.5
 + 
 +    % Obszar rozwiązania:​ 100 um    ​
 +    %y=[0.67 0.67 0.67 0.67 0.67 0.02 0.02 0.02 0.02];
 +    y(1:5) = 0.67;
 +    y(6:100) = 0.02;
 +    ​
 +    ksi = 6;
 +    for k = 0:dt:10
 +        ​
 +        y = [y(1), y, y(length(y))];​
 +        y1 = y;
 +        ​
 +        for i = 2:1:ksi+1
 +           y1(i) = D *( dt / dx^2 ) * ( y(i+1) + y(i-1)) + y(i) * (1 - 2*D*(dt/​dx^2));​
 +        end
 +        ​
 +        y = y1;
 +        y = y(2:​1:​length(y)-1);​
 +        ​
 +        plot(y)
 +        hold on
 +        ​
 +        % rownanie prostej przechodzacej przez dwa punkty
 +        % (x2 - x1)(y - y1) = (y2 - y1)(x - x1)
 +        yLine = -0.00407 * temp_k + 3.715;
 +        ​
 +        % zwiekszenie ksi 
 +        if y(ksi) >= yLine && ksi < length(y)-1
 +            ksi = ksi + 1;
 +        end
 +        ​
 +        % zwiekszenie temperatury o zadany prog i kolejna iteracja
 +        temp_k = temp_k + pN * dt;
 +        D = d0 * exp( -Q /( R * temp_k)) * 1 * 10^10;
 +
 +    end
 +   % disp(y);
 +   
 +end</​code>​
 +
 +
 +===== Drugi Program =====
 +
 +<code matlab>
 +temp = 780;
 +Q = 140000; ​
 +R = 8.3144;
 +temp_k = temp + 273; 
 +d0 = 0.000041;
 +D=d0*exp(-Q /(R * temp_k))*1E10 ;
 +dt = 0.01; 
 +dx = 0.1; 
 +pN = 0;
 +time = 50;
 +%Warunek początkowy NEUMANA
 +if (D*dt)/​dx^2<​=0.5
 +
 +    K(6:100) = 0.02; %wypełniamy 6-100 elementy stężeniem o wielkości 0.2
 +    K(1:5) = 0.67; %wypełniamy 1-5 elementy stężeniem o wielkości 0.67
 +    ksi = 6; %ustawiamy na którym elemencie jest granica ksi
 +    ​
 +    Clen = int32(time/​dt);​ %obliczamy ilość kroków
 +    C(1:Clen) = 0.0; %tworzymy tablicę wypełnioną zerami do której będzie ​
 +    %obliczane stężenie całego materiału w każdym kroku czasowym
 +    l = 1; %iterator powyższej tablicy
 +    ​
 +    for k = 0:dt:time %zaczynamy proces
 +        ​
 +        C(l) = trapz(K); %do tablicy zapisujemy stężenie w materiale
 +        l = l + 1;
 +          ​
 +        K = [K(1), K, K(length(K))];​ %zwiększamy rozmiar tablicy z lewej i z prawej strony
 +        K1 = K; %przepisujemy tablicę do tablicy pomocniczej (k+1)
 +        K(ksi+1) = K(ksi); %powielamy element graniczny do obliczeń
 +        for i = 2:1:ksi+1 %obliczamy stężenie do granicy
 +           K1(i) = D*(dt/​dx^2)*(K(i+1)+K(i-1)) + K(i)*(1 - 2*D*(dt/​dx^2));​
 +           ​%obliczanie stężenia dla i-tego elementu
 +        end
 +            ​
 +        K = K1; %przepisanie tablicy spowrotem
 +        K = K(2:​1:​length(K)-1);​ %zmniejszenie rozmiaru tablicy do stanu początkowego
 +        ​
 +        if (mod(l,100) == 2) %wyświetlamy co 100 element na podstawie iteratora
 +            plot(K) %wyświetlamy wykres stężenia w materiale
 +            hold on
 +        end
 +
 +        y=-0.004074074074074075*temp+3.7155555555555555;​
 +        %na podstawie wyznaczonego wzoru na prostą G-S wyliczamy stężenie
 +        %dla danej temperatury
 +        if K(ksi) >= y && ksi < length(K)-1 %jeśli stężenie jest wyższe ​
 +            %niż G-S i ksi nie jest ostatnim elementem to zwiększamy granicę
 +            ksi = ksi + 1;
 +        end
 +      ​
 +        temp = temp + pN * dt; %zwiększamy co krok temperaturę
 +        temp_k = temp + 273;
 +        D=d0*exp(-Q /(R * temp_k))*1E10;​ %ponownie obliczamy wsp. dyfuzji
 +        if (D*dt)/​dx^2>​0.5 %sprawdzamy czy warunek NEUMANNA nadal jest spełniony
 +            disp('​warunek neumanna przestal byc spelniony dla temp'​);​
 +            disp(temp);
 +            break;
 +        end
 +    end
 +    figure;
 +    plot(C); %wyświetlamy wykres zmiany stężenia co krok
 +end
 +
 +</​code>​
 +
 +
 +===== Drugi Program Maciek =====
 +
 +<code matlab>
 +temp = 780;
 +Q = 140000; ​
 +R = 8.3144;
 +temp_k = temp + 273; 
 +d0 = 0.000041;
 +D=d0*exp(-Q /(R * temp_k))*1E10 ;
 +dt = 0.01; 
 +dx = 0.1; 
 +pN = 0;
 +time = 50;
 +K(6:100) = 0.02; 
 +K(1:5) = 0.67; 
 +ksi = 6; 
 +    ​
 +Clen = int32(time/​dt);​
 +C(1:Clen) = 0.0; 
 +%Neuman
 +if (D*dt)/​dx^2<​=0.5
 +    ​
 +    j = 1;
 +    for k = 0:dt:time
 +        ​
 +        C(l) = trapz(K); %Calka
 +        j = j + 1;
 +        K = [K(1), K, K(length(K))];​
 +        TempK = K;
 +        K(ksi+1) = K(ksi);
 +        for i = 2:​1:​ksi+1 ​
 +           TempK (i) = D*(dt/​dx^2)*(K(i+1)+K(i-1)) + K(i)*(1 - 2*D*(dt/​dx^2));​
 +        end
 +            ​
 +        K = TempK;
 +        K = K(2:​1:​length(K)-1);​
 +        ​
 +        if (mod(j,100) == 2)
 +            plot(K)
 +            hold on
 +        end
 +
 +        y=-0.004074074074074075*temp+3.7155555555555555;​
 +        %zwiekszanie granicy
 +        if K(ksi) >= y && ksi < length(K)-1 ​
 +            ksi = ksi + 1;
 +        end
 +      ​
 +        temp = temp + pN * dt;
 +        temp_k = temp + 273;
 +        D=d0*exp(-Q /(R * temp_k))*1E10;​
 +        if (D*dt)/​dx^2>​0.5
 +            break;
 +        end
 +    end
 +    figure;
 +    plot(C);
 +end
 +
 </​code>​ </​code>​
studia/magisterskie/1sem/modelowanie_procesow_fizycznych.1460531542.txt.gz · ostatnio zmienione: 2016/04/13 09:12 przez 149.156.112.6