-TesseracT-

Untitled

Apr 17th, 2020
438
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 5.60 KB | None | 0 0
  1. %% 2a - Tidigare kod som krävs.
  2. clf
  3. clc
  4. clear all
  5. global CO2Emissions  CO2ConcRCP45 A tau_init k M_0 beta
  6.  
  7. % Ladda upp data
  8.  
  9. utslappRCP45;
  10. koncentrationerRCP45;
  11. radiativeForcingRCP45;
  12. NASATAnomali;
  13.  
  14. beta = 0.35;
  15. omvandlingsfaktor = 0.469;
  16. A = [0.113, 0.213, 0.258, 0.273, 0.1430];
  17. tau_init = [2.0, 12.2, 50.4, 243.3, inf];
  18. M_0 = 278.05158;
  19. k = 3.06e-3;
  20.  
  21. % lös diffekv för olika scenarion
  22. [B1, ~, ~] = uppg2a(0);
  23. [B_i, ~, ~] = uppg2a(1);
  24. [B_ii, ~, ~] = uppg2a(2);
  25. [B_iii, ~, ~] = uppg2a(3);
  26.  
  27. % beräkna RF
  28.  
  29. CO_2Conc = B1*omvandlingsfaktor; % Koncentrationsprofil fr?n modell i labb 1
  30. CO_2Conc_i = B_i*omvandlingsfaktor;
  31. CO_2Conc_ii = B_ii*omvandlingsfaktor;
  32. CO_2Conc_iii = B_iii*omvandlingsfaktor;
  33.  
  34. RF_CO2 = zeros(1, 2100-1765+1); % W/m^2 = J/(s m^2)
  35. RF_CO2_i = zeros(1, 2100-1765+1);
  36. RF_CO2_ii = zeros(1, 2100-1765+1);
  37. RF_CO2_iii = zeros(1, 2100-1765+1);
  38.  
  39. init_CO2_conc = M_0;
  40.  
  41. T = 1765:2100;
  42.  
  43. for i = 1:length(2100-1765+1)
  44.     RF_CO2(i) = 5.35*log(CO_2Conc(i)/init_CO2_conc);
  45.     RF_CO2_i(i) = 5.35*log(CO_2Conc_i(i)/init_CO2_conc);
  46.     RF_CO2_ii(i) = 5.35*log(CO_2Conc_ii(i)/init_CO2_conc);
  47.     RF_CO2_iii(i) = 5.35*log(CO_2Conc_iii(i)/init_CO2_conc);
  48. end
  49.  
  50. s = 0.9;
  51. RF_andra_amnen = totRadForcExclCO2AndAerosols(1:(2100-1765+1));
  52.  
  53. RF_aerosoler = totRadForcAerosols(1:(2100-1765+1));
  54.  
  55. RF_total = RF_andra_amnen + s*RF_aerosoler + RF_CO2;
  56. RF_total_i = RF_andra_amnen + s*RF_aerosoler + RF_CO2_i;
  57. RF_total_ii = RF_andra_amnen + s*RF_aerosoler + RF_CO2_ii;
  58. RF_total_iii = RF_andra_amnen + s*RF_aerosoler + RF_CO2_iii;
  59.  
  60. % beräkna temperaturer
  61. lambda = 0.8;
  62. kappa = 9;
  63. c = 4186;
  64. rho = 1020;
  65. h = 50;
  66. d = 200;
  67. global C1 C2
  68. C1 = c *  rho * h / (60 * 60 * 24 * 365);
  69. C2 = c *  rho * d / (60 * 60 * 24 * 365);
  70.  
  71. % Lös differentialekvation
  72. T = 0:(2100-1765+1);
  73.  
  74. [Psi1, ~] = solve2(T, RF_total, lambda, kappa);
  75. [Psi_i, ~] = solve2(T, RF_total_i, lambda, kappa);
  76. [Psi_ii, ~] = solve2(T, RF_total_ii, lambda, kappa);
  77. [Psi_iii, ~] = solve2(T, RF_total_iii, lambda, kappa);
  78.  
  79. meanTemp = 0; % beräknad medeltemperatur mellan 1951-1980 från modellen
  80.  
  81. for t = (1951-1765+1):(1980-1765+1)
  82.     meanTemp = meanTemp + Psi1(t);
  83. end
  84. meanTemp = meanTemp / (1980 - 1951 + 1);
  85.  
  86. T = (1765-1765+1):(2100-1765+1);
  87. plot(1765:2100, Psi1(T) - meanTemp)
  88. hold on;
  89. plot(1765:2100, Psi_i(T) - meanTemp)
  90. plot(1765:2100, Psi_ii(T) - meanTemp)
  91. plot(1765:2100, Psi_iii(T) - meanTemp)
  92. title('Temperaturförändringen över tid.')
  93. xlim([1765 2100])
  94. xlabel('Tid (År)')
  95. ylabel('\Delta T')
  96. legend({'Tidigare modell','Modell i)','Modell ii)', 'Modell iii)'},'Location','Best')
  97.  
  98. function [B1, B2, B3] = uppg2a(scenario)
  99.     global CO2Emissions A tau_init k beta
  100.     %Förindustriella begynnelsevärden
  101.     B_10 = 600;
  102.     B_20 = 600;
  103.     B_30 = 1500;
  104.     F_120 = 60;
  105.     F_210 = 15;
  106.     F_310 = 45;
  107.     F_230 = 45;
  108.     alpha_12 = F_120/B_10;
  109.     alpha_13 = 0;
  110.     alpha_21 = F_210/B_20;
  111.     alpha_23 = F_230/B_20;
  112.     alpha_31 = F_310/B_30;
  113.     alpha_32 = 0;
  114.     NPP0 = F_120;
  115.  
  116.     B1 = zeros(1, length(CO2Emissions));
  117.     B2 = zeros(1, length(CO2Emissions));
  118.     B3 = zeros(1, length(CO2Emissions));
  119.     B1(1)=B_10; % Begynnelsev?rden
  120.     B2(1)=B_20; % Begynnelsev?rden
  121.     B3(1)=B_30; % Begynnelsev?rden
  122.     B1_dot = zeros(1, length(CO2Emissions)+1);
  123.     B2_dot = 0;
  124.     B3_dot = 0;
  125.     inre_summa = zeros(1, 5);
  126.     impulssvar = zeros(1,length(CO2Emissions));
  127.    
  128.     U_2020 = CO2Emissions(2020-1765+1);
  129.     U = zeros(1, length(2100 - 1765 + 1));
  130.     for t = 1:(2020-1765+1)
  131.         U(t) = CO2Emissions(t);
  132.     end
  133.    
  134.     if scenario == 0 % utsläpp som vanligt
  135.         for t = (2021-1765+1):(2100-1765+1)
  136.             U(t) = CO2Emissions(t);
  137.         end
  138.    
  139.     elseif scenario == 1 % i)
  140.         decrement = -U_2020 / (2070-2020);
  141.         for t = (2021-1765+1):(2070-1765+1)
  142.             U(t) = U(t-1) - decrement;
  143.         end
  144.         for t = (2070-1765+1):(2100-1765+1)
  145.             U(t) = 0;
  146.         end
  147.        
  148.     elseif scenario == 2 % ii)
  149.         for t = (2021-1765+1):(2100-1765+1)
  150.             U(t) = U_2020;
  151.         end
  152.        
  153.     elseif scenario == 3 % iii)
  154.         increment = 2 * U_2020 / (2100-1765);
  155.         for t = (2021-1765+1):(2100-1765+1)
  156.             U(t) = U(t-1) + increment;
  157.         end
  158.        
  159.     end
  160.    
  161.     for t = 1:(2100-1765+1)
  162.  
  163.         NPP = NPP0*(1 + beta*log(B1(t)/B_10));
  164.         B1_dot(t) = alpha_31*B3(t) + alpha_21*B2(t) - NPP + U(t);
  165.         B2_dot = NPP -(alpha_23+alpha_21)*B2(t);
  166.         B2(t+1) = B2(t) + B2_dot;
  167.         B3_dot = alpha_23*B2(t)-alpha_31*B3(t);
  168.         B3(t+1) = B3(t)+ B3_dot;
  169.  
  170.         for tilde = 1:t
  171.             for i = 1:5
  172.                 inre_summa(i) = sum(A(i)*exp(-(t-tilde)/(tau_init(i)*k*sum(B1_dot(1:t)))));
  173.             end
  174.             impulssvar(tilde) = sum(inre_summa)*B1_dot(tilde);
  175.         end
  176.  
  177.         if t ~= length(CO2Emissions)
  178.             B1(t+1) = B_10 + sum(impulssvar) + sum(A) * (alpha_31*B3(t+1) + alpha_21*B2(t+1) - NPP + CO2Emissions(t+1));
  179.         else
  180.             B1(t+1) = B_10 + sum(impulssvar);
  181.         end
  182.  
  183.     end
  184.    
  185.     % Ta bort sista elementet för att få längd 736
  186.     B1 = B1(1:end-1);
  187.     B2 = B2(1:end-1);
  188.     B3 = B3(1:end-1);
  189. end
  190.  
  191. % solve eq. (2, 3) using the forward Euler method
  192. function [Psi1, Psi2] = solve2(T, RF_total, lambda, kappa)
  193.     global C1 C2
  194.     Psi1 = zeros(1, length(T));
  195.     Psi2 = zeros(1, length(T));
  196.     Psi1(1) = 0;
  197.     Psi2(1) = 0;
  198.     for t = 1:max(T)
  199.         Psi1(t+1) = Psi1(t) + (RF_total(t) - Psi1(t)/lambda - kappa*(Psi1(t) - Psi2(t))) / C1;
  200.         Psi2(t+1) = Psi2(t) + kappa*(Psi1(t) - Psi2(t)) / C2;
  201.     end
  202. end
Advertisement
Add Comment
Please, Sign In to add comment