Introduction
Introduction Statistics Contact Development Disclaimer Help
tgCosmoLongsteps.m - cosmo - front and backend for Markov-Chain Monte Carlo inv…
git clone git://src.adamsgaard.dk/cosmo
Log
Files
Refs
README
LICENSE
---
tgCosmoLongsteps.m (28426B)
---
1 function [c10Bes,c26Als,c21Nes,c14Cs,lump] = ...
2 gCosmoLongsteps(ErateInt,ErateGla,tDegla,dtGla,dtIdtG,fixed_stuff);
3 %also saves concentration histories in "lump".
4 %gCosmoLongsteps2: Allows computation with fixed intervals
5 %Now, it is possible to compute the forward solution as a linear
6 %approximation:
7 switch fixed_stuff.testmode
8 case 'fast',
9 dtInt = dtGla*dtIdtG;
10 case 'run_advec', %trim model to steplength in time
11 disp('gCosmoLongstep called with mode run_advec. Takes a long time!')
12 dt_advec = fixed_stuff.dt,
13 tDegla = round(tDegla/dt_advec)*dt_advec,
14 dtGla = round(dtGla/dt_advec)*dt_advec,
15 dtInt = round(dtGla*dtIdtG/dt_advec)*dt_advec,
16 case 'linearized'
17 Gpr0 = fixed_stuff.Gpr0; %matrix of partial derivatives at or near m…
18 mpr0 = fixed_stuff.mpr0; %model at or near maximum likelihood soluti…
19 dpr0 = fixed_stuff.dpr0; %proper g(m0)
20 %>........ Model parameters. Her we may switch parameters on and off
21 % fs.mname{1} = 'ErateInt';
22 % fs.mname{2} = 'ErateGla';
23 % fs.mname{3} = 'tDegla';
24 % fs.mname{4} = 'dtGla';
25 % fs.mname{5} = 'dtIdtG';
26 for im=1:length(fixed_stuff.mname) %we pack elements of the m-vector:
27 m(im,1) = eval(fixed_stuff.mname{im});
28 end
29 mpr = m2mpr(m,fixed_stuff);
30 dpr = dpr0 + Gpr0*(mpr-mpr0);
31 d = dpr2d(dpr,fixed_stuff);
32 c10Bes = NaN*ones(size(fixed_stuff.zobs));
33 c26Als = c10Bes; c21Nes = c10Bes; c14Cs = c10Bes;
34 Nzobs = length(fixed_stuff.zobs);
35 for iNucl = 1:length(fixed_stuff.Nucleides)
36 switch fixed_stuff.Nucleides{iNucl}
37 case '10Be', c10Bes = d((iNucl-1)*Nzobs + (1:Nzobs));%d=[d;cBes(…
38 case '26Al', c26Als = d((iNucl-1)*Nzobs + (1:Nzobs));%d=[d;cAls(…
39 case '21Ne', c21Nes = d((iNucl-1)*Nzobs + (1:Nzobs));%d=[d;cNes(…
40 case '14C', c14Cs = d((iNucl-1)*Nzobs + (1:Nzobs));%d=[d;cCs(:…
41 end
42 end
43 lump.zss = [];
44 lump.ts = [];
45 lump.ExposureTimeSinceNow = [];
46
47 return
48 otherwise,
49 error('fixed_stuff,.testmode must be ''fast'' or ''run_advec'' or ''…
50 end
51
52
53 Period_gla = dtGla; %Names used i previous implementations and below
54 Period_int = dtInt; %Names used i previous implementations and below
55 erate_gla = ErateGla;
56 erate_int = ErateInt;
57
58 % Rock density in kg/m3
59 %rho = 2650;
60 rho = fixed_stuff.rho;
61
62 %Half lives
63 H10=1.39e6;
64 L10=log(2)/H10;
65 H26=0.705e6;
66 L26=log(2)/H26;
67 H14=5730;
68 L14=log(2)/H14;
69
70 %Absorption depth scale in kg/m2
71 Tau_spal=1600;
72 Tau_nm = 9900;
73 Tau_fm = 35000;
74
75 Tau_spal1=1570;
76 Tau_spal2=58.87;
77
78 Tau_nm1 = 1600;
79 Tau_nm2 = 10300;
80 Tau_nm3 = 30000;
81
82 Tau_fm1 = 1000;
83 Tau_fm2 = 15200;
84 Tau_fm3 = 76000;
85
86
87 a1 = 1.0747;
88 a2 = -0.0747;
89 b1 = -0.050;
90 b2 = 0.845;
91 b3 = 0.205;
92 c1 = 0.010;
93 c2 = 0.615;
94 c3 = 0.375;
95
96 % ratios between fast muon capture and negative muons
97 nm_rat10 = 0.1070/(0.1070+0.0940);
98 fm_rat10 = 0.0940/(0.1070+0.0940);
99 nm_rat26 = 0.7/(0.7+0.6);
100 fm_rat26 = (0.6/(0.7+0.6));
101
102 % unconfirmed ratios
103 nm_rat14 = 0.4/(0.4+0.35);
104 fm_rat14 = 0.35/(0.4+0.35);
105 nm_rat21 = 2.3/(2.3+2.1);
106 fm_rat21 = 2.1/(2.3+2.1);
107
108
109 %>>>BHJ: To be used in analytical expressions
110 % L_spal = Tau_spal/rho; %Decay depth, exp(-z/L)
111 % L_nm = Tau_nm/rho;
112 % L_fm = Tau_fm/rho;
113 %"K" in analytical expressions = P10_top_spal, etc.
114
115 %10Be production
116 % Input fra Kasper
117 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - St…
118 P10_top_spal=5.33e3; %atoms/kg/yr
119 P10_top_nm=0.106e3; %atoms/kg/yr
120 P10_top_fm=0.093e3; %atoms/kg/yr
121
122 if exist('fixed_stuff.be_prod_spall', 'var') == 1 && ...
123 exist('fixed_stuff.be_prod_muons', 'var') == 1
124 if ~isempty(fixed_stuff.be_prod_spall) && ...
125 ~isempty(fixed_stuff.be_prod_muons)
126 P10_top_spal = fixed_stuff.be_prod_spall;
127 P10_top_nm = nm_rat10*fixed_stuff.be_prod_muons;
128 P10_top_fm = fm_rat10*fixed_stuff.be_prod_muons;
129 end
130 end
131
132 %Reference values for Kasper
133 %P10_top_spal=5.33e3; %atoms/kg/yr
134 %P10_top_nm=0.106e3; %atoms/kg/yr
135 %P10_top_fm=0.093e3; %atoms/kg/yr
136 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - End
137
138 %P10_top_spal=5.33e3; %atoms/kg/yr
139 %P10_top_spal=4.76e3; %atoms/kg/yr
140
141 %P10_top_nm=0.106e3; %atoms/kg/yr
142 %P10_top_nm=0.959e3; %atoms/kg/yr
143
144 %P10_top_fm=0.093e3; %atoms/kg/yr
145 %P10_top_fm=0.084e3; %atoms/kg/yr
146
147 %Prodi rate for Corbett's sample GU110
148 %P10_top_spal=8.04e3; %atoms/kg/yr
149 %P10_top_nm=0.125e3; %atoms/kg/yr
150 %P10_top_fm=0.114e3; %atoms/kg/yr
151
152
153 % P10_spal = P10_top_spal*exp(-z*rho/Tau_spal);
154 % P10_nm = P10_top_nm*exp(-z*rho/Tau_nm);
155 % P10_fm = P10_top_fm*exp(-z*rho/Tau_fm);
156 %
157 % P10_total = (P10_spal + P10_nm + P10_fm);
158
159 %26Al production
160
161 % Input fra Kasper
162 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - St…
163 P26_top_spal=31.1e3; %atoms/kg/yr
164 P26_top_nm=0.7e3; %atoms/kg/yr
165 P26_top_fm=0.6e3; %atoms/kg/yr
166
167 if exist('fixed_stuff.al_prod_spall', 'var') == 1 && ...
168 exist('fixed_stuff.al_prod_muons', 'var') == 1
169 if ~isempty(fixed_stuff.al_prod_spall) && ...
170 ~isempty(fixed_stuff.al_prod_muons)
171 P26_top_spal = fixed_stuff.al_prod_spall;
172 P26_top_nm = nm_rat26*fixed_stuff.al_prod_muons;
173 P26_top_fm = fm_rat26*fixed_stuff.al_prod_muons;
174 end
175 end
176
177 %Reference values for Kasper
178 %P26_top_spal=31.1e3; %atoms/kg/yr
179 %P26_top_nm=0.7e3; %atoms/kg/yr
180 %P26_top_fm=0.6e3; %atoms/kg/yr
181 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - End
182
183 %P26_top_spal=31.1e3; %atoms/kg/yr
184 %P26_top_nm=0.7e3; %atoms/kg/yr
185 %P26_top_fm=0.6e3; %atoms/kg/yr
186
187 %P26_top_spal=54.25e3; %atoms/kg/yr
188 %P26_top_nm=1.074e3; %atoms/kg/yr
189 %P26_top_fm=0.923e3; %atoms/kg/yr
190
191 % P26_spal = P26_top_spal*exp(-z*rho/Tau_spal);
192 % P26_nm = P26_top_nm*exp(-z*rho/Tau_nm);
193 % P26_fm = P26_top_fm*exp(-z*rho/Tau_fm);
194 %
195 % P26_total = (P26_spal + P26_nm + P26_fm);
196
197 %21Ne production
198 P21_top_spal=20.8e3; %atoms/kg/yr
199 P21_top_nm=0.4e3; %atoms/kg/yr
200 P21_top_fm=0.35e3; %atoms/kg/yr
201
202 if exist('fixed_stuff.ne_prod_spall', 'var') == 1 && ...
203 exist('fixed_stuff.ne_prod_muons', 'var') == 1
204 if ~isempty(fixed_stuff.ne_prod_spall) && ...
205 ~isempty(fixed_stuff.ne_prod_muons)
206 P21_top_spal = fixed_stuff.ne_prod_spall;
207 P21_top_nm = nm_rat21*fixed_stuff.ne_prod_muons;
208 P21_top_fm = fm_rat21*fixed_stuff.ne_prod_muons;
209 end
210 end
211
212 % P21_spal = P21_top_spal*exp(-z*rho/Tau_spal);
213 % P21_nm = P21_top_nm*exp(-z*rho/Tau_nm);
214 % P21_fm = P21_top_fm*exp(-z*rho/Tau_fm);
215 %
216 % P21_total = (P21_spal + P21_nm + P21_fm);
217
218 %14C production
219 P14_top_spal=14.6e3; %atoms/kg/yr
220 P14_top_nm=2.3e3; %atoms/kg/yr
221 P14_top_fm=2.1e3; %atoms/kg/yr
222
223 if exist('fixed_stuff.c_prod_spall', 'var') == 1 && ...
224 exist('fixed_stuff.c_prod_muons', 'var') == 1
225 if ~isempty(fixed_stuff.c_prod_spall) && ...
226 ~isempty(fixed_stuff.c_prod_muons)
227 P14_top_spal = fixed_stuff.c_prod_spall;
228 P14_top_nm = nm_rat14*fixed_stuff.c_prod_muons;
229 P14_top_fm = fm_rat14*fixed_stuff.c_prod_muons;
230 end
231 end
232
233 % P14_spal = P14_top_spal*exp(-z*rho/Tau_spal);
234 % P14_nm = P14_top_nm*exp(-z*rho/Tau_nm);
235 % P14_fm = P14_top_fm*exp(-z*rho/Tau_fm);
236 %
237 % P14_total = (P14_spal + P14_nm + P14_fm);
238 %>>>>> BHJ: And now the analytical solution
239 %INPUTS:
240 % tau: Decay time of nucleide
241 % ts: End times of intervals. Normally ts(1)=0=now, and ts(2:end)<0, so
242 % that ts is a decreasing vector, going more and more negative.
243 % zs: Present lamina depths below present surface z=0.
244 % ers: ers(i) is the erosion rate in interval between ts(i) and ts(i+1),
245 % Ks: Ks(i) is the production rate in interval between ts(i) and ts(i+1)
246 % L: Penetration depth of radiation in play. dC/dt(z) = K*exp(-z/L)
247 %OUTPUTS:
248 %Css: Concentrations of nucleide. Css(it,iz) applies to ts(it) and zs(iz)
249 %zss,tss: depths and times so that mesh(zss,tss,Css) works.%The call:
250 %[Css,zss,tss] = C_all_intervals(ts,zs,Ks,tau,ers,L)
251
252 % ts = -fliplr(time); %First element in ts is the start of the model run
253 % zs = fixed_stuff.z;
254
255 %Setting up Gla/Int timing:
256
257 switch fixed_stuff.CycleMode
258 case 'FixedC'
259 if isempty('fixed_stuff.C')
260 C=round((2.6e6-tDegla+dtGla*dtIdtG)/(dtGla*(1+dtIdtG)));
261 else
262 C=fixed_stuff.C;
263 end
264 tstart_glacial = -tDegla+Period_int -(C:-1:1)*(Period_gla+Period_int…
265 tend_glacial = tstart_glacial + Period_gla;
266 case 'FixedQuaternary'
267 tQuat=-fixed_stuff.tQuaternary; %time of first glaciation, adjust as…
268 Cfloor=floor((2.6e6-tDegla+dtGla*dtIdtG)/(dtGla*(1+dtIdtG)));
269 try
270 tStartGlaRegular = -tDegla+Period_int -(Cfloor:-1:1)*(Period_gla+Per…
271 catch
272 keyboard
273 end
274 tStartIntRegular = tStartGlaRegular + Period_gla;
275 dtFirstCycle = tStartGlaRegular(1)-tQuat;
276 if dtFirstCycle<=0 %the regular cycles fitted the Quaternary exactly
277 tstart_glacial = tStartGlaRegular;
278 tend_glacial = tStartIntRegular;
279 C = Cfloor;
280 % disp('FixedQuaternary: the regular cycles fitted the Quaternary …
281 else
282 dtFirstGla = dtFirstCycle / (1+dtIdtG);
283 tstart_glacial = [tQuat,tStartGlaRegular];
284 tend_glacial = [tQuat+dtFirstGla,tStartIntRegular];
285 C = Cfloor+1;
286 end
287 case 'FixedTimes'
288 if any(isnan(fixed_stuff.tGal))
289 error(['fixed_stuff.CycleMode=''FixedTimes'' not implemented yet'])
290 else
291 t_start_gla = fixed_stuff.tGlas; %load or compute fixed times of g…
292 t_start_int = fixed_stuff.tInt; %load or compute fixed times of gl…
293 end
294 C = length(t_start_gla);
295 case 'd18OTimes'
296 tStarts = fixed_stuff.tStarts;
297 relExpos = fixed_stuff.relExpos;
298 relExpos(end+1) = 1; % !!!!!! We hereby impose full exposure …
299 %d18Oth should not determine the "start of Holocene": update by tD…
300 tStarts(end+1) = -tDegla;
301 % C = length(t_start_gla);
302 end
303 if strcmp(fixed_stuff.CycleMode,'d18OTimes')
304 tsLong = [-inf,tStarts(:)',0];
305 is_ints2 = relExpos; %If relExpos==1 then is_ints2 is 1, i.e. it is an…
306 is_ints2 = [1,is_ints2(:)']; %Exposed before the Quaternary
307 else %regular intervals
308 tsLong = sort([-inf,tstart_glacial,tend_glacial,0]);
309 is_ints2 = 0.5*(1 + -(-1).^(1:2*C+1)); %[1 0 1 0 ... 0 1]
310 end
311 ers2 = erate_int*is_ints2 + erate_gla*(1-is_ints2);
312
313 tau_10Be = 1/L10;
314 tau_26Al = 1/L26;
315 tau_21Ne = inf;
316 tau_14C = 1/L14;
317
318 L_spal = Tau_spal/rho; %Decay depth, exp(-z/L)
319 L_nm = Tau_nm/rho;
320 L_fm = Tau_fm/rho;
321
322 % is_ints(1) = 1; %Ice free before simulation period
323 % ers(1)= erate_int; %same as we used yo initiate the advective solution
324
325 K_10Be_spal = is_ints2*P10_top_spal;
326 K_10Be_nm = is_ints2*P10_top_nm;
327 K_10Be_fm = is_ints2*P10_top_fm;
328
329 K_26Al_spal = is_ints2*P26_top_spal;
330 K_26Al_nm = is_ints2*P26_top_nm;
331 K_26Al_fm = is_ints2*P26_top_fm;
332
333 K_21Ne_spal = is_ints2*P21_top_spal;
334 K_21Ne_nm = is_ints2*P21_top_nm;
335 K_21Ne_fm = is_ints2*P21_top_fm;
336
337 K_14C_spal = is_ints2*P14_top_spal;
338 K_14C_nm = is_ints2*P14_top_nm;
339 K_14C_fm = is_ints2*P14_top_fm;
340
341 zobs = fixed_stuff.zobs;
342 % tic
343 %Model 10Be:
344 [Css_10Be_spal,zss,tss,ExposureTimeSinceNow] ...
345 = C_all_intervals2(tsLong,zobs,K_10Be_spal,tau_10Be,ers2…
346 [Css_10Be_nm ] = C_all_intervals2(tsLong,zobs,K_10Be_nm ,tau_10Be,ers2…
347 [Css_10Be_fm ] = C_all_intervals2(tsLong,zobs,K_10Be_fm ,tau_10Be,ers2…
348 c10Bes = Css_10Be_spal(:,end)+Css_10Be_nm(:,end)+Css_10Be_fm(:,end);
349 % cBe_analyt = c10Be_prof(1);
350
351 %Model 26Al:
352 [Css_26Al_spal] = C_all_intervals2(tsLong,zobs,K_26Al_spal,tau_26Al,ers2…
353 [Css_26Al_nm ] = C_all_intervals2(tsLong,zobs,K_26Al_nm ,tau_26Al,ers2…
354 [Css_26Al_fm ] = C_all_intervals2(tsLong,zobs,K_26Al_fm ,tau_26Al,ers2…
355 c26Als = Css_26Al_spal(:,end)+Css_26Al_nm(:,end)+Css_26Al_fm(:,end);
356 % cAl_analyt = c26Al_prof(1);
357
358 %Model 21Ne:
359 [Css_21Ne_spal] = C_all_intervals2(tsLong,zobs,K_21Ne_spal,tau_21Ne,ers2…
360 [Css_21Ne_nm ] = C_all_intervals2(tsLong,zobs,K_21Ne_nm ,tau_21Ne,ers2…
361 [Css_21Ne_fm ] = C_all_intervals2(tsLong,zobs,K_21Ne_fm ,tau_21Ne,ers2…
362 c21Nes = Css_21Ne_spal(:,end)+Css_21Ne_nm(:,end)+Css_21Ne_fm(:,end);
363 % cNe_analyt = c21Ne_prof(1);
364
365 %Model 14C:
366 [Css_14C_spal] = C_all_intervals2(tsLong,zobs,K_14C_spal,tau_14C,ers2,L_…
367 [Css_14C_nm ] = C_all_intervals2(tsLong,zobs,K_14C_nm ,tau_14C,ers2,L_…
368 [Css_14C_fm ] = C_all_intervals2(tsLong,zobs,K_14C_fm ,tau_14C,ers2,L_…
369 c14Cs = Css_14C_spal(:,end)+Css_14C_nm(:,end)+Css_14C_fm(:,end);
370 % cC_analyt = c14C_prof(1);
371
372 if nargout==5
373 lump.zss = zss;
374 lump.ts = tss(1,:);
375 lump.ExposureTimeSinceNow =ExposureTimeSinceNow;
376 lump.c14Css = Css_14C_spal+Css_14C_nm+Css_14C_fm;
377 lump.c10Bess = Css_10Be_spal+Css_10Be_nm+Css_10Be_fm;
378 lump.c26Alss = Css_26Al_spal+Css_26Al_nm+Css_26Al_fm;
379 lump.c21Ness = Css_21Ne_spal+Css_21Ne_nm+Css_21Ne_fm;
380 end
381 % disp(['analyt time:']); toc
382
383 switch fixed_stuff.testmode
384 case 'fast', return
385 case 'run_advec', %just go on
386 otherwise,
387 error('fixed_stuff,.testmode must be ''fast'' or ''run_advec''')
388 end
389
390 % error('fast did not return')
391 %#####################********************################
392 % Start of optional advective solution
393 %#####################********************################
394
395 D = fixed_stuff.D;
396 z = fixed_stuff.z;
397
398 % Rock density in kg/m3
399 rho = 2650;
400
401 %Half lives
402 H10=1.39e6;
403 L10=log(2)/H10;
404
405 H26=0.705e6;
406 L26=log(2)/H26;
407
408 H14=5730;
409 L14=log(2)/H14;
410
411 %Absorption depth scale in kg/m2
412 Tau_spal=1600;
413 Tau_nm = 9900;
414 Tau_fm = 35000;
415
416 %>>>BHJ: To be used in analytical expressions
417 % L_spal = Tau_spal/rho; %Decay depth, exp(-z/L)
418 % L_nm = Tau_nm/rho;
419 % L_fm = Tau_fm/rho;
420 %"K" in analytical expressions = P10_top_spal, etc.
421
422 %10Be production
423 P10_top_spal=5.33e3; %atoms/kg/yr
424 %P10_top_spal=4.76e3; %atoms/kg/yr
425
426 P10_top_nm=0.106e3; %atoms/kg/yr
427 %P10_top_nm=0.959e3; %atoms/kg/yr
428
429 P10_top_fm=0.093e3; %atoms/kg/yr
430 %P10_top_fm=0.084e3; %atoms/kg/yr
431
432 P10_spal = P10_top_spal*exp(-z*rho/Tau_spal);
433 P10_nm = P10_top_nm*exp(-z*rho/Tau_nm);
434 P10_fm = P10_top_fm*exp(-z*rho/Tau_fm);
435
436 %P10_spal = P10_top_spal*(a1*exp(-z*rho/Tau_spal1)+a2*exp(-z*rho/Tau_spa…
437 %P10_nm = P10_top_nm*(b1*exp(-z*rho/Tau_nm1)+b2*exp(-z*rho/Tau_nm2)+b3*e…
438 %P10_fm = P10_top_fm*(c1*exp(-z*rho/Tau_fm1)+c2*exp(-z*rho/Tau_fm2)+c3*e…
439
440 P10_total = (P10_spal + P10_nm + P10_fm);
441
442 %26Al production
443 P26_top_spal=31.1e3; %atoms/kg/yr
444 P26_top_nm=0.7e3; %atoms/kg/yr
445 P26_top_fm=0.6e3; %atoms/kg/yr
446
447 P26_spal = P26_top_spal*exp(-z*rho/Tau_spal);
448 P26_nm = P26_top_nm*exp(-z*rho/Tau_nm);
449 P26_fm = P26_top_fm*exp(-z*rho/Tau_fm);
450
451 P26_total = (P26_spal + P26_nm + P26_fm);
452
453 %21Ne production
454 P21_top_spal=20.8e3; %atoms/kg/yr
455 P21_top_nm=0.4e3; %atoms/kg/yr
456 P21_top_fm=0.35e3; %atoms/kg/yr
457
458 P21_spal = P21_top_spal*exp(-z*rho/Tau_spal);
459 P21_nm = P21_top_nm*exp(-z*rho/Tau_nm);
460 P21_fm = P21_top_fm*exp(-z*rho/Tau_fm);
461
462 P21_total = (P21_spal + P21_nm + P21_fm);
463
464 %14C production
465 P14_top_spal=14.6e3; %atoms/kg/yr
466 P14_top_nm=2.3e3; %atoms/kg/yr
467 P14_top_fm=2.1e3; %atoms/kg/yr
468
469 P14_spal = P14_top_spal*exp(-z*rho/Tau_spal);
470 P14_nm = P14_top_nm*exp(-z*rho/Tau_nm);
471 P14_fm = P14_top_fm*exp(-z*rho/Tau_fm);
472
473 P14_total = (P14_spal + P14_nm + P14_fm);
474
475
476 %Starting concentrations, equilibrium since eternity
477 %This is computed as integrated part of the analytical solution
478 switch fixed_stuff.Cstart
479 case 'from dat',
480 C10start = fixed_stuff.C10_start;
481 C26start = fixed_stuff.C26_start;
482 C21start = fixed_stuff.C21_start;
483 C14start = fixed_stuff.C14_start;
484 case 'extend interglacial'
485 %Making the start profile a "fm" steady state profile:
486 ers = erate_int; %assume non-glaciated start conditions
487
488 [C10_steady_spal] = Lal2002eq8(z,P10_top_spal,L10,rho,Tau_spal,e…
489 [C10_steady_nm] = Lal2002eq8(z,P10_top_nm, L10,rho,Tau_nm, ers…
490 [C10_steady_fm] = Lal2002eq8(z,P10_top_fm, L10,rho,Tau_fm, ers…
491 C10start = C10_steady_spal +C10_steady_nm +C10_steady_fm;
492
493 [C26_steady_spal] = Lal2002eq8(z,P26_top_spal,L26,rho,Tau_spal,e…
494 [C26_steady_nm] = Lal2002eq8(z,P26_top_nm, L26,rho,Tau_nm, ers…
495 [C26_steady_fm] = Lal2002eq8(z,P26_top_fm, L26,rho,Tau_fm, ers…
496 C26start = C26_steady_spal +C26_steady_nm +C26_steady_fm;
497
498 L21 = 0; %stable
499 [C21_steady_spal] = Lal2002eq8(z,P21_top_spal,L21,rho,Tau_spal,e…
500 [C21_steady_nm] = Lal2002eq8(z,P21_top_nm, L21,rho,Tau_nm, ers…
501 [C21_steady_fm] = Lal2002eq8(z,P21_top_fm, L21,rho,Tau_fm, ers…
502 C21start = C21_steady_spal +C21_steady_nm +C21_steady_fm;
503
504 [C14_steady_spal] = Lal2002eq8(z,P14_top_spal,L14,rho,Tau_spal,e…
505 [C14_steady_nm] = Lal2002eq8(z,P14_top_nm, L14,rho,Tau_nm, ers…
506 [C14_steady_fm] = Lal2002eq8(z,P14_top_fm, L14,rho,Tau_fm, ers…
507 C14start = C14_steady_spal +C14_steady_nm +C14_steady_fm;
508 case 'zeros'
509 C10start = zeros(size(z));
510 C26start = C10start; C21start = C10start; C14start = C10start;
511 end
512 C10 = C10start;
513 C26 = C26start;
514 C21 = C21start;
515 C14 = C14start;
516
517 % Number of glacial-interglacial cycles
518 % C = 1;
519 C = fixed_stuff.C;
520
521 for i=1:C;
522 gla_init(i) = (Period_gla*i-Period_gla)+(Period_int*i-Period_int);
523 gla_end(i) = (Period_gla*i)+(Period_int*i-Period_int);
524
525 gla_hist_for((2*i)-1) = gla_init(i);
526 gla_hist_for(2*i) = gla_end(i);
527 end
528
529 l = 1; %<----------------- beware of l and 1
530 gla_hist(:,l) = gla_hist_for;
531
532
533
534
535 time_gla(l) = Period_gla;
536 time_int(l) = Period_int;
537
538 dt = fixed_stuff.dt; %time step.
539 %Note that in gcosmo_advec.m glaciations must be full multiples of dt.
540 %Here, in gcosmo_analyt this is not required.
541
542 %Number of timesteps
543 %Bem?rk, her tilf?jes "Holoc?n", s? det an bekvemt v?re tDegla
544 % ts(l) = (gla_hist(end,l)+Period_int)/dt;
545 ts(l) = (gla_hist(end,l)+tDegla)/dt;
546
547 time(1) = 0;
548
549 P10_total_decay = P10_total*dt*exp(-L10*dt);
550
551 P26_total_decay = P26_total*dt*exp(-L26*dt);
552
553 P21_total_decay = P21_total*dt;
554
555 P14_total_decay = P14_total*dt*exp(-L14*dt);
556
557 tic %advec
558 for i=1:ts(l),
559
560 D10 = C10*L10*dt;
561 S10_int = P10_total_decay(:) - D10(:);
562 S10_gla = -D10;
563
564 D26 = C26*L26*dt;
565 S26_int = P26_total_decay(:) - D26(:);
566 S26_gla = -D26;
567
568 D21 = zeros(size(z))';
569 S21_int = P21_total_decay(:) - D21(:);
570 S21_gla = -D21;
571
572 D14 = C14*L14*dt;
573 S14_int = P14_total_decay(:) - D14(:);
574 S14_gla = -D14;
575
576 time(i+1) = dt*i;
577
578
579 for j=1:2:length(gla_hist(:,l))
580 if time(i) >= gla_hist(j,l);
581 erate = erate_gla(l);
582 S10 = S10_gla;
583 S26 = S26_gla;
584 S21 = S21_gla;
585 S14 = S14_gla;
586 is_int = 0; %<<<< BHJ
587 end
588
589 if time(i) >= gla_hist(j+1,l);
590 erate = erate_int(l);
591 S10 = S10_int;
592 S26 = S26_int;
593 S21 = S21_int;
594 S14 = S14_int;
595 is_int = 1; %<<<< BHJ
596 end
597 end
598
599
600 erosion(i) = erate;
601 is_ints(i+1) = is_int;
602
603 C10 = update_profile(C10,z,S10,erate,dt);
604 C26 = update_profile(C26,z,S26,erate,dt);
605 C21 = update_profile(C21,z,S21,erate,dt);
606 C14 = update_profile(C14,z,S14,erate,dt);
607
608 % try
609 % C10 = update_profile_dummy(C10,z,S10,erate,dt); %disp(['C10, i=',num2s…
610 % C26 = update_profile_dummy(C26,z,S26,erate,dt); %disp(['C26, i=',num2s…
611 % C21 = update_profile_dummy(C21,z,S21,erate,dt); %disp(['C21, i=',num2s…
612 % C14 = update_profile_dummy(C14,z,S14,erate,dt); %disp(['C14, i=',num2s…
613 % catch
614 % keyboard
615 % end
616 D10_top(i) = D10(1);
617 S10_top(i) = S10(1);
618 C10_top(i) = C10(1);
619
620 D26_top(i) = D26(1);
621 S26_top(i) = S26(1);
622 C26_top(i) = C26(1);
623
624 D21_top(i) = D21(1);
625 S21_top(i) = S21(1);
626 C21_top(i) = C21(1);
627
628 D14_top(i) = D14(1);
629 S14_top(i) = S14(1);
630 C14_top(i) = C14(1);
631
632 %line(C10,z,'color','r');
633
634 %>>>> BHJ: Pack valus for subsequent analytical run
635 %L_spal, L_nm and L_rm were defined above
636 %{
637 K_10Be_spal(i+1) = P10_top_spal;
638 K_10Be_nm(i+1) = P10_top_nm;
639 K_10Be_fm(i+1) = P10_top_fm;
640
641 K_26Al_spal(i+1) = P26_top_spal;
642 K_26Al_nm(i+1) = P26_top_nm;
643 K_26Al_fm(i+1) = P26_top_fm;
644
645 K_21Ne_spal(i+1) = P21_top_spal;
646 K_21Ne_nm(i+1) = P21_top_nm;
647 K_21Ne_fm(i+1) = P21_top_fm;
648
649 K_14C_spal(i+1) = P14_top_spal;
650 K_14C_nm(i+1) = P14_top_nm;
651 K_14C_fm(i+1) = P14_top_fm;
652 %}
653 ers(i+1) = erate;
654
655 end;
656
657 t_time(l) = time((C*Period_gla+(C-1)*Period_int+tDegla)/dt+1);
658
659 D10_top = D10_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
660 S10_top = S10_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
661 C10_top = C10_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
662
663 D26_top = D26_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
664 S26_top = S26_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
665 C26_top = C26_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
666
667 D21_top = D21_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
668 S21_top = S21_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
669 C21_top = C21_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
670
671 D14_top = D14_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
672 S14_top = S14_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
673 C14_top = C14_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
674
675 %Concentration in top node at the end of the last interglacia
676 eval(['C10_top_p',num2str(l),'= C10_top(end);']);
677 eval(['C26_top_p',num2str(l),'= C26_top(end);']);
678 eval(['C21_top_p',num2str(l),'= C21_top(end);']);
679 eval(['C14_top_p',num2str(l),'= C14_top(end);']);
680
681 %The output values cNe,cC,cAl,CBe:
682 cBe = C10_top(end);
683 cAl = C26_top(end);
684 cNe = C21_top(end);
685 cC = C14_top(end);
686
687 disp(['advec time:']); toc
688 tic %analyt
689 %>>>>> BHJ: And now the analytical solution
690 %INPUTS:
691 % tau: Decay time of nucleide
692 % ts: End times of intervals. Normally ts(1)=0=now, and ts(2:end)<0, so
693 % that ts is a decreasing vector, going more and more negative.
694 % zs: Present lamina depths below present surface z=0.
695 % ers: ers(i) is the erosion rate in interval between ts(i) and ts(i+1),
696 % Ks: Ks(i) is the production rate in interval between ts(i) and ts(i+1)
697 % L: Penetration depth of radiation in play. dC/dt(z) = K*exp(-z/L)
698 %OUTPUTS:
699 %Css: Concentrations of nucleide. Css(it,iz) applies to ts(it) and zs(iz)
700 %zss,tss: depths and times so that mesh(zss,tss,Css) works.%The call:
701 %[Css,zss,tss] = C_all_intervals(ts,zs,Ks,tau,ers,L)
702
703 ts = -fliplr(time); %First element in ts is the start of the model run
704 zs = z;
705
706 %Timing of constant intervals:
707 %An infinite "interglacial" followed by C glaciations and C interglacials
708 tstart_glacial = -(C:-1:1)*(Period_gla+Period_int);
709 tend_glacial = tstart_glacial + Period_gla;
710 t_bounds = sort([-inf,tstart_glacial,tend_glacial,0]);
711 is_ints2 = 0.5*(1 + (-1).^(1:2*C+1)); %[1 0 1 0 ... 0 1]
712
713 ers2 = erate_int*is_ints2 + erate_gla*(1-is_ints2);
714
715 tau_10Be = 1/L10;
716 tau_26Al = 1/L26;
717 tau_21Ne = inf;
718 tau_14C = 1/L14;
719
720 L_spal = Tau_spal/rho; %Decay depth, exp(-z/L)
721 L_nm = Tau_nm/rho;
722 L_fm = Tau_fm/rho;
723
724 is_ints(1) = 1; %Ice free before simulation period
725 ers(1)= erate_int; %same as we used yo initiate the advective solution
726
727 K_10Be_spal = is_ints*P10_top_spal;
728 K_10Be_nm = is_ints*P10_top_nm;
729 K_10Be_fm = is_ints*P10_top_fm;
730
731 K_26Al_spal = is_ints*P26_top_spal;
732 K_26Al_nm = is_ints*P26_top_nm;
733 K_26Al_fm = is_ints*P26_top_fm;
734
735 K_21Ne_spal = is_ints*P21_top_spal;
736 K_21Ne_nm = is_ints*P21_top_nm;
737 K_21Ne_fm = is_ints*P21_top_fm;
738
739 K_14C_spal = is_ints*P14_top_spal;
740 K_14C_nm = is_ints*P14_top_nm;
741 K_14C_fm = is_ints*P14_top_fm;
742
743 tic
744 %Model 10Be:
745 [Css_10Be_spal,zss,tss] = C_all_intervals(ts,zs,K_10Be_spal,tau_10Be,ers…
746 [Css_10Be_nm ,zss,tss] = C_all_intervals(ts,zs,K_10Be_nm ,tau_10Be,ers…
747 [Css_10Be_fm ,zss,tss] = C_all_intervals(ts,zs,K_10Be_fm ,tau_10Be,ers…
748 c10Be_prof = Css_10Be_spal(:,end)+Css_10Be_nm(:,end)+Css_10Be_fm(:,end);
749 cBe_analyt = c10Be_prof(1);
750
751 %Model 26Al:
752 [Css_26Al_spal,zss,tss] = C_all_intervals(ts,zs,K_26Al_spal,tau_26Al,ers…
753 [Css_26Al_nm ,zss,tss] = C_all_intervals(ts,zs,K_26Al_nm ,tau_26Al,ers…
754 [Css_26Al_fm ,zss,tss] = C_all_intervals(ts,zs,K_26Al_fm ,tau_26Al,ers…
755 c26Al_prof = Css_26Al_spal(:,end)+Css_26Al_nm(:,end)+Css_26Al_fm(:,end);
756 cAl_analyt = c26Al_prof(1);
757
758 %Model 21Ne:
759 [Css_21Ne_spal,zss,tss] = C_all_intervals(ts,zs,K_21Ne_spal,tau_21Ne,ers…
760 [Css_21Ne_nm ,zss,tss] = C_all_intervals(ts,zs,K_21Ne_nm ,tau_21Ne,ers…
761 [Css_21Ne_fm ,zss,tss] = C_all_intervals(ts,zs,K_21Ne_fm ,tau_21Ne,ers…
762 c21Ne_prof = Css_21Ne_spal(:,end)+Css_21Ne_nm(:,end)+Css_21Ne_fm(:,end);
763 cNe_analyt = c21Ne_prof(1);
764
765 %Model 14C:
766 [Css_14C_spal,zss,tss] = C_all_intervals(ts,zs,K_14C_spal,tau_14C,ers,L_…
767 [Css_14C_nm ,zss,tss] = C_all_intervals(ts,zs,K_14C_nm ,tau_14C,ers,L_…
768 [Css_14C_fm ,zss,tss] = C_all_intervals(ts,zs,K_14C_fm ,tau_14C,ers,L_…
769 c14C_prof = Css_14C_spal(:,end)+Css_14C_nm(:,end)+Css_14C_fm(:,end);
770 cC_analyt = c14C_prof(1);
771
772 disp(['analyt time:']); toc
773
774 %Now compare results:
775 [cBe,cBe_analyt;...
776 cAl,cAl_analyt;...
777 cNe,cNe_analyt;...
778 cC,cC_analyt]
779 rel_error=[(cBe-cBe_analyt)/cBe;...
780 (cAl-cAl_analyt)/cAl;...
781 (cNe-cNe_analyt)/cNe;...
782 (cC-cC_analyt)/cC]
783
784 figure; set(gcf,'name','AdvecSurface vs AnalyTrace')
785 subplot(2,2,1)
786 plot(ts(2:end),(Css_10Be_fm(1,2:end)+Css_10Be_nm(1,2:end)+Css_10Be_spal(…
787 hold on
788 plot(ts(2:end),C10_top,'-')
789 title('10Be')
790 legend('Analy','Advec','Location','Northwest')
791
792 subplot(2,2,2)
793 plot(ts(2:end),(Css_26Al_fm(1,2:end)+Css_26Al_nm(1,2:end)+Css_26Al_spal(…
794 hold on
795 plot(ts(2:end),C26_top,'-')
796 title('26Al')
797 legend('Analy','Advec','Location','Northwest')
798
799 subplot(2,2,3)
800 plot(ts(2:end),(Css_21Ne_fm(1,2:end)+Css_21Ne_nm(1,2:end)+Css_21Ne_spal(…
801 hold on
802 plot(ts(2:end),C21_top,'-')
803 title('21Ne')
804 legend('Analy','Advec','Location','Northwest')
805
806 subplot(2,2,4)
807 plot(ts(2:end),(Css_14C_fm(1,2:end)+Css_14C_nm(1,2:end)+Css_14C_spal(1,2…
808 hold on
809 plot(ts(2:end),C14_top,'-')
810 title('14C')
811 legend('Analy','Advec','Location','Northwest')
812
813 figure; set(gcf,'name','(Adv-Ana)/Adv')
814 subplot(2,2,1)
815 plot(ts(2:end),(Css_10Be_fm(1,2:end)+Css_10Be_nm(1,2:end)+Css_10Be_spal(…
816 title('10Be')
817
818 subplot(2,2,2)
819 plot(ts(2:end),(Css_26Al_fm(1,2:end)+Css_26Al_nm(1,2:end)+Css_26Al_spal(…
820 hold on
821 title('26Al')
822
823 subplot(2,2,3)
824 plot(ts(2:end),(Css_21Ne_fm(1,2:end)+Css_21Ne_nm(1,2:end)+Css_21Ne_spal(…
825 hold on
826 title('21Ne')
827
828 subplot(2,2,4)
829 plot(ts(2:end),(Css_14C_fm(1,2:end)+Css_14C_nm(1,2:end)+Css_14C_spal(1,2…
830 hold on
831 title('14C')
832
833 figure; set(gcf,'name','Compare c(z,t=0)')
834 subplot(2,2,1)
835 plot(zs,c10Be_prof,'.g'); hold on %analyt
836 plot(zs,C10,'.m'); %advec
837 plot(zs,C10start,'-b'); %advec
838 title('10Be(z), t=0')
839 xlabel('Depth [m]')
840
841 subplot(2,2,2)
842 plot(zs,c26Al_prof,'.g'); hold on %analyt
843 plot(zs,C26,'.m'); %advec
844 plot(zs,C26start,'-b'); %advec
845 title('26Al(z), t=0')
846 xlabel('Depth [m]')
847
848 subplot(2,2,3)
849 plot(zs,c21Ne_prof,'.g'); hold on %analyt
850 plot(zs,C21,'.m') %advec
851 plot(zs,C21start,'-b'); %advec
852 title('21Ne(z), t=0')
853 xlabel('Depth [m]')
854
855 subplot(2,2,4)
856 plot(zs,c14C_prof,'.g'); hold on %analyt
857 plot(zs,C14,'.m'); %advec
858 plot(zs,C14start,'-b'); %advec
859 title('14C(z), t=0')
860 xlabel('Depth [m]')
861
862 %And now make check plots of (zobs,cBes) etc.
863 subplot(2,2,1)
864 plot(zobs,c10Bes,'*')
865 subplot(2,2,2)
866 plot(zobs,c26Als,'*')
867 subplot(2,2,3)
868 plot(zobs,c21Nes,'*')
869 subplot(2,2,4)
870 plot(zobs,c14Cs,'*')
871
872 % figure; set(gcf,'name','(Adv-Ana)/Adv')
873 % subplot(2,2,1)
874 % plot(ts(2:end),(Css_14C_fm(1,2:end)+Css_14C_nm(1,2:end)+Css_14C_spal(1…
875 keyboard
876 %erosion = erosion(1:(C*Period_gla+C*Period_int)/dt);
877
878 %C10_C26_top = -1*zeros((5*max(P_gla)+5*max(P_int))/100,l);
879 %C10_C26_top(:,l) = C10_top./C26_top;
880 %eval(['C10_C26_top_',num2str(l),'= C10_top./C26_top;']);
881
882 %C14_C10_top(:,l) = C14_top./C10_top;
883 %eval(['C14_C10_top_',num2str(l),'= C14_top./C10_top;']);
884
885 %C10_C21_top = -1*zeros((5*max(P_gla)+5*max(P_int))/100,l);
886 %C10_C21_top(:,l) = C10_top./C21_top;
887 %eval(['C10_C21_top_',num2str(l),'= C10_top./C21_top;']);
888
889 %C14_C26_top = -1*zeros((5*max(P_gla)+5*max(P_int))/100,l);
890 %C14_C26_top(:,l) = C14_top./C26_top;
891 %eval(['C14_C26_top_',num2str(l),'= C14_top./C26_top;']);
892
893 %C26_C21_top = -1*zeros((5*max(P_gla)+5*max(P_int))/100,l);
894 %C26_C21_top(:,l) = C26_top./C21_top;
895 %eval(['C26_C21_top_',num2str(l),'= C26_top./C21_top;']);
896
897 %C14_C21_top = -1*zeros((5*max(P_gla)+5*max(P_int))/100,l);
898 %C14_C21_top(:,l) = C14_top./C21_top;
899 %eval(['C14_C21_top_',num2str(l),'= C14_top./C21_top;']);
900
901
902 %eval(['erosion_hist_',num2str(l),'= erosion(:);']);
903 return
904 end
905
906
907 function C_out = update_profile_dummy(C,z,S,erate,dt);
908 C_out=C+S;
909
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.