commit 4fa3880f78b313fbed83421bde579002a13f3161
parent 8a28298294a16fcc0dac17476c0f1c9551b2f869
Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
Date: Wed, 21 Oct 2015 12:28:23 +0200
add zobs, use supplied rock density
Diffstat:
5 files changed, 911 insertions(+), 37 deletions(-)
diff --git a/matlab/file_scanner_mcmc_starter.m b/matlab/file_scanner_mcmc_starter.m
@@ -74,6 +74,7 @@ while 1
[sample_id, name, email, lat, long, ...
be_conc, al_conc, c_conc, ne_conc, ...
be_uncer, al_uncer, c_uncer, ne_uncer, ...
+ be_zobs, al_zobs, c_zobs, ne_zobs, ...
be_prod, al_prod, c_prod, ne_prod, ...
rock_density, ...
epsilon_gla_min, epsilon_gla_max, ...
@@ -88,6 +89,7 @@ while 1
n_walkers, outfolder, ...
be_conc, al_conc, c_conc, ne_conc, ...
be_uncer, al_uncer, c_uncer, ne_uncer, ...
+ be_zobs, al_zobs, c_zobs, ne_zobs, ...
be_prod, al_prod, c_prod, ne_prod, ...
rock_density, ...
epsilon_gla_min, epsilon_gla_max, ...
diff --git a/matlab/import_php_file.m b/matlab/import_php_file.m
@@ -1,4 +1,4 @@
-function [sample_id,name,email,lat,long,be_conc,al_conc,c_conc,ne_conc,be_uncer,al_uncer,c_uncer,ne_uncer,be_prod,al_prod,c_prod,ne_prod,rock_density,epsilon_gla_min,epsilon_gla_max,epsilon_int_min,epsilon_int_max,t_degla,t_degla_uncer,record,record_threshold_min,record_threshold_max] = import_php_file(filename, startRow, endRow)
+function [sample_id,name,email,lat,long,be_conc,al_conc,c_conc,ne_conc,be_uncer,al_uncer,c_uncer,ne_uncer,be_zobs,al_zobs,c_zobs,ne_zobs,be_prod,al_prod,c_prod,ne_prod,rock_density,epsilon_gla_min,epsilon_gla_max,epsilon_int_min,epsilon_int_max,t_degla,t_degla_uncer,record,record_threshold_min,record_threshold_max] = import_php_file(filename, startRow, endRow)
%% import_php_file.m
% Automatically generated using the `uiimport` tool in Matlab.
@@ -8,16 +8,16 @@ function [sample_id,name,email,lat,long,be_conc,al_conc,c_conc,ne_conc,be_uncer,
% by the col vector) are converted to numbers.
%IMPORTFILE Import numeric data from a text file as column vectors.
-% [SAMPLEID,NAME,EMAIL,LAT,LONG,BE_CONC,AL_CONC,C_CONC,NE_CONC,BE_UNCER,AL_UNCER,C_UNCER,NE_UNCER,BE_PROD,AL_PROD,C_PROD,NE_PROD,ROCK_DENSITY,EPSILON_GLA_MIN,EPSILON_GLA_MAX,EPSILON_INT_MIN,EPSILON_INT_MAX,T_DEGLA,T_DEGLA_UNCER,RECORD,RECORD_THRESHOLD_MIN,RECORD_THRESHOLD_MAX]
+% [SAMPLEID,NAME,EMAIL,LAT,LONG,BE_CONC,AL_CONC,C_CONC,NE_CONC,BE_UNCER,AL_UNCER,C_UNCER,NE_UNCER,BE_ZOBS,AL_ZOBS,C_ZOBS,NE_ZOBS,BE_PROD,AL_PROD,C_PROD,NE_PROD,ROCK_DENSITY,EPSILON_GLA_MIN,EPSILON_GLA_MAX,EPSILON_INT_MIN,EPSILON_INT_MAX,T_DEGLA,T_DEGLA_UNCER,RECORD,RECORD_THRESHOLD_MIN,RECORD_THRESHOLD_MAX]
% = IMPORTFILE(FILENAME) Reads data from text file FILENAME for the
% default selection.
%
-% [SAMPLEID,NAME,EMAIL,LAT,LONG,BE_CONC,AL_CONC,C_CONC,NE_CONC,BE_UNCER,AL_UNCER,C_UNCER,NE_UNCER,BE_PROD,AL_PROD,C_PROD,NE_PROD,ROCK_DENSITY,EPSILON_GLA_MIN,EPSILON_GLA_MAX,EPSILON_INT_MIN,EPSILON_INT_MAX,T_DEGLA,T_DEGLA_UNCER,RECORD,RECORD_THRESHOLD_MIN,RECORD_THRESHOLD_MAX]
+% [SAMPLEID,NAME,EMAIL,LAT,LONG,BE_CONC,AL_CONC,C_CONC,NE_CONC,BE_UNCER,AL_UNCER,C_UNCER,NE_UNCER,BE_ZOBS,AL_ZOBS,C_ZOBS,NE_ZOBS,BE_PROD,AL_PROD,C_PROD,NE_PROD,ROCK_DENSITY,EPSILON_GLA_MIN,EPSILON_GLA_MAX,EPSILON_INT_MIN,EPSILON_INT_MAX,T_DEGLA,T_DEGLA_UNCER,RECORD,RECORD_THRESHOLD_MIN,RECORD_THRESHOLD_MAX]
% = IMPORTFILE(FILENAME, STARTROW, ENDROW) Reads data from rows STARTROW
% through ENDROW of text file FILENAME.
%
% Example:
-% [sampleid,name,email,lat,long,be_conc,al_conc,c_conc,ne_conc,be_uncer,al_uncer,c_uncer,ne_uncer,be_prod,al_prod,c_prod,ne_prod,rock_density,epsilon_gla_min,epsilon_gla_max,epsilon_int_min,epsilon_int_max,t_degla,t_degla_uncer,record,record_threshold_min,record_threshold_max]
+% [sampleid,name,email,lat,long,be_conc,al_conc,c_conc,ne_conc,be_uncer,al_uncer,c_uncer,ne_uncer,be_zobs,al_zobs,c_zobs,ne_zobs,be_prod,al_prod,c_prod,ne_prod,rock_density,epsilon_gla_min,epsilon_gla_max,epsilon_int_min,epsilon_int_max,t_degla,t_degla_uncer,record,record_threshold_min,record_threshold_max]
% = importfile('cosmo_pgpzvt',1, 1);
%
% See also TEXTSCAN.
@@ -33,7 +33,8 @@ end
%% Read columns of data as strings:
% For more information, see the TEXTSCAN documentation.
-formatSpec = '%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%[^\n\r]';
+%formatSpec = '%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%[^\n\r]';
+formatSpec = '%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%[^\n\r]';
%% Open the text file.
fileID = fopen(filename,'r');
@@ -63,7 +64,8 @@ end
numericData = NaN(size(dataArray{1},1),size(dataArray,2));
% the columns in col are numeric
-for col=[6,7,8,9,10,11,12,13,18,19,20,21,22,23,24,26,27]
+%for col=[6,7,8,9,10,11,12,13,18,19,20,21,22,23,24,26,27]
+for col=[6:28, 30:31]
% Converts strings in the input cell array to numbers. Replaced non-numeric
% strings with NaN.
rawData = dataArray{col};
@@ -98,42 +100,47 @@ end
%% Split data into numeric and cell columns.
-% rows with numbers
-rawNumericColumns = raw(:, [6:24, 26:27]);
+% rows with numbers, check that range matches values in for loop l. 68 and
+% the list below
+rawNumericColumns = raw(:, [6:28, 30:31]);
% rows with strings
-rawCellColumns = raw(:, [1:5, 25]);
+rawCellColumns = raw(:, [1:5, 29]);
%% Allocate imported array to column variable names
% use rawCellColumns(:, i) for text fields and
% cell2mat(rawNumericColumns(:, i)) for numeric fields
-sample_id = rawCellColumns(:, 1);
-name = rawCellColumns(:, 2);
-email = rawCellColumns(:, 3);
-lat = rawCellColumns(:, 4);
-long = rawCellColumns(:, 5);
-be_conc = cell2mat(rawNumericColumns(:, 1));
-al_conc = cell2mat(rawNumericColumns(:, 2));
-c_conc = cell2mat(rawNumericColumns(:, 3));
-ne_conc = cell2mat(rawNumericColumns(:, 4));
-be_uncer = cell2mat(rawNumericColumns(:, 5));
-al_uncer = cell2mat(rawNumericColumns(:, 6));
-c_uncer = cell2mat(rawNumericColumns(:, 7));
-ne_uncer = cell2mat(rawNumericColumns(:, 8));
-be_prod = cell2mat(rawNumericColumns(:, 9));
-al_prod = cell2mat(rawNumericColumns(:, 10));
-c_prod = cell2mat(rawNumericColumns(:, 11));
-ne_prod = cell2mat(rawNumericColumns(:, 12));
-rock_density = cell2mat(rawNumericColumns(:, 13));
-epsilon_gla_min = cell2mat(rawNumericColumns(:, 14));
-epsilon_gla_max = cell2mat(rawNumericColumns(:, 15));
-epsilon_int_min = cell2mat(rawNumericColumns(:, 16));
-epsilon_int_max = cell2mat(rawNumericColumns(:, 17));
-t_degla = cell2mat(rawNumericColumns(:, 18));
-t_degla_uncer = cell2mat(rawNumericColumns(:, 19));
-record = rawCellColumns(:, 6);
-record_threshold_min = cell2mat(rawNumericColumns(:, 20));
-record_threshold_max = cell2mat(rawNumericColumns(:, 21));
+sample_id = rawCellColumns(:, 1); % 1
+name = rawCellColumns(:, 2); % 2
+email = rawCellColumns(:, 3); % 3
+lat = rawCellColumns(:, 4); % 4
+long = rawCellColumns(:, 5); % 5
+be_conc = cell2mat(rawNumericColumns(:, 1)); % 6
+al_conc = cell2mat(rawNumericColumns(:, 2)); % 7
+c_conc = cell2mat(rawNumericColumns(:, 3)); % 8
+ne_conc = cell2mat(rawNumericColumns(:, 4)); % 9
+be_uncer = cell2mat(rawNumericColumns(:, 5)); % 10
+al_uncer = cell2mat(rawNumericColumns(:, 6)); % 11
+c_uncer = cell2mat(rawNumericColumns(:, 7)); % 12
+ne_uncer = cell2mat(rawNumericColumns(:, 8)); % 13
+be_zobs = cell2mat(rawNumericColumns(:, 9)); % 14
+al_zobs = cell2mat(rawNumericColumns(:, 10)); % 15
+c_zobs = cell2mat(rawNumericColumns(:, 11)); % 16
+ne_zobs = cell2mat(rawNumericColumns(:, 12)); % 17
+be_prod = cell2mat(rawNumericColumns(:, 13)); % 18
+al_prod = cell2mat(rawNumericColumns(:, 14)); % 19
+c_prod = cell2mat(rawNumericColumns(:, 15)); % 20
+ne_prod = cell2mat(rawNumericColumns(:, 16)); % 21
+rock_density = cell2mat(rawNumericColumns(:, 17)); % 22
+epsilon_gla_min = cell2mat(rawNumericColumns(:, 18)); % 23
+epsilon_gla_max = cell2mat(rawNumericColumns(:, 19)); % 24
+epsilon_int_min = cell2mat(rawNumericColumns(:, 20)); % 25
+epsilon_int_max = cell2mat(rawNumericColumns(:, 21)); % 26
+t_degla = cell2mat(rawNumericColumns(:, 22)); % 27
+t_degla_uncer = cell2mat(rawNumericColumns(:, 23)); % 28
+record = rawCellColumns(:, 6); % 29
+record_threshold_min = cell2mat(rawNumericColumns(:, 24)); % 30
+record_threshold_max = cell2mat(rawNumericColumns(:, 25)); % 31
diff --git a/matlab/m_pakke2014maj11/gCosmoLongsteps.m b/matlab/m_pakke2014maj11/gCosmoLongsteps.m
@@ -0,0 +1,856 @@
+function [c10Bes,c26Als,c21Nes,c14Cs,lump] = ...
+ gCosmoLongsteps(ErateInt,ErateGla,tDegla,dtGla,dtIdtG,fixed_stuff);
+%also saves concentration histories in "lump".
+%gCosmoLongsteps2: Allows computation with fixed intervals
+%Now, it is possible to compute the forward solution as a linear
+%approximation:
+switch fixed_stuff.testmode
+ case 'fast',
+ dtInt = dtGla*dtIdtG;
+ case 'run_advec', %trim model to steplength in time
+ disp('gCosmoLongstep called with mode run_advec. Takes a long time!')
+ dt_advec = fixed_stuff.dt,
+ tDegla = round(tDegla/dt_advec)*dt_advec,
+ dtGla = round(dtGla/dt_advec)*dt_advec,
+ dtInt = round(dtGla*dtIdtG/dt_advec)*dt_advec,
+ case 'linearized'
+ Gpr0 = fixed_stuff.Gpr0; %matrix of partial derivatives at or near maximum likelihood solution
+ mpr0 = fixed_stuff.mpr0; %model at or near maximum likelihood solution
+ dpr0 = fixed_stuff.dpr0; %proper g(m0)
+ %>........ Model parameters. Her we may switch parameters on and off
+ % fs.mname{1} = 'ErateInt';
+ % fs.mname{2} = 'ErateGla';
+ % fs.mname{3} = 'tDegla';
+ % fs.mname{4} = 'dtGla';
+ % fs.mname{5} = 'dtIdtG';
+ for im=1:length(fixed_stuff.mname) %we pack elements of the m-vector:
+ m(im,1) = eval(fixed_stuff.mname{im});
+ end
+ mpr = m2mpr(m,fixed_stuff);
+ dpr = dpr0 + Gpr0*(mpr-mpr0);
+ d = dpr2d(dpr,fixed_stuff);
+ c10Bes = NaN*ones(size(fixed_stuff.zobs));
+ c26Als = c10Bes; c21Nes = c10Bes; c14Cs = c10Bes;
+ Nzobs = length(fixed_stuff.zobs);
+ for iNucl = 1:length(fixed_stuff.Nucleides)
+ switch fixed_stuff.Nucleides{iNucl}
+ case '10Be', c10Bes = d((iNucl-1)*Nzobs + (1:Nzobs));%d=[d;cBes(:)];
+ case '26Al', c26Als = d((iNucl-1)*Nzobs + (1:Nzobs));%d=[d;cAls(:)];
+ case '21Ne', c21Nes = d((iNucl-1)*Nzobs + (1:Nzobs));%d=[d;cNes(:)];
+ case '14C', c14Cs = d((iNucl-1)*Nzobs + (1:Nzobs));%d=[d;cCs(:)];
+ end
+ end
+ lump.zss = [];
+ lump.ts = [];
+ lump.ExposureTimeSinceNow = [];
+
+ return
+ otherwise,
+ error('fixed_stuff,.testmode must be ''fast'' or ''run_advec'' or ''linearized''')
+end
+
+
+Period_gla = dtGla; %Names used i previous implementations and below
+Period_int = dtInt; %Names used i previous implementations and below
+erate_gla = ErateGla;
+erate_int = ErateInt;
+
+% Rock density in kg/m3
+%rho = 2650;
+rho = fixed_stuff.rho;
+
+%Half lives
+H10=1.39e6;
+L10=log(2)/H10;
+H26=0.705e6;
+L26=log(2)/H26;
+H14=5730;
+L14=log(2)/H14;
+
+%Absorption depth scale in kg/m2
+Tau_spal=1600;
+Tau_nm = 9900;
+Tau_fm = 35000;
+
+Tau_spal1=1570;
+Tau_spal2=58.87;
+
+Tau_nm1 = 1600;
+Tau_nm2 = 10300;
+Tau_nm3 = 30000;
+
+Tau_fm1 = 1000;
+Tau_fm2 = 15200;
+Tau_fm3 = 76000;
+
+
+a1 = 1.0747;
+a2 = -0.0747;
+b1 = -0.050;
+b2 = 0.845;
+b3 = 0.205;
+c1 = 0.010;
+c2 = 0.615;
+c3 = 0.375;
+
+%>>>BHJ: To be used in analytical expressions
+% L_spal = Tau_spal/rho; %Decay depth, exp(-z/L)
+% L_nm = Tau_nm/rho;
+% L_fm = Tau_fm/rho;
+%"K" in analytical expressions = P10_top_spal, etc.
+
+%10Be production
+% Input fra Kasper
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - Start
+P10_top_spal=5.33e3; %atoms/kg/yr
+P10_top_nm=0.106e3; %atoms/kg/yr
+P10_top_fm=0.093e3; %atoms/kg/yr
+
+%Reference values for Kasper
+%P10_top_spal=5.33e3; %atoms/kg/yr
+%P10_top_nm=0.106e3; %atoms/kg/yr
+%P10_top_fm=0.093e3; %atoms/kg/yr
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - End
+
+%P10_top_spal=5.33e3; %atoms/kg/yr
+%P10_top_spal=4.76e3; %atoms/kg/yr
+
+%P10_top_nm=0.106e3; %atoms/kg/yr
+%P10_top_nm=0.959e3; %atoms/kg/yr
+
+%P10_top_fm=0.093e3; %atoms/kg/yr
+%P10_top_fm=0.084e3; %atoms/kg/yr
+
+%Prodi rate for Corbett's sample GU110
+%P10_top_spal=8.04e3; %atoms/kg/yr
+%P10_top_nm=0.125e3; %atoms/kg/yr
+%P10_top_fm=0.114e3; %atoms/kg/yr
+
+
+% P10_spal = P10_top_spal*exp(-z*rho/Tau_spal);
+% P10_nm = P10_top_nm*exp(-z*rho/Tau_nm);
+% P10_fm = P10_top_fm*exp(-z*rho/Tau_fm);
+%
+% P10_total = (P10_spal + P10_nm + P10_fm);
+
+%26Al production
+
+% Input fra Kasper
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - Start
+P26_top_spal=31.1e3; %atoms/kg/yr
+P26_top_nm=0.7e3; %atoms/kg/yr
+P26_top_fm=0.6e3; %atoms/kg/yr
+
+%Reference values for Kasper
+%P26_top_spal=31.1e3; %atoms/kg/yr
+%P26_top_nm=0.7e3; %atoms/kg/yr
+%P26_top_fm=0.6e3; %atoms/kg/yr
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - End
+
+%P26_top_spal=31.1e3; %atoms/kg/yr
+%P26_top_nm=0.7e3; %atoms/kg/yr
+%P26_top_fm=0.6e3; %atoms/kg/yr
+
+%P26_top_spal=54.25e3; %atoms/kg/yr
+%P26_top_nm=1.074e3; %atoms/kg/yr
+%P26_top_fm=0.923e3; %atoms/kg/yr
+
+% P26_spal = P26_top_spal*exp(-z*rho/Tau_spal);
+% P26_nm = P26_top_nm*exp(-z*rho/Tau_nm);
+% P26_fm = P26_top_fm*exp(-z*rho/Tau_fm);
+%
+% P26_total = (P26_spal + P26_nm + P26_fm);
+
+%21Ne production
+P21_top_spal=20.8e3; %atoms/kg/yr
+P21_top_nm=0.4e3; %atoms/kg/yr
+P21_top_fm=0.35e3; %atoms/kg/yr
+
+% P21_spal = P21_top_spal*exp(-z*rho/Tau_spal);
+% P21_nm = P21_top_nm*exp(-z*rho/Tau_nm);
+% P21_fm = P21_top_fm*exp(-z*rho/Tau_fm);
+%
+% P21_total = (P21_spal + P21_nm + P21_fm);
+
+%14C production
+P14_top_spal=14.6e3; %atoms/kg/yr
+P14_top_nm=2.3e3; %atoms/kg/yr
+P14_top_fm=2.1e3; %atoms/kg/yr
+
+% P14_spal = P14_top_spal*exp(-z*rho/Tau_spal);
+% P14_nm = P14_top_nm*exp(-z*rho/Tau_nm);
+% P14_fm = P14_top_fm*exp(-z*rho/Tau_fm);
+%
+% P14_total = (P14_spal + P14_nm + P14_fm);
+%>>>>> BHJ: And now the analytical solution
+%INPUTS:
+% tau: Decay time of nucleide
+% ts: End times of intervals. Normally ts(1)=0=now, and ts(2:end)<0, so
+% that ts is a decreasing vector, going more and more negative.
+% zs: Present lamina depths below present surface z=0.
+% ers: ers(i) is the erosion rate in interval between ts(i) and ts(i+1),
+% Ks: Ks(i) is the production rate in interval between ts(i) and ts(i+1)
+% L: Penetration depth of radiation in play. dC/dt(z) = K*exp(-z/L)
+%OUTPUTS:
+%Css: Concentrations of nucleide. Css(it,iz) applies to ts(it) and zs(iz)
+%zss,tss: depths and times so that mesh(zss,tss,Css) works.%The call:
+%[Css,zss,tss] = C_all_intervals(ts,zs,Ks,tau,ers,L)
+
+% ts = -fliplr(time); %First element in ts is the start of the model run
+% zs = fixed_stuff.z;
+
+%Setting up Gla/Int timing:
+
+switch fixed_stuff.CycleMode
+ case 'FixedC'
+ if isempty('fixed_stuff.C')
+ C=round((2.6e6-tDegla+dtGla*dtIdtG)/(dtGla*(1+dtIdtG)));
+ else
+ C=fixed_stuff.C;
+ end
+ tstart_glacial = -tDegla+Period_int -(C:-1:1)*(Period_gla+Period_int);
+ tend_glacial = tstart_glacial + Period_gla;
+ case 'FixedQuaternary'
+ tQuat=-fixed_stuff.tQuaternary; %time of first glaciation, adjust as desired
+ Cfloor=floor((2.6e6-tDegla+dtGla*dtIdtG)/(dtGla*(1+dtIdtG)));
+ try
+ tStartGlaRegular = -tDegla+Period_int -(Cfloor:-1:1)*(Period_gla+Period_int);
+ catch
+ keyboard
+ end
+ tStartIntRegular = tStartGlaRegular + Period_gla;
+ dtFirstCycle = tStartGlaRegular(1)-tQuat;
+ if dtFirstCycle<=0 %the regular cycles fitted the Quaternary exactly
+ tstart_glacial = tStartGlaRegular;
+ tend_glacial = tStartIntRegular;
+ C = Cfloor;
+% disp('FixedQuaternary: the regular cycles fitted the Quaternary exactly')
+ else
+ dtFirstGla = dtFirstCycle / (1+dtIdtG);
+ tstart_glacial = [tQuat,tStartGlaRegular];
+ tend_glacial = [tQuat+dtFirstGla,tStartIntRegular];
+ C = Cfloor+1;
+ end
+ case 'FixedTimes'
+ if any(isnan(fixed_stuff.tGal))
+ error(['fixed_stuff.CycleMode=''FixedTimes'' not implemented yet'])
+ else
+ t_start_gla = fixed_stuff.tGlas; %load or compute fixed times of glaciation starts
+ t_start_int = fixed_stuff.tInt; %load or compute fixed times of glaciation ends
+ end
+ C = length(t_start_gla);
+ case 'd18OTimes'
+ tStarts = fixed_stuff.tStarts;
+ relExpos = fixed_stuff.relExpos;
+ relExpos(end+1) = 1; % !!!!!! We hereby impose full exposure during the Holocene
+ %d18Oth should not determine the "start of Holocene": update by tDegla
+ tStarts(end+1) = -tDegla;
+% C = length(t_start_gla);
+end
+if strcmp(fixed_stuff.CycleMode,'d18OTimes')
+ tsLong = [-inf,tStarts(:)',0];
+ is_ints2 = relExpos; %If relExpos==1 then is_ints2 is 1, i.e. it is an interglacial
+ is_ints2 = [1,is_ints2(:)']; %Exposed before the Quaternary
+else %regular intervals
+ tsLong = sort([-inf,tstart_glacial,tend_glacial,0]);
+ is_ints2 = 0.5*(1 + -(-1).^(1:2*C+1)); %[1 0 1 0 ... 0 1]
+end
+ers2 = erate_int*is_ints2 + erate_gla*(1-is_ints2);
+
+tau_10Be = 1/L10;
+tau_26Al = 1/L26;
+tau_21Ne = inf;
+tau_14C = 1/L14;
+
+L_spal = Tau_spal/rho; %Decay depth, exp(-z/L)
+L_nm = Tau_nm/rho;
+L_fm = Tau_fm/rho;
+
+% is_ints(1) = 1; %Ice free before simulation period
+% ers(1)= erate_int; %same as we used yo initiate the advective solution
+
+K_10Be_spal = is_ints2*P10_top_spal;
+K_10Be_nm = is_ints2*P10_top_nm;
+K_10Be_fm = is_ints2*P10_top_fm;
+
+K_26Al_spal = is_ints2*P26_top_spal;
+K_26Al_nm = is_ints2*P26_top_nm;
+K_26Al_fm = is_ints2*P26_top_fm;
+
+K_21Ne_spal = is_ints2*P21_top_spal;
+K_21Ne_nm = is_ints2*P21_top_nm;
+K_21Ne_fm = is_ints2*P21_top_fm;
+
+K_14C_spal = is_ints2*P14_top_spal;
+K_14C_nm = is_ints2*P14_top_nm;
+K_14C_fm = is_ints2*P14_top_fm;
+
+zobs = fixed_stuff.zobs;
+% tic
+%Model 10Be:
+[Css_10Be_spal,zss,tss,ExposureTimeSinceNow] ...
+ = C_all_intervals2(tsLong,zobs,K_10Be_spal,tau_10Be,ers2,L_spal);
+[Css_10Be_nm ] = C_all_intervals2(tsLong,zobs,K_10Be_nm ,tau_10Be,ers2,L_nm );
+[Css_10Be_fm ] = C_all_intervals2(tsLong,zobs,K_10Be_fm ,tau_10Be,ers2,L_fm );
+c10Bes = Css_10Be_spal(:,end)+Css_10Be_nm(:,end)+Css_10Be_fm(:,end);
+% cBe_analyt = c10Be_prof(1);
+
+%Model 26Al:
+[Css_26Al_spal] = C_all_intervals2(tsLong,zobs,K_26Al_spal,tau_26Al,ers2,L_spal);
+[Css_26Al_nm ] = C_all_intervals2(tsLong,zobs,K_26Al_nm ,tau_26Al,ers2,L_nm );
+[Css_26Al_fm ] = C_all_intervals2(tsLong,zobs,K_26Al_fm ,tau_26Al,ers2,L_fm );
+c26Als = Css_26Al_spal(:,end)+Css_26Al_nm(:,end)+Css_26Al_fm(:,end);
+% cAl_analyt = c26Al_prof(1);
+
+%Model 21Ne:
+[Css_21Ne_spal] = C_all_intervals2(tsLong,zobs,K_21Ne_spal,tau_21Ne,ers2,L_spal);
+[Css_21Ne_nm ] = C_all_intervals2(tsLong,zobs,K_21Ne_nm ,tau_21Ne,ers2,L_nm );
+[Css_21Ne_fm ] = C_all_intervals2(tsLong,zobs,K_21Ne_fm ,tau_21Ne,ers2,L_fm );
+c21Nes = Css_21Ne_spal(:,end)+Css_21Ne_nm(:,end)+Css_21Ne_fm(:,end);
+% cNe_analyt = c21Ne_prof(1);
+
+%Model 14C:
+[Css_14C_spal] = C_all_intervals2(tsLong,zobs,K_14C_spal,tau_14C,ers2,L_spal);
+[Css_14C_nm ] = C_all_intervals2(tsLong,zobs,K_14C_nm ,tau_14C,ers2,L_nm );
+[Css_14C_fm ] = C_all_intervals2(tsLong,zobs,K_14C_fm ,tau_14C,ers2,L_fm );
+c14Cs = Css_14C_spal(:,end)+Css_14C_nm(:,end)+Css_14C_fm(:,end);
+% cC_analyt = c14C_prof(1);
+
+if nargout==5
+ lump.zss = zss;
+ lump.ts = tss(1,:);
+ lump.ExposureTimeSinceNow =ExposureTimeSinceNow;
+ lump.c14Css = Css_14C_spal+Css_14C_nm+Css_14C_fm;
+ lump.c10Bess = Css_10Be_spal+Css_10Be_nm+Css_10Be_fm;
+ lump.c26Alss = Css_26Al_spal+Css_26Al_nm+Css_26Al_fm;
+ lump.c21Ness = Css_21Ne_spal+Css_21Ne_nm+Css_21Ne_fm;
+end
+% disp(['analyt time:']); toc
+
+switch fixed_stuff.testmode
+ case 'fast', return
+ case 'run_advec', %just go on
+ otherwise,
+ error('fixed_stuff,.testmode must be ''fast'' or ''run_advec''')
+end
+
+% error('fast did not return')
+%#####################********************################
+% Start of optional advective solution
+%#####################********************################
+
+D = fixed_stuff.D;
+z = fixed_stuff.z;
+
+% Rock density in kg/m3
+rho = 2650;
+
+%Half lives
+H10=1.39e6;
+L10=log(2)/H10;
+
+H26=0.705e6;
+L26=log(2)/H26;
+
+H14=5730;
+L14=log(2)/H14;
+
+%Absorption depth scale in kg/m2
+Tau_spal=1600;
+Tau_nm = 9900;
+Tau_fm = 35000;
+
+%>>>BHJ: To be used in analytical expressions
+% L_spal = Tau_spal/rho; %Decay depth, exp(-z/L)
+% L_nm = Tau_nm/rho;
+% L_fm = Tau_fm/rho;
+%"K" in analytical expressions = P10_top_spal, etc.
+
+%10Be production
+P10_top_spal=5.33e3; %atoms/kg/yr
+%P10_top_spal=4.76e3; %atoms/kg/yr
+
+P10_top_nm=0.106e3; %atoms/kg/yr
+%P10_top_nm=0.959e3; %atoms/kg/yr
+
+P10_top_fm=0.093e3; %atoms/kg/yr
+%P10_top_fm=0.084e3; %atoms/kg/yr
+
+P10_spal = P10_top_spal*exp(-z*rho/Tau_spal);
+P10_nm = P10_top_nm*exp(-z*rho/Tau_nm);
+P10_fm = P10_top_fm*exp(-z*rho/Tau_fm);
+
+%P10_spal = P10_top_spal*(a1*exp(-z*rho/Tau_spal1)+a2*exp(-z*rho/Tau_spal2));
+%P10_nm = P10_top_nm*(b1*exp(-z*rho/Tau_nm1)+b2*exp(-z*rho/Tau_nm2)+b3*exp(-z*rho/Tau_nm3));
+%P10_fm = P10_top_fm*(c1*exp(-z*rho/Tau_fm1)+c2*exp(-z*rho/Tau_fm2)+c3*exp(-z*rho/Tau_fm3));
+
+P10_total = (P10_spal + P10_nm + P10_fm);
+
+%26Al production
+P26_top_spal=31.1e3; %atoms/kg/yr
+P26_top_nm=0.7e3; %atoms/kg/yr
+P26_top_fm=0.6e3; %atoms/kg/yr
+
+P26_spal = P26_top_spal*exp(-z*rho/Tau_spal);
+P26_nm = P26_top_nm*exp(-z*rho/Tau_nm);
+P26_fm = P26_top_fm*exp(-z*rho/Tau_fm);
+
+P26_total = (P26_spal + P26_nm + P26_fm);
+
+%21Ne production
+P21_top_spal=20.8e3; %atoms/kg/yr
+P21_top_nm=0.4e3; %atoms/kg/yr
+P21_top_fm=0.35e3; %atoms/kg/yr
+
+P21_spal = P21_top_spal*exp(-z*rho/Tau_spal);
+P21_nm = P21_top_nm*exp(-z*rho/Tau_nm);
+P21_fm = P21_top_fm*exp(-z*rho/Tau_fm);
+
+P21_total = (P21_spal + P21_nm + P21_fm);
+
+%14C production
+P14_top_spal=14.6e3; %atoms/kg/yr
+P14_top_nm=2.3e3; %atoms/kg/yr
+P14_top_fm=2.1e3; %atoms/kg/yr
+
+P14_spal = P14_top_spal*exp(-z*rho/Tau_spal);
+P14_nm = P14_top_nm*exp(-z*rho/Tau_nm);
+P14_fm = P14_top_fm*exp(-z*rho/Tau_fm);
+
+P14_total = (P14_spal + P14_nm + P14_fm);
+
+
+%Starting concentrations, equilibrium since eternity
+%This is computed as integrated part of the analytical solution
+switch fixed_stuff.Cstart
+ case 'from dat',
+ C10start = fixed_stuff.C10_start;
+ C26start = fixed_stuff.C26_start;
+ C21start = fixed_stuff.C21_start;
+ C14start = fixed_stuff.C14_start;
+ case 'extend interglacial'
+ %Making the start profile a "fm" steady state profile:
+ ers = erate_int; %assume non-glaciated start conditions
+
+ [C10_steady_spal] = Lal2002eq8(z,P10_top_spal,L10,rho,Tau_spal,ers);
+ [C10_steady_nm] = Lal2002eq8(z,P10_top_nm, L10,rho,Tau_nm, ers);
+ [C10_steady_fm] = Lal2002eq8(z,P10_top_fm, L10,rho,Tau_fm, ers);
+ C10start = C10_steady_spal +C10_steady_nm +C10_steady_fm;
+
+ [C26_steady_spal] = Lal2002eq8(z,P26_top_spal,L26,rho,Tau_spal,ers);
+ [C26_steady_nm] = Lal2002eq8(z,P26_top_nm, L26,rho,Tau_nm, ers);
+ [C26_steady_fm] = Lal2002eq8(z,P26_top_fm, L26,rho,Tau_fm, ers);
+ C26start = C26_steady_spal +C26_steady_nm +C26_steady_fm;
+
+ L21 = 0; %stable
+ [C21_steady_spal] = Lal2002eq8(z,P21_top_spal,L21,rho,Tau_spal,ers);
+ [C21_steady_nm] = Lal2002eq8(z,P21_top_nm, L21,rho,Tau_nm, ers);
+ [C21_steady_fm] = Lal2002eq8(z,P21_top_fm, L21,rho,Tau_fm, ers);
+ C21start = C21_steady_spal +C21_steady_nm +C21_steady_fm;
+
+ [C14_steady_spal] = Lal2002eq8(z,P14_top_spal,L14,rho,Tau_spal,ers);
+ [C14_steady_nm] = Lal2002eq8(z,P14_top_nm, L14,rho,Tau_nm, ers);
+ [C14_steady_fm] = Lal2002eq8(z,P14_top_fm, L14,rho,Tau_fm, ers);
+ C14start = C14_steady_spal +C14_steady_nm +C14_steady_fm;
+ case 'zeros'
+ C10start = zeros(size(z));
+ C26start = C10start; C21start = C10start; C14start = C10start;
+end
+C10 = C10start;
+C26 = C26start;
+C21 = C21start;
+C14 = C14start;
+
+% Number of glacial-interglacial cycles
+% C = 1;
+C = fixed_stuff.C;
+
+for i=1:C;
+ gla_init(i) = (Period_gla*i-Period_gla)+(Period_int*i-Period_int);
+ gla_end(i) = (Period_gla*i)+(Period_int*i-Period_int);
+
+ gla_hist_for((2*i)-1) = gla_init(i);
+ gla_hist_for(2*i) = gla_end(i);
+end
+
+l = 1; %<----------------- beware of l and 1
+gla_hist(:,l) = gla_hist_for;
+
+
+
+
+time_gla(l) = Period_gla;
+time_int(l) = Period_int;
+
+dt = fixed_stuff.dt; %time step.
+%Note that in gcosmo_advec.m glaciations must be full multiples of dt.
+%Here, in gcosmo_analyt this is not required.
+
+%Number of timesteps
+%Bem?rk, her tilf?jes "Holoc?n", s? det an bekvemt v?re tDegla
+% ts(l) = (gla_hist(end,l)+Period_int)/dt;
+ts(l) = (gla_hist(end,l)+tDegla)/dt;
+
+time(1) = 0;
+
+P10_total_decay = P10_total*dt*exp(-L10*dt);
+
+P26_total_decay = P26_total*dt*exp(-L26*dt);
+
+P21_total_decay = P21_total*dt;
+
+P14_total_decay = P14_total*dt*exp(-L14*dt);
+
+tic %advec
+for i=1:ts(l),
+
+ D10 = C10*L10*dt;
+ S10_int = P10_total_decay(:) - D10(:);
+ S10_gla = -D10;
+
+ D26 = C26*L26*dt;
+ S26_int = P26_total_decay(:) - D26(:);
+ S26_gla = -D26;
+
+ D21 = zeros(size(z))';
+ S21_int = P21_total_decay(:) - D21(:);
+ S21_gla = -D21;
+
+ D14 = C14*L14*dt;
+ S14_int = P14_total_decay(:) - D14(:);
+ S14_gla = -D14;
+
+ time(i+1) = dt*i;
+
+
+ for j=1:2:length(gla_hist(:,l))
+ if time(i) >= gla_hist(j,l);
+ erate = erate_gla(l);
+ S10 = S10_gla;
+ S26 = S26_gla;
+ S21 = S21_gla;
+ S14 = S14_gla;
+ is_int = 0; %<<<< BHJ
+ end
+
+ if time(i) >= gla_hist(j+1,l);
+ erate = erate_int(l);
+ S10 = S10_int;
+ S26 = S26_int;
+ S21 = S21_int;
+ S14 = S14_int;
+ is_int = 1; %<<<< BHJ
+ end
+ end
+
+
+erosion(i) = erate;
+is_ints(i+1) = is_int;
+
+C10 = update_profile(C10,z,S10,erate,dt);
+C26 = update_profile(C26,z,S26,erate,dt);
+C21 = update_profile(C21,z,S21,erate,dt);
+C14 = update_profile(C14,z,S14,erate,dt);
+
+% try
+% C10 = update_profile_dummy(C10,z,S10,erate,dt); %disp(['C10, i=',num2str(i)])
+% C26 = update_profile_dummy(C26,z,S26,erate,dt); %disp(['C26, i=',num2str(i)])
+% C21 = update_profile_dummy(C21,z,S21,erate,dt); %disp(['C21, i=',num2str(i)])
+% C14 = update_profile_dummy(C14,z,S14,erate,dt); %disp(['C14, i=',num2str(i)])
+% catch
+% keyboard
+% end
+D10_top(i) = D10(1);
+S10_top(i) = S10(1);
+C10_top(i) = C10(1);
+
+D26_top(i) = D26(1);
+S26_top(i) = S26(1);
+C26_top(i) = C26(1);
+
+D21_top(i) = D21(1);
+S21_top(i) = S21(1);
+C21_top(i) = C21(1);
+
+D14_top(i) = D14(1);
+S14_top(i) = S14(1);
+C14_top(i) = C14(1);
+
+%line(C10,z,'color','r');
+
+%>>>> BHJ: Pack valus for subsequent analytical run
+%L_spal, L_nm and L_rm were defined above
+%{
+K_10Be_spal(i+1) = P10_top_spal;
+K_10Be_nm(i+1) = P10_top_nm;
+K_10Be_fm(i+1) = P10_top_fm;
+
+K_26Al_spal(i+1) = P26_top_spal;
+K_26Al_nm(i+1) = P26_top_nm;
+K_26Al_fm(i+1) = P26_top_fm;
+
+K_21Ne_spal(i+1) = P21_top_spal;
+K_21Ne_nm(i+1) = P21_top_nm;
+K_21Ne_fm(i+1) = P21_top_fm;
+
+K_14C_spal(i+1) = P14_top_spal;
+K_14C_nm(i+1) = P14_top_nm;
+K_14C_fm(i+1) = P14_top_fm;
+%}
+ers(i+1) = erate;
+
+end;
+
+t_time(l) = time((C*Period_gla+(C-1)*Period_int+tDegla)/dt+1);
+
+D10_top = D10_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
+S10_top = S10_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
+C10_top = C10_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
+
+D26_top = D26_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
+S26_top = S26_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
+C26_top = C26_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
+
+D21_top = D21_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
+S21_top = S21_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
+C21_top = C21_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
+
+D14_top = D14_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
+S14_top = S14_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
+C14_top = C14_top(1:(C*Period_gla+(C-1)*Period_int+tDegla)/dt);
+
+%Concentration in top node at the end of the last interglacia
+eval(['C10_top_p',num2str(l),'= C10_top(end);']);
+eval(['C26_top_p',num2str(l),'= C26_top(end);']);
+eval(['C21_top_p',num2str(l),'= C21_top(end);']);
+eval(['C14_top_p',num2str(l),'= C14_top(end);']);
+
+%The output values cNe,cC,cAl,CBe:
+cBe = C10_top(end);
+cAl = C26_top(end);
+cNe = C21_top(end);
+cC = C14_top(end);
+
+disp(['advec time:']); toc
+tic %analyt
+%>>>>> BHJ: And now the analytical solution
+%INPUTS:
+% tau: Decay time of nucleide
+% ts: End times of intervals. Normally ts(1)=0=now, and ts(2:end)<0, so
+% that ts is a decreasing vector, going more and more negative.
+% zs: Present lamina depths below present surface z=0.
+% ers: ers(i) is the erosion rate in interval between ts(i) and ts(i+1),
+% Ks: Ks(i) is the production rate in interval between ts(i) and ts(i+1)
+% L: Penetration depth of radiation in play. dC/dt(z) = K*exp(-z/L)
+%OUTPUTS:
+%Css: Concentrations of nucleide. Css(it,iz) applies to ts(it) and zs(iz)
+%zss,tss: depths and times so that mesh(zss,tss,Css) works.%The call:
+%[Css,zss,tss] = C_all_intervals(ts,zs,Ks,tau,ers,L)
+
+ts = -fliplr(time); %First element in ts is the start of the model run
+zs = z;
+
+%Timing of constant intervals:
+%An infinite "interglacial" followed by C glaciations and C interglacials
+tstart_glacial = -(C:-1:1)*(Period_gla+Period_int);
+tend_glacial = tstart_glacial + Period_gla;
+t_bounds = sort([-inf,tstart_glacial,tend_glacial,0]);
+is_ints2 = 0.5*(1 + (-1).^(1:2*C+1)); %[1 0 1 0 ... 0 1]
+
+ers2 = erate_int*is_ints2 + erate_gla*(1-is_ints2);
+
+tau_10Be = 1/L10;
+tau_26Al = 1/L26;
+tau_21Ne = inf;
+tau_14C = 1/L14;
+
+L_spal = Tau_spal/rho; %Decay depth, exp(-z/L)
+L_nm = Tau_nm/rho;
+L_fm = Tau_fm/rho;
+
+is_ints(1) = 1; %Ice free before simulation period
+ers(1)= erate_int; %same as we used yo initiate the advective solution
+
+K_10Be_spal = is_ints*P10_top_spal;
+K_10Be_nm = is_ints*P10_top_nm;
+K_10Be_fm = is_ints*P10_top_fm;
+
+K_26Al_spal = is_ints*P26_top_spal;
+K_26Al_nm = is_ints*P26_top_nm;
+K_26Al_fm = is_ints*P26_top_fm;
+
+K_21Ne_spal = is_ints*P21_top_spal;
+K_21Ne_nm = is_ints*P21_top_nm;
+K_21Ne_fm = is_ints*P21_top_fm;
+
+K_14C_spal = is_ints*P14_top_spal;
+K_14C_nm = is_ints*P14_top_nm;
+K_14C_fm = is_ints*P14_top_fm;
+
+tic
+%Model 10Be:
+[Css_10Be_spal,zss,tss] = C_all_intervals(ts,zs,K_10Be_spal,tau_10Be,ers,L_spal);
+[Css_10Be_nm ,zss,tss] = C_all_intervals(ts,zs,K_10Be_nm ,tau_10Be,ers,L_nm );
+[Css_10Be_fm ,zss,tss] = C_all_intervals(ts,zs,K_10Be_fm ,tau_10Be,ers,L_fm );
+c10Be_prof = Css_10Be_spal(:,end)+Css_10Be_nm(:,end)+Css_10Be_fm(:,end);
+cBe_analyt = c10Be_prof(1);
+
+%Model 26Al:
+[Css_26Al_spal,zss,tss] = C_all_intervals(ts,zs,K_26Al_spal,tau_26Al,ers,L_spal);
+[Css_26Al_nm ,zss,tss] = C_all_intervals(ts,zs,K_26Al_nm ,tau_26Al,ers,L_nm );
+[Css_26Al_fm ,zss,tss] = C_all_intervals(ts,zs,K_26Al_fm ,tau_26Al,ers,L_fm );
+c26Al_prof = Css_26Al_spal(:,end)+Css_26Al_nm(:,end)+Css_26Al_fm(:,end);
+cAl_analyt = c26Al_prof(1);
+
+%Model 21Ne:
+[Css_21Ne_spal,zss,tss] = C_all_intervals(ts,zs,K_21Ne_spal,tau_21Ne,ers,L_spal);
+[Css_21Ne_nm ,zss,tss] = C_all_intervals(ts,zs,K_21Ne_nm ,tau_21Ne,ers,L_nm );
+[Css_21Ne_fm ,zss,tss] = C_all_intervals(ts,zs,K_21Ne_fm ,tau_21Ne,ers,L_fm );
+c21Ne_prof = Css_21Ne_spal(:,end)+Css_21Ne_nm(:,end)+Css_21Ne_fm(:,end);
+cNe_analyt = c21Ne_prof(1);
+
+%Model 14C:
+[Css_14C_spal,zss,tss] = C_all_intervals(ts,zs,K_14C_spal,tau_14C,ers,L_spal);
+[Css_14C_nm ,zss,tss] = C_all_intervals(ts,zs,K_14C_nm ,tau_14C,ers,L_nm );
+[Css_14C_fm ,zss,tss] = C_all_intervals(ts,zs,K_14C_fm ,tau_14C,ers,L_fm );
+c14C_prof = Css_14C_spal(:,end)+Css_14C_nm(:,end)+Css_14C_fm(:,end);
+cC_analyt = c14C_prof(1);
+
+disp(['analyt time:']); toc
+
+%Now compare results:
+[cBe,cBe_analyt;...
+ cAl,cAl_analyt;...
+ cNe,cNe_analyt;...
+ cC,cC_analyt]
+rel_error=[(cBe-cBe_analyt)/cBe;...
+ (cAl-cAl_analyt)/cAl;...
+ (cNe-cNe_analyt)/cNe;...
+ (cC-cC_analyt)/cC]
+
+figure; set(gcf,'name','AdvecSurface vs AnalyTrace')
+subplot(2,2,1)
+plot(ts(2:end),(Css_10Be_fm(1,2:end)+Css_10Be_nm(1,2:end)+Css_10Be_spal(1,2:end)),'.')
+hold on
+plot(ts(2:end),C10_top,'-')
+title('10Be')
+legend('Analy','Advec','Location','Northwest')
+
+subplot(2,2,2)
+plot(ts(2:end),(Css_26Al_fm(1,2:end)+Css_26Al_nm(1,2:end)+Css_26Al_spal(1,2:end)),'.')
+hold on
+plot(ts(2:end),C26_top,'-')
+title('26Al')
+legend('Analy','Advec','Location','Northwest')
+
+subplot(2,2,3)
+plot(ts(2:end),(Css_21Ne_fm(1,2:end)+Css_21Ne_nm(1,2:end)+Css_21Ne_spal(1,2:end)),'.')
+hold on
+plot(ts(2:end),C21_top,'-')
+title('21Ne')
+legend('Analy','Advec','Location','Northwest')
+
+subplot(2,2,4)
+plot(ts(2:end),(Css_14C_fm(1,2:end)+Css_14C_nm(1,2:end)+Css_14C_spal(1,2:end)),'.')
+hold on
+plot(ts(2:end),C14_top,'-')
+title('14C')
+legend('Analy','Advec','Location','Northwest')
+
+figure; set(gcf,'name','(Adv-Ana)/Adv')
+subplot(2,2,1)
+plot(ts(2:end),(Css_10Be_fm(1,2:end)+Css_10Be_nm(1,2:end)+Css_10Be_spal(1,2:end))./C10_top,'.')
+title('10Be')
+
+subplot(2,2,2)
+plot(ts(2:end),(Css_26Al_fm(1,2:end)+Css_26Al_nm(1,2:end)+Css_26Al_spal(1,2:end))./C26_top,'.')
+hold on
+title('26Al')
+
+subplot(2,2,3)
+plot(ts(2:end),(Css_21Ne_fm(1,2:end)+Css_21Ne_nm(1,2:end)+Css_21Ne_spal(1,2:end))./C10_top,'.')
+hold on
+title('21Ne')
+
+subplot(2,2,4)
+plot(ts(2:end),(Css_14C_fm(1,2:end)+Css_14C_nm(1,2:end)+Css_14C_spal(1,2:end))./C14_top,'.')
+hold on
+title('14C')
+
+figure; set(gcf,'name','Compare c(z,t=0)')
+subplot(2,2,1)
+plot(zs,c10Be_prof,'.g'); hold on %analyt
+plot(zs,C10,'.m'); %advec
+plot(zs,C10start,'-b'); %advec
+title('10Be(z), t=0')
+xlabel('Depth [m]')
+
+subplot(2,2,2)
+plot(zs,c26Al_prof,'.g'); hold on %analyt
+plot(zs,C26,'.m'); %advec
+plot(zs,C26start,'-b'); %advec
+title('26Al(z), t=0')
+xlabel('Depth [m]')
+
+subplot(2,2,3)
+plot(zs,c21Ne_prof,'.g'); hold on %analyt
+plot(zs,C21,'.m') %advec
+plot(zs,C21start,'-b'); %advec
+title('21Ne(z), t=0')
+xlabel('Depth [m]')
+
+subplot(2,2,4)
+plot(zs,c14C_prof,'.g'); hold on %analyt
+plot(zs,C14,'.m'); %advec
+plot(zs,C14start,'-b'); %advec
+title('14C(z), t=0')
+xlabel('Depth [m]')
+
+%And now make check plots of (zobs,cBes) etc.
+subplot(2,2,1)
+plot(zobs,c10Bes,'*')
+subplot(2,2,2)
+plot(zobs,c26Als,'*')
+subplot(2,2,3)
+plot(zobs,c21Nes,'*')
+subplot(2,2,4)
+plot(zobs,c14Cs,'*')
+
+% figure; set(gcf,'name','(Adv-Ana)/Adv')
+% subplot(2,2,1)
+% plot(ts(2:end),(Css_14C_fm(1,2:end)+Css_14C_nm(1,2:end)+Css_14C_spal(1,2:end))./C14_top,'.g')
+keyboard
+%erosion = erosion(1:(C*Period_gla+C*Period_int)/dt);
+
+%C10_C26_top = -1*zeros((5*max(P_gla)+5*max(P_int))/100,l);
+%C10_C26_top(:,l) = C10_top./C26_top;
+%eval(['C10_C26_top_',num2str(l),'= C10_top./C26_top;']);
+
+%C14_C10_top(:,l) = C14_top./C10_top;
+%eval(['C14_C10_top_',num2str(l),'= C14_top./C10_top;']);
+
+%C10_C21_top = -1*zeros((5*max(P_gla)+5*max(P_int))/100,l);
+%C10_C21_top(:,l) = C10_top./C21_top;
+%eval(['C10_C21_top_',num2str(l),'= C10_top./C21_top;']);
+
+%C14_C26_top = -1*zeros((5*max(P_gla)+5*max(P_int))/100,l);
+%C14_C26_top(:,l) = C14_top./C26_top;
+%eval(['C14_C26_top_',num2str(l),'= C14_top./C26_top;']);
+
+%C26_C21_top = -1*zeros((5*max(P_gla)+5*max(P_int))/100,l);
+%C26_C21_top(:,l) = C26_top./C21_top;
+%eval(['C26_C21_top_',num2str(l),'= C26_top./C21_top;']);
+
+%C14_C21_top = -1*zeros((5*max(P_gla)+5*max(P_int))/100,l);
+%C14_C21_top(:,l) = C14_top./C21_top;
+%eval(['C14_C21_top_',num2str(l),'= C14_top./C21_top;']);
+
+
+%eval(['erosion_hist_',num2str(l),'= erosion(:);']);
+return
+end
+
+
+function C_out = update_profile_dummy(C,z,S,erate,dt);
+C_out=C+S;
+end+
\ No newline at end of file
diff --git a/matlab/mcmc_inversion.m b/matlab/mcmc_inversion.m
@@ -2,6 +2,7 @@ function [Ss, save_file] = mcmc_inversion(matlab_scripts_folder, debug, ...
n_walkers, outfolder, ...
be_conc, al_conc, c_conc, ne_conc, ...
be_uncer, al_uncer, c_uncer, ne_uncer, ...
+ be_zobs, al_zobs, c_zobs, ne_zobs, ...
be_prod, al_prod, c_prod, ne_prod, ...
rock_density, ...
epsilon_gla_min, epsilon_gla_max, ...
@@ -22,6 +23,8 @@ format compact;
%Set path so that we can find other required m-files
addpath(matlab_scripts_folder)
+fs.rho = rock_density;
+
fs.g_case = 'CosmoLongsteps'; %must match a case in function gz = linspace(0,10,100);
switch fs.g_case
@@ -58,7 +61,8 @@ switch fs.g_case
% fs.RelErrorObs = 0.01*[2.0;2.04]';%0.02; %0.02 means 2% observational error
% one depth per nuclide or not?
- fs.zobs = [0]; %Depths where nucleides are observed
+ %fs.zobs = [0]; %Depths where nucleides are observed
+ fs.zobs = [be_zobs, al_zobs, c_zobs, ne_zobs];
% fs.zobs = [0,0.3,1,3,10]; %Depths where nucleides are observed
if debug
diff --git a/uploadhistory.php b/uploadhistory.php
@@ -140,6 +140,10 @@ $fieldnames = array(
'al_uncer',
'c_uncer',
'ne_uncer',
+ 'be_zobs',
+ 'al_zobs',
+ 'c_zobs',
+ 'ne_zobs',
'be_prod',
'al_prod',
'c_prod',