f. lollipop_offsets.m · web viewthermal_strain(i) = thermexp*(temp(i) - temp(1))*1000000; % in...

80
F. lollipop_offsets.m %% GET THE COEFFICIENTS TO CONVERT OBTAINED TO EXPECTED % the obtained values are x and the expected/corrected values are y in the % equation y=mx+b % read in the excel file fileName = 'lollipop_tests.xlsx'; sheetName = 'data'; % pull the data from the sheet [numData, txtData, rawData] = xlsread(fileName,sheetName); numData = numData(2:length(numData),:); % get rid of the top row txtData = txtData(2:length(txtData),1); % get rid of the top row % create the y values % for 12%, 75.8%, 96.9%, 80.3% expectedRH = zeros(1,4); expectedRH(1) = 96.9; expectedRH(2) = 75.8; expectedRH(3) = 12; expectedRH(4) = 80.3; % initialize the polynomial coefficient fit vector % for LiCl, NaCl, PotSul coefficient1 = zeros(length(numData),2); % for LiCl, NaCl, PotSul, AmSul coefficient2 = zeros(length(numData),2); % plot and solve for the line of best fit point = zeros(1,2); vector = zeros(1,2); vector(1,1) = 0; vector(1,2) = 100; for i = 1:length(numData) figure() % plot the data points plot(numData(i,1:4),expectedRH(1,1:4),'bo') hold on xlabel('Measured RH (%)') ylabel('Expected RH (%)') title(txtData(i)) % linear fit polynomial for 12%, 75.8%, 96.9% P = polyfit(numData(i,1:3),expectedRH(1,1:3), 1); coefficient1(i,1) = P(1,1); coefficient1(i,2) = P(1,2); % plot the line of best fit for 12%, 75.8%, 96.9%

Upload: lamhanh

Post on 19-May-2018

220 views

Category:

Documents


2 download

TRANSCRIPT

F. lollipop_offsets.m

%% GET THE COEFFICIENTS TO CONVERT OBTAINED TO EXPECTED% the obtained values are x and the expected/corrected values are y in the% equation y=mx+b % read in the excel filefileName = 'lollipop_tests.xlsx';sheetName = 'data'; % pull the data from the sheet[numData, txtData, rawData] = xlsread(fileName,sheetName);numData = numData(2:length(numData),:); % get rid of the top row txtData = txtData(2:length(txtData),1); % get rid of the top row % create the y values % for 12%, 75.8%, 96.9%, 80.3%expectedRH = zeros(1,4);expectedRH(1) = 96.9;expectedRH(2) = 75.8;expectedRH(3) = 12;expectedRH(4) = 80.3; % initialize the polynomial coefficient fit vector% for LiCl, NaCl, PotSulcoefficient1 = zeros(length(numData),2);% for LiCl, NaCl, PotSul, AmSulcoefficient2 = zeros(length(numData),2); % plot and solve for the line of best fitpoint = zeros(1,2);vector = zeros(1,2);vector(1,1) = 0;vector(1,2) = 100;for i = 1:length(numData) figure() % plot the data points plot(numData(i,1:4),expectedRH(1,1:4),'bo') hold on xlabel('Measured RH (%)') ylabel('Expected RH (%)') title(txtData(i)) % linear fit polynomial for 12%, 75.8%, 96.9% P = polyfit(numData(i,1:3),expectedRH(1,1:3), 1); coefficient1(i,1) = P(1,1); coefficient1(i,2) = P(1,2); % plot the line of best fit for 12%, 75.8%, 96.9% %point(1,1) = coefficient1(i,1)*0+coefficient1(i,2); %point(1,2) = coefficient1(i,1)*100+coefficient1(i,2); %plot(vector,point, 'b') % linear fit polynomial for 12%, 75.8%, 96.9%, 80.3% P = polyfit(numData(i,1:4),expectedRH(1,1:4),1); coefficient2(i,1) = P(1,1);

coefficient2(i,2) = P(1,2); % plot the line of best fit for 12%, 75.8%, 96.9%, 80.3% point(1,1) = coefficient2(i,1)*0+coefficient2(i,2); point(1,2) = coefficient2(i,1)*100+coefficient2(i,2); plot(vector,point, 'b') hold off legend('LiCl:12%,NaCl:75%,AmSul:80.3%,PotSul:96.9%','Line of Best Fit for LiCl,NaCl,AmSul,PotSul','Location','southeast')end

F. LollipopResults.m

%% Read in the data% read in the excel filefileName = 'RH_Temp_results.xlsx'; %% LABJACK 1 DATA sheetName = 'LJ1'; % pull the time and lollipop data from the sheet[numData, ~, ~] = xlsread(fileName,sheetName); LJ1_dateTime = numData(:,2);% Specimens cast on August 14, 2015 in the afternoon (~2 pm)% "first" time recording on September 14, 2015 at 9 am% Therefore the concrete age is ~30.79 days at the "first" measurement% (i.e. the age of drying)% This "first" measurement was added in so that it matches the age of the% concrete at dryingLJ1_dateTime = LJ1_dateTime - LJ1_dateTime(1) + 30.79; % Temp is in degrees C% RH is in percentLJ1_LP8 = struct('RH',numData(:,4),'Temp',numData(:,6));LJ1_LP14 = struct('RH',numData(:,8),'Temp',numData(:,10));LJ1_LP13 = struct('RH',numData(:,12),'Temp',numData(:,14));LJ1_LP12 = struct('RH',numData(:,16),'Temp',numData(:,18));LJ1_LP28 = struct('RH',numData(:,28),'Temp',numData(:,30));LJ1_LP2 = struct('RH',numData(:,32),'Temp',numData(:,34));LJ1_LP1 = struct('RH',numData(:,36),'Temp',numData(:,38)); % hot binLJ1_LP15 = struct('RH',numData(:,44),'Temp',numData(:,46));LJ1_LP30 = struct('RH',numData(:,48),'Temp',numData(:,50));LJ1_LP24 = struct('RH',numData(:,52),'Temp',numData(:,54));LJ1_LP5 = struct('RH',numData(:,56),'Temp',numData(:,58));LJ1_LP27 = struct('RH',numData(:,60),'Temp',numData(:,62));LJ1_LP25 = struct('RH',numData(:,64),'Temp',numData(:,66)); %% LABJACK 3 DATA sheetName = 'LJ3';

% pull the time and lollipop data from the sheet[numData, ~, ~] = xlsread(fileName,sheetName); LJ3_dateTime = numData(:,2);% Specimens cast on August 14, 2015 in the afternoon (~2 pm)% "first" time recording on September 14, 2015 at 9 am% Therefore the concrete age is ~30.79 days at the first measurement% This "first" measurement was added in so that it matches the age of the% concrete at dryingLJ3_dateTime = LJ3_dateTime - LJ3_dateTime(1) + 30.79; % Temp is in degrees C% RH is in percentLJ3_LP20 = struct('RH',numData(:,4),'Temp',numData(:,6)); % ambientLJ3_LP16 = struct('RH',numData(:,8),'Temp',numData(:,10)); % creepLJ3_LP18 = struct('RH',numData(:,12),'Temp',numData(:,14));LJ3_LP22 = struct('RH',numData(:,16),'Temp',numData(:,18));LJ3_LP19 = struct('RH',numData(:,20),'Temp',numData(:,22));LJ3_LP6 = struct('RH',numData(:,24),'Temp',numData(:,26));LJ3_LP9 = struct('RH',numData(:,28),'Temp',numData(:,30));LJ3_LP21 = struct('RH',numData(:,32),'Temp',numData(:,34));LJ3_LP29 = struct('RH',numData(:,36),'Temp',numData(:,38));LJ3_LP7 = struct('RH',numData(:,40),'Temp',numData(:,42));LJ3_LP3 = struct('RH',numData(:,44),'Temp',numData(:,46));LJ3_LP11 = struct('RH',numData(:,48),'Temp',numData(:,50));LJ3_LP17 = struct('RH',numData(:,52),'Temp',numData(:,54));LJ3_LP4 = struct('RH',numData(:,56),'Temp',numData(:,58)); % cold binLJ3_LP10 = struct('RH',numData(:,60),'Temp',numData(:,62)); %% Correct the RH values % read in the excel file containing the correction coefficientsfileName = 'lollipop_tests.xlsx';sheetName = 'data'; % pull the coefficient data from the sheet[numData, ~, ~] = xlsread(fileName,sheetName);slope = numData(2:end,7);intercept = numData(2:end,8); % loop through LJ1 lollipopsfor i = 1:length(LJ1_LP8.RH) LJ1_LP8.RH(i) = slope(12)*LJ1_LP8.RH(i) + intercept(12); LJ1_LP14.RH(i) = slope(10)*LJ1_LP14.RH(i) + intercept(10); LJ1_LP13.RH(i) = slope(25)*LJ1_LP13.RH(i) + intercept(25); LJ1_LP12.RH(i) = slope(8)*LJ1_LP12.RH(i) + intercept(8); LJ1_LP28.RH(i) = slope(11)*LJ1_LP28.RH(i) + intercept(11); LJ1_LP2.RH(i) = slope(24)*LJ1_LP2.RH(i) + intercept(24); LJ1_LP15.RH(i) = slope(18)*LJ1_LP15.RH(i) + intercept(18); LJ1_LP30.RH(i) = slope(13)*LJ1_LP30.RH(i) + intercept(13); LJ1_LP24.RH(i) = slope(4)*LJ1_LP24.RH(i) + intercept(4); LJ1_LP5.RH(i) = slope(27)*LJ1_LP5.RH(i) + intercept(27); LJ1_LP27.RH(i) = slope(2)*LJ1_LP27.RH(i) + intercept(2); LJ1_LP25.RH(i) = slope(15)*LJ1_LP25.RH(i) + intercept(15);

LJ1_LP1.RH(i) = slope(20)*LJ1_LP1.RH(i) + intercept(20);end % loop through LJ3 lollipopsfor i = 1:length(LJ3_LP20.RH) LJ3_LP20.RH(i) = slope(28)*LJ3_LP20.RH(i) + intercept(28); LJ3_LP18.RH(i) = slope(29)*LJ3_LP18.RH(i) + intercept(29); LJ3_LP22.RH(i) = slope(14)*LJ3_LP22.RH(i) + intercept(14); LJ3_LP19.RH(i) = slope(9)*LJ3_LP19.RH(i) + intercept(9); LJ3_LP6.RH(i) = slope(22)*LJ3_LP6.RH(i) + intercept(22); LJ3_LP9.RH(i) = slope(1)*LJ3_LP9.RH(i) + intercept(1); LJ3_LP21.RH(i) = slope(26)*LJ3_LP21.RH(i) + intercept(26); LJ3_LP29.RH(i) = slope(3)*LJ3_LP29.RH(i) + intercept(3); LJ3_LP7.RH(i) = slope(30)*LJ3_LP7.RH(i) + intercept(30); LJ3_LP3.RH(i) = slope(17)*LJ3_LP3.RH(i) + intercept(17); LJ3_LP11.RH(i) = slope(21)*LJ3_LP11.RH(i) + intercept(21); LJ3_LP17.RH(i) = slope(5)*LJ3_LP17.RH(i) + intercept(5); LJ3_LP10.RH(i) = slope(23)*LJ3_LP10.RH(i) + intercept(23); LJ3_LP16.RH(i) = slope(19)*LJ3_LP16.RH(i) + intercept(19); LJ3_LP4.RH(i) = slope(6)*LJ3_LP4.RH(i) + intercept(6);end % clear the variables that I don't need anymoreclear slope intercept i

F. CutOffRH.m

function [ RH_modified ] = CutOffRH( RH )% limit the relative humidity value to 100% without changing the original% RH vector RH_modified = RH; for i = 1:length(RH) if (RH_modified(i)>100) RH_modified(i) = 100; endend end

F. ThermalStrainsShrinkage.m

function [ thermal_strain ] = ThermalStrainsShrinkage( Temp )% Thermal Strains % thermExp = coefficient of thermal expansion, from conducted experiments % Temp = actual temperature, in degrees C thermExp = 11.7*10^(-6); % initialize the output vector

thermal_strain = zeros(length(Temp),1); % column vector for i = 1:length(Temp) % loop over the data from each environment if (Temp(i)<0) continue % we know this is a wrong measurement elseif (Temp(i)>70) continue % we know this is a wrong measurement end thermal_strain(i) = thermExp*(Temp(i) - Temp(1))*1000000; % in microstrain end end

F. weightedMeanLJ1_v2.m

function [ Temp,RH ] = weightedMeanLJ1_v2( T,R,offset )%Calculated the weighted accumulated mean of the temp and RH from LJ1 % The tributary time in minutes that each temperature value corresponds tof = zeros(length(T),1);f(1) = 5/2;f(2:1743-offset+1) = 5;f(1744-offset+1)=5/2+10/2;f(1745-offset+1:2022-offset+1) = 10;f(2023-offset+1) = 10/2+15/2;f(2024-offset+1:20032-offset+1) = 15;f(20033-offset+1) = 15/2+10/2;f(20034-offset+1:end-1) = 10;f(end) = 10/2; Temp = zeros(length(T),1);Temp(1) = T(1); for i=2:length(T) Temp(i) = (Temp(i-1)*sum(f(1:i-1))+T(i)*f(i))/sum(f(1:i)); end RH = zeros(length(R),1);RH(1) = R(1); for i=2:length(R) RH(i) = (RH(i-1)*sum(f(1:i-1))+R(i)*f(i))/sum(f(1:i)); endend

F. weightedMeanLJ3_v2.mfunction [ Temp,RH ] = weightedMeanLJ3_v2( T,R,offset )%Calculated the weighted accumulated mean of the temp and RH from LJ3 % The tributary time in minutes that each temperature value corresponds tof = zeros(length(T),1);

if offset<2619 f(1) = 5/2; f(2:2619-offset+1) = 5; f(2620-offset+1)=5/2+10/2; f(2621-offset+1:2901-offset+1) = 10; f(2902-offset+1) = 10/2+15/2; f(2903-offset+1:end-1) = 15; f(end) = 15/2;elseif (2901>offset) && (offset>=2621) f(1:2901-offset+1) = 10; f(2902-offset+1) = 10/2+15/2; f(2903-offset+1:end-1) = 15; f(end) = 15/2;end Temp = zeros(length(T),1);Temp(1) = T(1); for i=2:length(T) Temp(i) = (Temp(i-1)*sum(f(1:i-1))+T(i)*f(i))/sum(f(1:i)); end RH = zeros(length(R),1);RH(1) = R(1); for i=2:length(R) RH(i) = (RH(i-1)*sum(f(1:i-1))+R(i)*f(i))/sum(f(1:i)); end end

F. FindValue.m

function [ index1,index2,index3,index4,index5,index6 ] = findValue(depth) % Find the index of the theoretical internal RH value corresponding to the location % of interest (i.e. where the RH/Temp sensors are located) and save % depth = locations where the theoretical internal RH, distance from the sealed end, in m % index1 = closest to closed end, index6 = farthest from closed end i = 1; while (depth(i)<=0.135) % when this is no longer true, we have passed the location of interest % and we know the index we want index1 = i; i = i+1; end i = 1; while (depth(i) <= 0.225) % when this is no longer true, we have passed the location of interest % and we know the index we want index2 = i; i = i+1; end

i = 1; while (depth(i) <= 0.36) % when this is no longer true, we have passed the location of interest % and we know the index we want index3 = i; i = i+1; end i = 1; while (depth(i) <= 0.425) % when this is no longer true, we have passed the location of interest % and we know the index we want index4 = i; i = i+1; end i = 1; while (depth(i) <= 0.475) % when this is no longer true, we have passed the location of interest % and we know the index we want index5 = i; i = i+1; end i = 1; while (depth(i) <= 0.52) % when this is no longer true, we have passed the location of interest % and we know the index we want index6 = i; i = i+1; end end

F. MoistureFlowCase2_v3.m

function [ depth,phi] = MoistureFlowCase2_v3( time,deltaTime,numBlocks,alpha,cc )% Determine the internal relative humidity gradient of concrete % Use a mesh centred grid% time = given in seconds - the time of interest from the start of drying,% Therefore the concrete age is the time + the age of the concrete at the% start of drying % deltaTime - the time step given in seconds% numBlocks - the number of elements% depth - distance from the sealed end, in meters% phi - internal relative humidity at given depth, in decimal% alpha = should be 0.05% cc = should be 1*10^-8 maxDepth = 0.550; % max depth from surface, 550 mm, given in m i.e. length of specimentheta = 0.5;numTimeStep = time/deltaTime;% define the the number of nodesnumNodes = numBlocks+1;deltaX = maxDepth/numBlocks; % in mdepth = zeros(numNodes,1); % in m

depth(1,1) = 0; % in mfor i=2:numNodes depth(i,1) = depth(i-1,1)+deltaX;end % define parameters for D n = 15; % should be 15Hc = 0.80; % should be 0.80fcm = 54.6; % 28 day strength, in MPaD1 = cc/(fcm - 8); % initialize the phi vectorphi = zeros(numNodes,1);% fill in the phi vector at the initial conditionsHenv1 = 0.5995; % average RH in ambient air before exposed to binsHenv2 = 0.125; % RH in air is 12.5 percent once exposed to tote bin environment at concrete age of 34.9733 daysfor i = 1:numNodes if isequal(i, numNodes) % if the last node phi(i,1) = Henv1; % boundary condition else phi(i,1) = 1; % 100 percent RH as the initial condition endendphi0 = phi; % initial condition % initialize the coefficient matrix filled with a1, a2, a3A = zeros(numNodes,numNodes);% create and fill the RHS B vector filled with phi, b1, b2, b3% this changes over timeB = zeros(numNodes,1); % from 1 to nB_prime = zeros(numNodes, 1); % from 1 to n% initialize the L and U vectorL = zeros(numNodes-1, 1); % from 2 to nU = zeros(numNodes, 1); % from 1 to n for t = 1:numTimeStep % time step number % UPDATE THE AMBIENT RH AT THE APPROPRIATE TIME if (t*deltaTime >= 34.9733*24*60*60) phi(numNodes,1) = Henv2; % boundary condition of tote bin end % FILL IN THE A MATRIX for i=1:numNodes % for each row % D, W, Z is changing for each row if isequal(i,1)% if the first row W=0; elseif isequal(i,numNodes) % if the last row W = (phi(i,1)-phi(i-1,1))/(2*deltaX); else W = (phi(i+1,1)-phi(i-1,1))/(2*deltaX); end Z = (D1*(1-alpha)*((1-Hc)^n)*n*(1-phi(i,1))^(n-1))/((1-Hc)^n+(1-phi(i,1))^n)^2; D = D1*(alpha+(1-alpha)/(1+((1-phi(i,1))/(1-Hc))^n)); % m^2/s

a1 = theta*(Z*W/(2*deltaX)-D/deltaX^2); a2 = 1/deltaTime + 2*theta*D/(deltaX^2); a3 = theta*(-Z*W/(2*deltaX)-D/deltaX^2); b1 = (1-theta)*(-Z*W/(2*deltaX)+D/deltaX^2); b2 = 1/deltaTime - 2*(1-theta)*D/(deltaX^2); b3 = (1-theta)*(Z*W/(2*deltaX)+D/deltaX^2); % create and fill the coefficient matrix A filled with a1, a2, a3 % this changes over time because a1, a2, a3 are not constant because % D is varying if isequal(i,numNodes) % if the last row A(i,numNodes) = 1; elseif isequal(i,numNodes-1) % if the second last row of the matrix A(i,numNodes-1) = a2; % second last column of second last row A(i,numNodes-2) = a1; % third last column of second last row elseif isequal(i,1) % if the first row of the matrix A(i,1) = a1+a2; % first column of first row A(i,2) = a3; % second column of first row else A(i,i-1) = a1; A(i,i) = a2; A(i,i+1) = a3; end end % use the Thomas Solver to solve because A has a bandwidth of 3 % this also changes over time U(1,1) = A(1,1); for i = 2:numNodes % from 2 to n L(i,1) = A(i,i-1)/U(i-1,1); U(i,1) = A(i,i)-L(i,1)*A(i-1,i); end % FILL IN THE B VECTOR for i = 1:numNodes if isequal(i,1) % if the first row B(i,1) = (b1+b2)*phi(i,1)+b3*phi(i+1,1); B_prime(i,1) = B(i,1); elseif isequal(i,numNodes-1) % if the second last row B(i,1) = b1*phi(i-1,1) + b2*phi(i,1)+(b3-a3)*phi(i+1,1); B_prime(i,1) = B(i,1) - L(i,1)*B_prime(i-1,1); elseif isequal(i,numNodes) % if the last row B(i,1) = phi(i,1); B_prime(i,1) = B(i,1) - L(i,1)*B_prime(i-1,1); else B(i,1) = b1*phi(i-1,1)+b2*phi(i,1)+b3*phi(i+1,1); B_prime(i,1) = B(i,1) - L(i,1)*B_prime(i-1,1); end end % SOLVE FOR PHI for i=numNodes:-1:1 if isequal(i,numNodes) % if the last node phi(i,1) = B_prime(i,1)/U(i,1); else phi(i,1) = (B_prime(i,1)-A(i,i+1)*phi(i+1,1))/U(i,1); end end

%if isequal(t,numTimeStep*0.025) % phi015 = phi; %elseif isequal(t,numTimeStep*0.1) % phi6 = phi; %elseif isequal(t,numTimeStep*0.25) % phi15 = phi; %elseif isequal(t,numTimeStep*0.50) % phi30 = phi; %elseif isequal(t,numTimeStep*0.75) % phi45 = phi; %endend figure()plot(depth,phi*100)%plot(depth, phi015*100, depth, phi6*100,depth, phi15*100,depth, phi30*100,depth, phi45*100,depth, phi*100)title('Internal Relative Humidity Profile')xlabel('Depth (m)')ylabel('Internal Relative Humidity at Given Depth (%)')legend('1.5 yrs','6 yrs','15 yrs','30 yrs','45 yrs','60 yrs', 'Location', 'southeast')str = {'Time(years)=',time/(365*24*60*60), '\Deltat(s)=',deltaTime,'Num. of Elem.=',numBlocks, 'Alpha=',alpha,'cc=',cc};annotation('textbox', [0.15,0.35,0.15,0.25],'String', str,'FitBoxToText','on')ylim([10 110]) end

F. DiffusionCoefficients.m

% We want to solve for the alpha and cc coefficients to use in the% diffusion equation that best matches the experimental internal relative% humidities measured by the RH/Temp sensors % FROM CLOSED TO OPEN END:% G1 = [LJ1_LP28.RH; LJ1_LP2.RH; LJ1_LP14.RH; LJ1_LP8.RH; LJ1_LP12.RH;% LJ1_LP13.RH]; --> LP2 = dead% G2 = [LJ1_LP5.RH; LJ1_LP24.RH; LJ1_LP30.RH; LJ1_LP25.RH; LJ1_LP15.RH;% LJ1_LP27.RH]; --> LP25 = dead% G3 = [LJ3_LP18.RH; LJ3_LP22.RH; LJ3_LP10.RH; LJ3_LP3.RH; LJ3_LP11.RH;% LJ3_LP17.RH]; --> during the time of interest, LP11 = dead, LP22 = dead% G4 = [LJ3_LP21.RH; LJ3_LP9.RH; LJ3_LP6.RH; LJ3_LP19.RH; LJ3_LP29.RH;% LJ3_LP7.RH]; --> LP29 = dead, LP6 = dead %% Experimental internal RH = taken as is deltaTime = 1080;numBlocks = 3000;sumR2 = struct; % structure containing the sum of least squares for each case sumR2.G1(1) = 0;sumR2.G2(1) = 0;sumR2.G3(1) = 0;sumR2.G4(1) = 0;

sumR2.all(1) = 0;intRH = struct; % structure containing the internal RH measured by RH/Temp sensors for each time of interestintRH.G1 = [ 0 0 0 0 0 0];intRH.G2 = [ 0 0 0 0 0 0];intRH.G3 = [ 0 0 0 0 0 0];intRH.G4 = [ 0 0 0 0 0 0]; variables = zeros(1,3); % first column = age of concrete in days, second column = alpha, third column = cc numNodes = numBlocks+1;deltaX = 0.550/numBlocks; % in mdepth = zeros(numNodes,1); % in mdepth(1,1) = 0; % in mfor i=2:numNodes depth(i,1) = depth(i-1,1)+deltaX;end[ index1,index2,index3,index4,index5,index6 ] = findValue(depth); % These indices are the same regardless of time, deltaTime, alpha, cc as % long as numBlocks does not change (which it doesn't) z = 1;% Let's start looking at 55 days from drying (ignore the early days)% In seconds, increase every 10 day, 175 days is approx the last time% the RH/Temp has taken a measurement so farfor time = (55*24*60*60):(10*24*60*60):(175*24*60*60) t = time/(24*60*60); % time from drying, in days display(t) y = 1; while (LJ1_dateTime(y)<=(t+30.79)) % when this is no longer true, we have passed the time of interest % and we know the index we want indexLJ1 = y; y=y+1; end y = 1; while (LJ3_dateTime(y)<=(t+30.79)) % when this is no longer true, we have passed the time of interest % and we know the index we want indexLJ3 = y; y=y+1; end % Based on tests conducted in excel, 0.05 <= alpha <= 0.3 only (particularly for later ages) % Increase by 0.01 for alpha = 0.03:0.01:0.04 % Based on tests conducted in excel, 1*10^-8 <= cc <= 15*10^-8 for % decent results % Increase by 1*10^-8

for cc = (1*10^-8):(1*10^-8):(11*10^-8) [ depth,phi ] = MoistureFlowCase2_v3( time,deltaTime,numBlocks,alpha,cc ); %[ depth,phi,alpha,cc ] = MoistureFlowCase2_v4( time,deltaTime,numBlocks ); % phi is outputted as decimal, need it as percent phi = phi*100; % The sumR2 values need to be divided by 100*100=10000 for a realistic representation because % the input values are all as percents, not decimals sumR2.G1(z) = (phi(index1) - LJ1_LP28.RH(indexLJ1))^2 + (phi(index3) - LJ1_LP14.RH(indexLJ1))^2 + (phi(index4) - LJ1_LP8.RH(indexLJ1))^2 + (phi(index5) - LJ1_LP12.RH(indexLJ1))^2 + (phi(index6) - LJ1_LP13.RH(indexLJ1))^2; sumR2.G2(z) = (phi(index1) - LJ1_LP5.RH(indexLJ1))^2 + (phi(index2) - LJ1_LP24.RH(indexLJ1))^2 + (phi(index3) - LJ1_LP30.RH(indexLJ1))^2 + (phi(index5) - LJ1_LP15.RH(indexLJ1))^2 + (phi(index6) - LJ1_LP27.RH(indexLJ1))^2; sumR2.G3(z) = (phi(index1) - LJ3_LP18.RH(indexLJ3))^2 + (phi(index3) - LJ3_LP10.RH(indexLJ3))^2 + (phi(index4) - LJ3_LP3.RH(indexLJ3))^2 + (phi(index6) - LJ3_LP17.RH(indexLJ3))^2; sumR2.G4(z) = (phi(index1) - LJ3_LP21.RH(indexLJ3))^2 + (phi(index2) - LJ3_LP9.RH(indexLJ3))^2 + (phi(index4) - LJ3_LP19.RH(indexLJ3))^2 + (phi(index6) - LJ3_LP7.RH(indexLJ3))^2; sumR2.all(z) = sumR2.G1(z) + sumR2.G2(z) + sumR2.G3(z) + sumR2.G4(z); variables(z,1) = t + 30.79; variables(z,2) = alpha; variables(z,3) = cc; %intRH.G1(z,:) = [ LJ1_LP28.RH(indexLJ1) LJ1_LP2.RH(indexLJ1) LJ1_LP14.RH(indexLJ1) LJ1_LP8.RH(indexLJ1) LJ1_LP12.RH(indexLJ1) LJ1_LP13.RH(indexLJ1) ]; %intRH.G2(z,:) = [ LJ1_LP5.RH(indexLJ1) LJ1_LP24.RH(indexLJ1) LJ1_LP30.RH(indexLJ1) LJ1_LP25.RH(indexLJ1) LJ1_LP15.RH(indexLJ1) LJ1_LP27.RH(indexLJ1) ]; %intRH.G3(z,:) = [ LJ3_LP18.RH(indexLJ3) LJ3_LP22.RH(indexLJ3) LJ3_LP10.RH(indexLJ3) LJ3_LP3.RH(indexLJ3) LJ3_LP11.RH(indexLJ3) LJ3_LP17.RH(indexLJ3) ]; %intRH.G4(z,:) = [ LJ3_LP21.RH(indexLJ3) LJ3_LP9.RH(indexLJ3) LJ3_LP6.RH(indexLJ3) LJ3_LP19.RH(indexLJ3) LJ3_LP29.RH(indexLJ3) LJ3_LP7.RH(indexLJ3) ]; z = z + 1; end end end

F. FreeShrinkageResults.m

%% Read in the data% read in the excel file fileName = 'results.xlsx';

sheetName = 'Free Shrinkage'; % pull the time and free shrinkage data from the sheet[numData, txtData, rawData] = xlsread(fileName,sheetName); % Specimens cast on August 14, 2015 in the afternoon (~2 pm)% Exposed to drying on September 14, 2015 at 9 am% Therefore the concrete age is ~30.79 days at the start of drying% Exposed to hot and cold bin on September 18, 2015 at 1:30 pm (34.9733 days)% Exposed to fog room on September 19, 2015 at 3:15 pm (36.0462 days)time.shrinkage = numData(2:end,2);time.shrinkage = time.shrinkage-time.shrinkage(1)+30.79; % This is the strain measured by the comparator, it includes shrinkage% strains and thermal strains, in microstrainsfreeShrinkageStrain.F1.total = numData(2:end,32)*1000000;freeShrinkageStrain.F2.total = numData(2:end,35)*1000000;freeShrinkageStrain.F3.total = numData(2:end,38)*1000000;freeShrinkageStrain.F4.total = numData(2:end,41)*1000000;freeShrinkageStrain.F5.total = numData(2:end,44)*1000000;freeShrinkageStrain.F6.total = numData(2:end,47)*1000000;freeShrinkageStrain.F7.total = numData(2:52,50)*1000000; % after this point used F7 to determine the coefficient of thermal expansionfreeShrinkageStrain.F8.total = numData(2:end,53)*1000000;freeShrinkageStrain.F9.total = numData(2:end,56)*1000000;freeShrinkageStrain.F10.total = numData(2:end,59)*1000000;freeShrinkageStrain.F11.total = numData(2:end,62)*1000000;freeShrinkageStrain.F12.total = numData(2:end,65)*1000000; % Initialize the free shrinkage strain column vectorsfreeShrinkageStrain.F1.shrinkage = zeros(length(freeShrinkageStrain.F1.total),1);freeShrinkageStrain.F2.shrinkage = zeros(length(freeShrinkageStrain.F2.total),1);freeShrinkageStrain.F3.shrinkage = zeros(length(freeShrinkageStrain.F3.total),1);freeShrinkageStrain.F4.shrinkage = zeros(length(freeShrinkageStrain.F4.total),1);freeShrinkageStrain.F5.shrinkage = zeros(length(freeShrinkageStrain.F5.total),1);freeShrinkageStrain.F6.shrinkage = zeros(length(freeShrinkageStrain.F6.total),1);freeShrinkageStrain.F7.shrinkage = zeros(length(freeShrinkageStrain.F7.total),1);freeShrinkageStrain.F8.shrinkage = zeros(length(freeShrinkageStrain.F8.total),1);freeShrinkageStrain.F9.shrinkage = zeros(length(freeShrinkageStrain.F9.total),1);freeShrinkageStrain.F10.shrinkage = zeros(length(freeShrinkageStrain.F10.total),1);freeShrinkageStrain.F11.shrinkage = zeros(length(freeShrinkageStrain.F11.total),1);freeShrinkageStrain.F12.shrinkage = zeros(length(freeShrinkageStrain.F12.total),1); %% FIB 2010 Shrinkage Model and Thermal Strains % HOT BIN% Exposed to hot bin on September 18, 2015 at 1:30 pm (34.9733 days)% All RH and Temp and time before this concrete age should follow RH% and Temp and time of ambient. % All RH and Temp and time after this concrete age should follow RH % and Temp and time of hot bin. labJackTime = cat(1,LJ3_dateTime(1:1178),LJ1_dateTime(303:end));% Use the accumulating average for Temp and RH as inputs to FIB MC2010

x = cat(1,LJ3_LP20.Temp(1:1178),LJ1_LP1.Temp(303:end));y = cat(1,LJ3_LP20.RH(1:1178),LJ1_LP1.RH(303:end));o = 299-1176;[ Temp,RH ] = weightedMeanLJ1_v2( x,y,o ); volume = (3*25.4)*(3*25.4)*285; % in mm^3surfaceArea = 2*(3*25.4*3*25.4)+4*(3*25.4*285); % in mm^2volSurfaceRatio = volume/surfaceArea; [ thermalStrain.hot ] = ThermalStrainsShrinkage( x ); [ predictedStrain52.hot ] = FIBMC2010Shrinkage52( RH, Temp, labJackTime, volSurfaceRatio ); % using 52.5 N cement predictedStrain52.hot = predictedStrain52.hot - predictedStrain52.hot(1); % zeroed clear x y o % COLD BIN% Do not need to concatinate the times in this case because the two% lollipops are on the same labjacklabJackTime = LJ3_dateTime;% Exposed to cold bin on September 18, 2015 at 1:30 pm (34.9733 days)% All RH and Temp before this concrete age should follow RH and Temp% of ambient. % All RH and Temp after this concrete age should follow RH and Temp% of cold bin. % Use the accumulating average for Temp and RH as inputs for FIB MC2010x = cat(1,LJ3_LP20.Temp(1:1178),LJ3_LP4.Temp(1179:end));y = cat(1,LJ3_LP20.RH(1:1178),LJ3_LP4.RH(1179:end));o = 1179-1178;[ Temp,RH ] = weightedMeanLJ3_v2( x,y,o ); [ thermalStrain.cold ] = ThermalStrainsShrinkage( x ); [ predictedStrain52.cold, ] = FIBMC2010Shrinkage52( RH, Temp, labJackTime,volSurfaceRatio ); % using 52.5 N cementpredictedStrain52.cold = predictedStrain52.cold - predictedStrain52.cold(1); % zeroed clear x y o % AMBIENT% Use the accumulating average for Temp and RH as inputs for FIB MC2010[ Temp,RH ] = weightedMeanLJ3_v2( LJ3_LP20.Temp,LJ3_LP20.RH,1 );labJackTime = LJ3_dateTime; [ thermalStrain.ambient ] = ThermalStrainsShrinkage( LJ3_LP20.Temp ); [ predictedStrain52.ambient ] = FIBMC2010Shrinkage52( RH, Temp, labJackTime,volSurfaceRatio ); % using 52.5 N cement predictedStrain52.ambient = predictedStrain52.ambient - predictedStrain52.ambient(1); % zeroed % FOG ROOM% Exposed to fog room on September 19, 2015 at 3:15 pm (36.0462 days)% All RH and Temp and time before this concrete age should follow RH% and Temp and time of ambient.

% All RH and Temp and time after this concrete age should follow RH % and Temp of fog room (there is no fog room time so just make it equal to ambient time).% Do not use the weighted accumulated average for this case for when it's % in the fog room or else it makes no sense, but use it for when it's in% ambient conditions labJackTime = LJ3_dateTime; R = zeros(length(labJackTime),1); % RH in fog room T = zeros(length(labJackTime),1); % temperature in fog roomfor i = 1:length(labJackTime) if (LJ3_dateTime(i)>=36.0462) R(i) = 100; T(i) = 25; else R(i) = LJ3_LP20.RH(i); T(i) = LJ3_LP20.Temp(i); endend [ Temp,RH ] = weightedMeanLJ3_v2( LJ3_LP20.Temp(1:1487),LJ3_LP20.RH(1:1487),1 );Temp = cat(1,Temp,T(1488:end));RH = cat(1,RH,R(1488:end)); [ thermalStrain.fog ] = ThermalStrainsShrinkage( T ); [ predictedStrain52.fog ] = FIBMC2010Shrinkage52( RH, Temp, labJackTime,volSurfaceRatio ); % using 52.5 N cementpredictedStrain52.fog = predictedStrain52.fog - predictedStrain52.fog(1); % zeroed clear R T RH Temp %% Determine the free shrinkage strain for each environment % in microstrain % cold binfor i = 1:length(freeShrinkageStrain.F2.total) for j = 1:length(LJ3_dateTime) if (time.shrinkage(i) >= LJ3_dateTime(j)) && (time.shrinkage(i) < LJ3_dateTime(j+1)) freeShrinkageStrain.F2.shrinkage(i) = freeShrinkageStrain.F2.total(i) - thermalStrain.cold(j); freeShrinkageStrain.F10.shrinkage(i) = freeShrinkageStrain.F10.total(i) - thermalStrain.cold(j); freeShrinkageStrain.F12.shrinkage(i) = freeShrinkageStrain.F12.total(i) - thermalStrain.cold(j); break end endend % ambientfor i = 1:length(freeShrinkageStrain.F4.total) for j = 1:length(LJ3_dateTime) if (time.shrinkage(i) >= LJ3_dateTime(j)) && (time.shrinkage(i) < LJ3_dateTime(j+1)) freeShrinkageStrain.F4.shrinkage(i) = freeShrinkageStrain.F4.total(i) - thermalStrain.ambient(j); freeShrinkageStrain.F8.shrinkage(i) = freeShrinkageStrain.F8.total(i) - thermalStrain.ambient(j); freeShrinkageStrain.F9.shrinkage(i) = freeShrinkageStrain.F9.total(i) - thermalStrain.ambient(j); break end

endend % hot binx = cat(1,LJ3_dateTime(1:1176),LJ1_dateTime(299:end));for i = 1:length(freeShrinkageStrain.F3.total) for j = 1:length(x) if (time.shrinkage(i) >= x(j)) && (time.shrinkage(i) < x(j+1)) freeShrinkageStrain.F3.shrinkage(i) = freeShrinkageStrain.F3.total(i) - thermalStrain.hot(j); freeShrinkageStrain.F6.shrinkage(i) = freeShrinkageStrain.F6.total(i) - thermalStrain.hot(j); freeShrinkageStrain.F11.shrinkage(i) = freeShrinkageStrain.F11.total(i) - thermalStrain.hot(j); break end endend % fog room,specimens F1, F5for i = 1:length(freeShrinkageStrain.F1.total) for j = 1:length(LJ3_dateTime) if (time.shrinkage(i) < 36.0462) % if we are not in fog room yet if (time.shrinkage(i) >= LJ3_dateTime(j)) && (time.shrinkage(i) < LJ3_dateTime(j+1)) freeShrinkageStrain.F1.shrinkage(i) = freeShrinkageStrain.F1.total(i) - thermalStrain.ambient(j); freeShrinkageStrain.F5.shrinkage(i) = freeShrinkageStrain.F5.total(i) - thermalStrain.ambient(j); final_thermal_strain = thermalStrain.ambient(j); break end else % if we are in the fog room freeShrinkageStrain.F1.shrinkage(i) = freeShrinkageStrain.F1.total(i) - final_thermal_strain; freeShrinkageStrain.F5.shrinkage(i) = freeShrinkageStrain.F5.total(i) - final_thermal_strain; end endend % fog room,specimen7 F7for i = 1:length(freeShrinkageStrain.F7.total) for j = 1:length(LJ3_dateTime) if (time.shrinkage(i) < 36.0462) % if we are not in fog room yet if (time.shrinkage(i) >= LJ3_dateTime(j)) && (time.shrinkage(i) < LJ3_dateTime(j+1)) freeShrinkageStrain.F7.shrinkage(i) = freeShrinkageStrain.F7.total(i) - thermalStrain.ambient(j); final_thermal_strain = thermalStrain.ambient(j); break end else % if we are in the fog room freeShrinkageStrain.F7.shrinkage(i) = freeShrinkageStrain.F7.total(i) - final_thermal_strain; end endend %% Determine the average free shrinkage strain and average total strain for each environment% in microstrain % initialize the vector

freeShrinkageStrain.hot.avShrink(1) = 0;freeShrinkageStrain.hot.avTotal(1) = 0;for i=1:length(freeShrinkageStrain.F6.total) if isnan(freeShrinkageStrain.F6.total(i)) % for the row where there is no data freeShrinkageStrain.hot.avShrink(i) = NaN; freeShrinkageStrain.hot.avTotal(i) = NaN; elseif isnan(freeShrinkageStrain.F3.total(i)) % for when I could not reach this specimen to take measurements freeShrinkageStrain.hot.avShrink(i) = (freeShrinkageStrain.F6.shrinkage(i)+freeShrinkageStrain.F11.shrinkage(i))/2; freeShrinkageStrain.hot.avTotal(i) = (freeShrinkageStrain.F6.total(i)+freeShrinkageStrain.F11.total(i))/2; else freeShrinkageStrain.hot.avShrink(i) = (freeShrinkageStrain.F6.shrinkage(i)+freeShrinkageStrain.F11.shrinkage(i)+freeShrinkageStrain.F3.shrinkage(i))/3; freeShrinkageStrain.hot.avTotal(i) = (freeShrinkageStrain.F6.total(i)+freeShrinkageStrain.F11.total(i)+freeShrinkageStrain.F3.total(i))/3; endend % initialize the vectorfreeShrinkageStrain.cold.avShrink(1) = 0;freeShrinkageStrain.cold.avTotal(1) = 0;for i=1:length(freeShrinkageStrain.F2.total) if isnan(freeShrinkageStrain.F2.total(i)) % for the row where there is no data freeShrinkageStrain.cold.avShrink(i) = NaN; freeShrinkageStrain.cold.avTotal(i) = NaN; else freeShrinkageStrain.cold.avShrink(i) = (freeShrinkageStrain.F12.shrinkage(i)+freeShrinkageStrain.F10.shrinkage(i)+freeShrinkageStrain.F2.shrinkage(i))/3; freeShrinkageStrain.cold.avTotal(i) = (freeShrinkageStrain.F12.total(i)+freeShrinkageStrain.F10.total(i)+freeShrinkageStrain.F2.total(i))/3; endend % initialize the vectorfreeShrinkageStrain.ambient.avShrink(1) = 0;freeShrinkageStrain.ambient.avTotal(1) = 0;for i=1:length(freeShrinkageStrain.F9.total) if isnan(freeShrinkageStrain.F9.total(i)) % for the row where there is no data freeShrinkageStrain.ambient.avShrink(i) = NaN; freeShrinkageStrain.ambient.avTotal(i) = NaN; else freeShrinkageStrain.ambient.avShrink(i) = (freeShrinkageStrain.F9.shrinkage(i)+freeShrinkageStrain.F8.shrinkage(i)+freeShrinkageStrain.F4.shrinkage(i))/3; freeShrinkageStrain.ambient.avTotal(i) = (freeShrinkageStrain.F9.total(i)+freeShrinkageStrain.F8.total(i)+freeShrinkageStrain.F4.total(i))/3; endend % initialize the vectorfreeShrinkageStrain.fog.avShrink(1) = 0;freeShrinkageStrain.fog.avTotal(1) = 0;for i=1:length(freeShrinkageStrain.F1.total) if isnan(freeShrinkageStrain.F1.total(i)) freeShrinkageStrain.fog.avShrink(i) = NaN; freeShrinkageStrain.fog.avTotal(i) = NaN; elseif (i<=52)

freeShrinkageStrain.fog.avShrink(i) = (freeShrinkageStrain.F1.shrinkage(i)+freeShrinkageStrain.F5.shrinkage(i)+freeShrinkageStrain.F7.shrinkage(i))/3; freeShrinkageStrain.fog.avTotal(i) = (freeShrinkageStrain.F1.total(i)+freeShrinkageStrain.F5.total(i)+freeShrinkageStrain.F7.total(i))/3; else freeShrinkageStrain.fog.avShrink(i) = (freeShrinkageStrain.F1.shrinkage(i)+freeShrinkageStrain.F5.shrinkage(i))/2; freeShrinkageStrain.fog.avTotal(i) = (freeShrinkageStrain.F1.total(i)+freeShrinkageStrain.F5.total(i))/2; endend %% Difference between test and predicted percentDiff = struct; % HOT BINpercentDiff.hot = zeros(length(time.shrinkage),1);labJackTime = cat(1,LJ3_dateTime(1:1178),LJ1_dateTime(303:end));for i = 1:length(time.shrinkage) j = 1; while time.shrinkage(i) >= labJackTime(j) percentDiff.hot(i) = freeShrinkageStrain.hot.avShrink(i)/predictedStrain52.hot(j); j = j+1; endend % COLD BINpercentDiff.cold = zeros(length(time.shrinkage),1);labJackTime = LJ3_dateTime;for i = 1:length(time.shrinkage) j = 1; while time.shrinkage(i) >= labJackTime(j) percentDiff.cold(i) = freeShrinkageStrain.cold.avShrink(i)/predictedStrain52.cold(j); j = j+1; endend % AMBIENTpercentDiff.ambient = zeros(length(time.shrinkage),1);labJackTime = LJ3_dateTime;for i = 1:length(time.shrinkage) j = 1; while time.shrinkage(i) >= labJackTime(j) percentDiff.ambient(i) = freeShrinkageStrain.ambient.avShrink(i)/predictedStrain52.ambient(j); j = j+1; endend figure()plot(time.shrinkage, percentDiff.hot,time.shrinkage, percentDiff.cold,time.shrinkage, percentDiff.ambient)xlabel('Concrete Age (days)')ylabel('Experimental Strain / Predicted Strain')legend('Hot Bin','Cold Bin','Ambient')title('Experimental To Predicted Shrinkage Strains')grid on

ylim([0.2 1.4]) clear i j %% Compare the total_strain, the FreeShrinkageStrain, and the thermal_strain_??? figure('Name','All Strains-Hot Bin','NumberTitle','off')plot(time.shrinkage,freeShrinkageStrain.hot.avTotal, time.shrinkage, freeShrinkageStrain.hot.avShrink,cat(1,LJ3_dateTime(1:1174),LJ1_dateTime(299:end)),thermalStrain.hot)title('Strains in Hot Bin Free Shrinkage Specimens')xlabel('Concrete Age (days)')ylabel('Strain (microstrain)')legend('Average Total Strain','Average Shrinkage Strain','Thermal Strain', 'Location', 'southwest')grid on figure('Name','All Strains-Cold Bin','NumberTitle','off')plot(time.shrinkage,freeShrinkageStrain.cold.avTotal, time.shrinkage, freeShrinkageStrain.cold.avShrink,LJ3_dateTime,thermalStrain.cold)title('Strains in Cold Bin Free Shrinkage Specimens')xlabel('Concrete Age (days)')ylabel('Strain (microstrain)')legend('Average Total Strain','Average Shrinkage Strain','Thermal Strain', 'Location', 'southwest')grid on figure('Name','All Strains-Ambient','NumberTitle','off')plot(time.shrinkage,freeShrinkageStrain.ambient.avTotal, time.shrinkage, freeShrinkageStrain.ambient.avShrink,LJ3_dateTime,thermalStrain.ambient)title('Strains in Ambient Free Shrinkage Specimens')xlabel('Concrete Age (days)')ylabel('Strain (microstrain)')legend('Average Total Strain','Average Shrinkage Strain','Thermal Strain', 'Location', 'southwest')grid on figure('Name','All Strains-FogRoom','NumberTitle','off')plot(time.shrinkage,freeShrinkageStrain.fog.avTotal, time.shrinkage, freeShrinkageStrain.fog.avShrink,LJ3_dateTime,thermalStrain.fog)title('Strains in Fog Room Free Shrinkage Specimens')xlabel('Concrete Age (days)')ylabel('Strain (microstrain)')legend('Average Total Strain','Average Shrinkage Strain','Thermal Strain', 'Location', 'southeast')grid onylim([-200 150]) % free shrinkage thermal strains figure('Name','Thermal Strains-Free Shrinkage','NumberTitle','off')plot(cat(1,LJ3_dateTime(1:1178),LJ1_dateTime(303:end)), thermalStrain.hot, LJ3_dateTime, thermalStrain.cold, LJ3_dateTime, thermalStrain.ambient,LJ3_dateTime,thermalStrain.fog)grid ontitle('Thermal Strains for Free Shrinkage Specimens')xlabel('Concrete Age (days)')ylabel('Thermal Strain (microstrain)')legend('Hot Bin','Cold Bin','Ambient','Fog Room','Location', 'southwest') %% Compare the test and predicted strains

% hot tote binfigure('Name','Free Shrinkage-Hot Bin','NumberTitle','off')plot(time.shrinkage, freeShrinkageStrain.F3.shrinkage,time.shrinkage, freeShrinkageStrain.F6.shrinkage,time.shrinkage, freeShrinkageStrain.F11.shrinkage,time.shrinkage,... freeShrinkageStrain.hot.avShrink, cat(1,LJ3_dateTime(1:1178),LJ1_dateTime(303:end)), predictedStrain52.hot)grid ontitle('Free Shrinkage Strain in Hot Tote Bin')xlabel('Concrete Age (days)')ylabel('Free Shrinkage Strain (microstrain)')legend('Specimen F3','Specimen F6','Specimen F11','Average', 'FIB MC2010-42.5 R cement','Location', 'northeast') % cold tote binfigure('Name','Free Shrinkage-Cold Bin','NumberTitle','off')plot(time.shrinkage, freeShrinkageStrain.F10.shrinkage,time.shrinkage, freeShrinkageStrain.F12.shrinkage,time.shrinkage, freeShrinkageStrain.F2.shrinkage,time.shrinkage,... freeShrinkageStrain.cold.avShrink, LJ3_dateTime, predictedStrain52.cold)grid ontitle('Free Shrinkage Strain in Cold Tote Bin')xlabel('Concrete Age (days)')ylabel('Free Shrinkage Strain (microstrain)')legend('Specimen F10','Specimen F12','Specimen F2','Average', 'FIB MC2010-42.5 R cement','Location', 'northeast') % ambientfigure('Name','Free Shrinkage-Ambient','NumberTitle','off')plot(time.shrinkage, freeShrinkageStrain.F4.shrinkage,time.shrinkage, freeShrinkageStrain.F8.shrinkage,time.shrinkage, freeShrinkageStrain.F9.shrinkage,time.shrinkage,... freeShrinkageStrain.ambient.avShrink, LJ3_dateTime, predictedStrain52.ambient)grid ontitle('Free Shrinkage Strain in Ambient Env')xlabel('Concrete Age (days)')ylabel('Free Shrinkage Strain (microstrain)')legend('Specimen F4','Specimen F8','Specimen F9','Average', 'FIB MC2010-42.5 R cement','Location', 'northeast') % fog roomfigure('Name','Free Shrinkage-Fog Room','NumberTitle','off')plot(time.shrinkage, freeShrinkageStrain.F1.shrinkage,time.shrinkage, freeShrinkageStrain.F5.shrinkage,time.shrinkage(1:51), freeShrinkageStrain.F7.shrinkage,time.shrinkage,... freeShrinkageStrain.fog.avShrink, LJ3_dateTime, predictedStrain52.fog)grid ontitle('Free Shrinkage Strain in Fog Room')xlabel('Concrete Age (days)')ylabel('Free Shrinkage Strain (microstrain)')legend('Specimen F1','Specimen F5','Specimen F7','Average','FIB MC2010-42.5 R cement', 'Location', 'southeast')ylim([-250 150])

F.1 CreepResults.m

%% Read in the data% read in the excel file fileName = 'results.xlsx';sheetName = 'Creep';

% pull the applied load data and load time data from the sheet[numData, txtData, rawData] = xlsread(fileName,sheetName);load = numData(40:end,2); % in kNload = load*1000; % in Naverage_load = mean(load); % in N % Specimens cast on August 14, 2015 in the afternoon (~2 pm)% Out of fog room on September 14, 2015 at 9 am% First recording on September 15, 2015 at 1:20 pm% Application of the load on September 18 2015, at 3:10 pm% Therefore the concrete age is ~30.79 days at the start of drying% Therefore the concrete age is ~31.97 days at the first measurement% Therefore the concrete age is ~35.05 days at aplication of the loadtime.load = numData(40:end,4);time.load = time.load - time.load(1)+35.05; time.creep = numData(21,10:end); % only keep the data from when the specimens are loadedtime.creep = time.creep-time.creep(1)+35.05; % Pull the creep strain data from the sheet and only keep the data from% when the specimens are loaded.% Contains the creep and the shrinkage strain and the thermal strain (the shrinkage strain needs% to be subtracted out --> I do this in PlotResults file) (the thermal% strain needs to be subtracted out --> I do this below)% Already in microstraincreepStrain.C1.total = numData(23:25,10:end);creepStrain.C2.total = numData(26:28,10:end);creepStrain.C3.total = numData(29:31,10:end);creepStrain.C4.total = numData(32:34,10:end);creepStrain.C5.total = numData(35:37,10:end); % Subtract out the initial shrinkage and thermal strains (i.e. the% shrinkage and thermal strains that occured before the specimens were % loaded/put in creep chamber) and the elastic strain (i.e. the strain % that occured due to applying the load).% Therefore all we are left with is the creep strain and the shrinkage and% thermal strains that occur while the specimens are loaded in their box.for i = 1:3 % iterate over the rows creepStrain.C1.total(i,:) = creepStrain.C1.total(i,:) - creepStrain.C1.total(i,1); creepStrain.C2.total(i,:) = creepStrain.C2.total(i,:) - creepStrain.C2.total(i,1); creepStrain.C3.total(i,:) = creepStrain.C3.total(i,:) - creepStrain.C3.total(i,1); creepStrain.C4.total(i,:) = creepStrain.C4.total(i,:) - creepStrain.C4.total(i,1); creepStrain.C5.total(i,:) = creepStrain.C5.total(i,:) - creepStrain.C5.total(i,1);end %% Determine the average total strain (i.e. creep and shrinkage and thermal strain) for each specimen % initialize the vectorcreepStrain.C1.avTotal(1) = 0;for i=1:length(creepStrain.C1.total) if isnan(creepStrain.C1.total(1,i)) creepStrain.C1.avTotal(i) = NaN;

else creepStrain.C1.avTotal(i) = (creepStrain.C1.total(1,i)+creepStrain.C1.total(2,i)+creepStrain.C1.total(3,i))/3; endend% initialize the vectorcreepStrain.C2.avTotal(1) = 0;for i=1:length(creepStrain.C2.total) if isnan(creepStrain.C2.total(1,i)) creepStrain.C2.avTotal(i) = NaN; else creepStrain.C2.avTotal(i) = (creepStrain.C2.total(1,i)+creepStrain.C2.total(2,i)+creepStrain.C2.total(3,i))/3; endend% initialize the vectorcreepStrain.C3.avTotal(1) = 0;for i=1:length(creepStrain.C3.total) if isnan(creepStrain.C3.total(1,i)) creepStrain.C3.avTotal(i) = NaN; else creepStrain.C3.avTotal(i) = (creepStrain.C3.total(1,i)+creepStrain.C3.total(2,i)+creepStrain.C3.total(3,i))/3; endend% initialize the vectorcreepStrain.C4.avTotal(1) = 0;for i=1:length(creepStrain.C4.total) if isnan(creepStrain.C4.total(1,i)) creepStrain.C4.avTotal(i) = NaN; else creepStrain.C4.avTotal(i) = (creepStrain.C4.total(1,i)+creepStrain.C4.total(2,i)+creepStrain.C4.total(3,i))/3; endend% initialize the vectorcreepStrain.C5.avTotal(1) = 0;for i=1:length(creepStrain.C5.total) if isnan(creepStrain.C5.total(1,i)) creepStrain.C5.avTotal(i) = NaN; else creepStrain.C5.avTotal(i) = (creepStrain.C5.total(1,i)+creepStrain.C5.total(2,i)+creepStrain.C5.total(3,i))/3; endend %% FIB 2010 Creep (i.e. Compliance) Model and thermal strain % Only consider the RH and the Temp from the moment when the specimens are% in the creep frame (~35.05 days) % Use the weighted accumulated average for RH and Temp as inputs to FIB% MC2010[ Temp,RH ] = weightedMeanLJ3_v2( LJ3_LP16.Temp(1202:end),LJ3_LP16.RH(1202:end),1202 );labJackTime = LJ3_dateTime(1202:end); % CYLINDER 1area = 0.25*pi()*((156+151+151+151)/4)^2; % in mm^2height = (300+300+300)/3; % in mmcircumference = pi()*((156+151+151+151)/4); % in mmvolume = area*height; % in mm^3

surfaceArea = circumference*height; % in mm^2volSurfaceRatio = volume/surfaceArea; % in mm [ predictedStrain52.C1] = FIBMC2010Creep52( RH,Temp,labJackTime,volSurfaceRatio,average_load,area ); % using 52.5 N cementpredictedStrain52.C1 = predictedStrain52.C1 - predictedStrain52.C1(1); % zeroedpredictedCompliance52.C1 = ((predictedStrain52.C1/1000000)/(average_load/area)-1/35932)*1000000; % need to fix Ecmto % CYLINDER 2area = 0.25*pi()*((156+155+151+151)/4)^2; % in mm^2height = (304+304+304)/3; % in mmcircumference = pi()*((156+155+151+151)/4); % in mmvolume = area*height; % in mm^3surfaceArea = circumference*height; % in mm^2volSurfaceRatio = volume/surfaceArea; % in mm [ predictedStrain52.C2 ] = FIBMC2010Creep52( RH,Temp,labJackTime,volSurfaceRatio,average_load,area ); % using 52.5 N cementpredictedStrain52.C2 = predictedStrain52.C2 - predictedStrain52.C2(1); % zeroedpredictedCompliance52.C2 = ((predictedStrain52.C2/1000000)/(average_load/area)-1/35932)*1000000; % need to fix Ecmto % CYLINDER 3area = 0.25*pi()*((152+152+161+150)/4)^2; % in mm^2height = (300+300+299)/3; % in mmcircumference = pi()*((152+152+161+150)/4); % in mmvolume = area*height; % in mm^3surfaceArea = circumference*height; % in mm^2volSurfaceRatio = volume/surfaceArea; % in mm [ predictedStrain52.C3 ] = FIBMC2010Creep52( RH,Temp,labJackTime,volSurfaceRatio,average_load,area ); % using 52.5 N cementpredictedStrain52.C3 = predictedStrain52.C3 - predictedStrain52.C3(1); % zeroedpredictedCompliance52.C3 = ((predictedStrain52.C3/1000000)/(average_load/area)-1/35932)*1000000; % need to fix Ecmto % CYLINDER 4area = 0.25*pi()*((156+152+151+151)/4)^2; % in mm^2height = (301+302+302)/3; % in mmcircumference = pi()*((156+152+151+151)/4); % in mmvolume = area*height; % in mm^3surfaceArea = circumference*height; % in mm^2volSurfaceRatio = volume/surfaceArea; % in mm [ predictedStrain52.C4 ] = FIBMC2010Creep52( RH,Temp,labJackTime,volSurfaceRatio,average_load,area ); % using 52.5 N cementpredictedStrain52.C4 = predictedStrain52.C4 - predictedStrain52.C4(1); % zeroedpredictedCompliance52.C4 = ((predictedStrain52.C4/1000000)/(average_load/area)-1/35932)*1000000; % need to fix Ecmto % CYLINDER 5area = 0.25*pi()*((159+143+152+151)/4)^2; % in mm^2height = (302+300+300)/3; % in mm

circumference = pi()*((159+143+152+151)/4); % in mmvolume = area*height; % in mm^3surfaceArea = circumference*height; % in mm^2volSurfaceRatio = volume/surfaceArea; % in mm [ predictedStrain52.C5 ] = FIBMC2010Creep52( RH,Temp,labJackTime,volSurfaceRatio,average_load,area); % using 52.5 N cementpredictedStrain52.C5 = predictedStrain52.C5 - predictedStrain52.C5(1); % zeroedpredictedCompliance52.C5 = ((predictedStrain52.C5/1000000)/(average_load/area)-1/35932)*1000000; % need to fix Ecmto % clear the variables I don't need anymoreclear area height circumference volume surfaceArea volSurfaceRatio %% Calculate the thermal strain% Pick LJ3_LP16.Temp(1202:end) because that is the temp when the load is applied[ thermalStrain.creep ] = ThermalStrainsShrinkage( LJ3_LP16.Temp(1202:end) ); %% Determine the creep + shrinkage strain % (i.e. subtract out the thermal strain from the total strain measured)% in microstrain% Dip in temperature that causes different thermal strain at i = 63 so% just use the previous value for creepShrink % initialize the vectorscreepStrain.C1.creepShrink = zeros(3,length(creepStrain.C1.total));creepStrain.C2.creepShrink = zeros(3,length(creepStrain.C2.total));creepStrain.C3.creepShrink = zeros(3,length(creepStrain.C3.total));creepStrain.C4.creepShrink = zeros(3,length(creepStrain.C4.total));creepStrain.C5.creepShrink = zeros(3,length(creepStrain.C5.total)); for i=1:length(creepStrain.C1.total) for j = 1:length(thermalStrain.creep) if (time.creep(i) >= labJackTime(j)) && (time.creep(i) < labJackTime(j+1)) for k = 1:3 if isequal(i,63) creepStrain.C1.creepShrink(k,i) = creepStrain.C1.creepShrink(k,i-1); creepStrain.C2.creepShrink(k,i) = creepStrain.C2.creepShrink(k,i-1); creepStrain.C3.creepShrink(k,i) = creepStrain.C3.creepShrink(k,i-1); creepStrain.C4.creepShrink(k,i) = creepStrain.C4.creepShrink(k,i-1); creepStrain.C5.creepShrink(k,i) = creepStrain.C5.creepShrink(k,i-1); else creepStrain.C1.creepShrink(k,i) = creepStrain.C1.total(k,i) - thermalStrain.creep(j); creepStrain.C2.creepShrink(k,i) = creepStrain.C2.total(k,i) - thermalStrain.creep(j); creepStrain.C3.creepShrink(k,i) = creepStrain.C3.total(k,i) - thermalStrain.creep(j); creepStrain.C4.creepShrink(k,i) = creepStrain.C4.total(k,i) - thermalStrain.creep(j); creepStrain.C5.creepShrink(k,i) = creepStrain.C5.total(k,i) - thermalStrain.creep(j); end end break end endend

clear i j k %% Determine the average creep + shrinkage strain (i.e. no thermal strains)% in microstrain % initialize the vectorcreepStrain.C1.avCreepShrink(1) = 0;for i=1:length(creepStrain.C1.creepShrink) if isnan(creepStrain.C1.creepShrink(1,i)) creepStrain.C1.avCreepShrink(i) = NaN; else creepStrain.C1.avCreepShrink(i) = (creepStrain.C1.creepShrink(1,i)+creepStrain.C1.creepShrink(2,i)+creepStrain.C1.creepShrink(3,i))/3; endend% initialize the vectorcreepStrain.C2.avCreepShrink(1) = 0;for i=1:length(creepStrain.C2.creepShrink) if isnan(creepStrain.C2.creepShrink(1,i)) creepStrain.C2.avCreepShrink(i) = NaN; else creepStrain.C2.avCreepShrink(i) = (creepStrain.C2.creepShrink(1,i)+creepStrain.C2.creepShrink(2,i)+creepStrain.C2.creepShrink(3,i))/3; endend% initialize the vectorcreepStrain.C3.avCreepShrink(1) = 0;for i=1:length(creepStrain.C3.creepShrink) if isnan(creepStrain.C3.creepShrink(1,i)) creepStrain.C3.avCreepShrink(i) = NaN; else creepStrain.C3.avCreepShrink(i) = (creepStrain.C3.creepShrink(1,i)+creepStrain.C3.creepShrink(2,i)+creepStrain.C3.creepShrink(3,i))/3; endend% initialize the vectorcreepStrain.C4.avCreepShrink(1) = 0;for i=1:length(creepStrain.C4.creepShrink) if isnan(creepStrain.C4.creepShrink(1,i)) creepStrain.C4.avCreepShrink(i) = NaN; else creepStrain.C4.avCreepShrink(i) = (creepStrain.C4.creepShrink(1,i)+creepStrain.C4.creepShrink(2,i)+creepStrain.C4.creepShrink(3,i))/3; endend% initialize the vectorcreepStrain.C5.avCreepShrink(1) = 0;for i=1:length(creepStrain.C5.creepShrink) if isnan(creepStrain.C5.creepShrink(1,i)) creepStrain.C5.avCreepShrink(i) = NaN; else creepStrain.C5.avCreepShrink(i) = (creepStrain.C5.creepShrink(1,i)+creepStrain.C5.creepShrink(2,i)+creepStrain.C5.creepShrink(3,i))/3; endend

%% Compare the total_strain, the creep_shrink_strain, and the thermal_strain_creep figure('Name','All Strains-C1','NumberTitle','off')plot(time.creep,creepStrain.C1.avTotal,time.creep,creepStrain.C1.avCreepShrink,LJ3_dateTime(1202:end), thermalStrain.creep)title('Strains in Specimen C1')xlabel('Concrete Age (days)')ylabel('Strain (microstrain)')legend('Average Total Strain','Average Creep+Shrinkage Strain','Thermal Strain')grid on figure('Name','All Strains-C2','NumberTitle','off')plot(time.creep,creepStrain.C2.avTotal,time.creep,creepStrain.C2.avCreepShrink,LJ3_dateTime(1202:end), thermalStrain.creep)title('Strains in Specimen C2')xlabel('Concrete Age (days)')ylabel('Strain (microstrain)')legend('Average Total Strain','Average Creep+Shrinkage Strain','Thermal Strain')grid on figure('Name','All Strains-C3','NumberTitle','off')plot(time.creep,creepStrain.C3.avTotal,time.creep,creepStrain.C3.avCreepShrink,LJ3_dateTime(1202:end), thermalStrain.creep)title('Strains in Specimen C3')xlabel('Concrete Age (days)')ylabel('Strain (microstrain)')legend('Average Total Strain','Average Creep+Shrinkage Strain','Thermal Strain')grid on figure('Name','All Strains-C4','NumberTitle','off')plot(time.creep,creepStrain.C4.avTotal,time.creep,creepStrain.C4.avCreepShrink,LJ3_dateTime(1202:end), thermalStrain.creep)title('Strains in Specimen C4')xlabel('Concrete Age (days)')ylabel('Strain (microstrain)')legend('Average Total Strain','Average Creep+Shrinkage Strain','Thermal Strain')grid on figure('Name','All Strains-C5','NumberTitle','off')plot(time.creep,creepStrain.C5.avTotal,time.creep,creepStrain.C5.avCreepShrink,LJ3_dateTime(1202:end), thermalStrain.creep)title('Strains in Specimen C5')xlabel('Concrete Age (days)')ylabel('Strain (microstrain)')legend('Average Total Strain','Average Creep+Shrinkage Strain','Thermal Strain')grid on figure()plot(LJ3_dateTime(660:end),LJ3_LP16.RH(660:end),LJ1_dateTime(9:end),LJ1_LP1.RH(9:end))xlabel('Concrete Age (days)')ylabel('Relative Humidity (%)')legend('Creep Chamber RH','Hot Bin RH')grid on

figure()plot(LJ3_dateTime(660:end),LJ3_LP16.Temp(660:end),LJ1_dateTime(9:end),LJ1_LP1.Temp(9:end))xlabel('Concrete Age (days)')ylabel('Temperature (\circ C)')legend('Creep Chamber Temp','Hot Bin Temp')grid on %% Plot the creep strains% Need to subract the free shrinkage strain so that we only get the creep% strain, not the creep and shrinkage strain% Only taking from [5:6 8:end] of the FreeShrinkageStrain values because that% is where the date corresponds to the date of loading of the creep% specimens (i.e. both September 18, 2015), and skip entries because they are a% NaN entry% The first entry of the creep_shrinkageStrain_C? has already been zeroed% for both elastic strain due to loading and free shrinkage and thermal shrinkage, therefore we% do not need to subtract out the free shrinkage again. Create this new% modified term where the first entry is zeromodified_FreeShrinkageStrainAverage_Hot = freeShrinkageStrain.hot.avShrink([5:6 8:51 53:67 70:73 82:86 88:89 93:end]);modified_FreeShrinkageStrainAverage_Hot(1) = 0; % indices 50, 51, 56 have a problem because of the values from% freeShrinkageStrain.hot.avShrink from F3 --> need to check this in% notebook creepStrain.C1.avCreep = creepStrain.C1.avCreepShrink-modified_FreeShrinkageStrainAverage_Hot;creepStrain.C2.avCreep = creepStrain.C2.avCreepShrink-modified_FreeShrinkageStrainAverage_Hot;creepStrain.C3.avCreep = creepStrain.C3.avCreepShrink-modified_FreeShrinkageStrainAverage_Hot;creepStrain.C4.avCreep = creepStrain.C4.avCreepShrink-modified_FreeShrinkageStrainAverage_Hot;creepStrain.C5.avCreep = creepStrain.C5.avCreepShrink-modified_FreeShrinkageStrainAverage_Hot; for i = 1:3 creepStrain.C1.Creep(i,:) = creepStrain.C1.creepShrink(i,:)-modified_FreeShrinkageStrainAverage_Hot; creepStrain.C2.Creep(i,:) = creepStrain.C2.creepShrink(i,:)-modified_FreeShrinkageStrainAverage_Hot; creepStrain.C3.Creep(i,:) = creepStrain.C3.creepShrink(i,:)-modified_FreeShrinkageStrainAverage_Hot; creepStrain.C4.Creep(i,:) = creepStrain.C4.creepShrink(i,:)-modified_FreeShrinkageStrainAverage_Hot; creepStrain.C5.Creep(i,:) = creepStrain.C5.creepShrink(i,:)-modified_FreeShrinkageStrainAverage_Hot;end % plot C1, removed index 63-where chamber was opened and lost tempfigure('Name','Creep Strain C1','NumberTitle','off')plot(time.creep([1:62 64:end]), creepStrain.C1.Creep(1,[1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C1.Creep(2,[1:62 64:end]),time.creep([1:62 64:end]),... creepStrain.C1.Creep(3,[1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C1.avCreep([1:62 64:end]), LJ3_dateTime(1202:end),... predictedStrain52.C1)grid ontitle('Creep Strain of Specimen C1')xlabel('Concreete Age (days)')ylabel('Creep Strain (microstrain)')legend('Gauge 35','Gauge 36','Gauge 37','Average','FIB MC2010-42.5 R cement','Location', 'southwest') % plot C2

figure('Name','Creep Strain C2','NumberTitle','off')plot(time.creep([1:62 64:end]), creepStrain.C2.Creep(1,[1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C2.Creep(2,[1:62 64:end]),time.creep([1:62 64:end]),... creepStrain.C2.Creep(3,[1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C2.avCreep([1:62 64:end]), LJ3_dateTime(1202:end),... predictedStrain52.C2)grid ontitle('Creep Strain of Specimen C2')xlabel('Concrete Age (days)')ylabel('Creep Strain (microstrain)')legend('Gauge 38','Gauge 39','Gauge 40','Average','FIB MC2010-42.5 R cement', 'Location', 'southwest') % plot C3figure('Name','Creep Strain C3','NumberTitle','off')plot(time.creep([1:62 64:end]), creepStrain.C3.Creep(1,[1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C3.Creep(2,[1:62 64:end]),time.creep([1:62 64:end]),... creepStrain.C3.Creep(3,[1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C3.avCreep([1:62 64:end]), LJ3_dateTime(1202:end),... predictedStrain52.C3)grid ontitle('Creep Strain of Specimen C3')xlabel('Concrete Age (days)')ylabel('Creep Strain (microstrain)')legend('Gauge 41','Gauge 42','Gauge 43','Average','FIB MC2010-42.5 R cement', 'Location', 'southwest') % plot C4figure('Name','Creep Strain C4','NumberTitle','off')plot(time.creep([1:62 64:end]), creepStrain.C4.Creep(1,[1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C4.Creep(2,[1:62 64:end]),time.creep([1:62 64:end]),... creepStrain.C4.Creep(3,[1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C4.avCreep([1:62 64:end]), LJ3_dateTime(1202:end),... predictedStrain52.C4)grid ontitle('Creep Strain of Specimen C4')xlabel('Concrete Age (days)')ylabel('Creep Strain (microstrain)')legend('Gauge 44','Gauge 45','Gauge 46','Average','FIB MC2010-42.5 R cement', 'Location', 'southwest') % plot C5figure('Name','Creep Strain C5','NumberTitle','off')plot(time.creep([1:62 64:end]), creepStrain.C5.Creep(1,[1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C5.Creep(2,[1:62 64:end]),time.creep([1:62 64:end]),... creepStrain.C5.Creep(3,[1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C5.avCreep([1:62 64:end]), LJ3_dateTime(1202:end),... predictedStrain52.C5)grid ontitle('Creep Strain of Specimen C5')xlabel('Concrete Age (days)')ylabel('Creep Strain (microstrain)')legend('Gauge 47','Gauge 48','Gauge 49','Average','FIB MC2010-42.5 R cement', 'Location', 'southwest') % plot average of all creep specimens in one plot with average% predictedStrain of all predictedStrains calculated

predictedStrain52.C_average = (predictedStrain52.C1+predictedStrain52.C2+predictedStrain52.C3+predictedStrain52.C4+predictedStrain52.C5)/5;figure()plot(time.creep([1:62 64:end]), creepStrain.C1.avCreep([1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C2.avCreep([1:62 64:end]),time.creep([1:62 64:end]),... creepStrain.C3.avCreep([1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C4.avCreep([1:62 64:end]),time.creep([1:62 64:end]), creepStrain.C5.avCreep([1:62 64:end]),... LJ3_dateTime(1202:end),predictedStrain52.C_average)grid ontitle('Average Predicted and Experimental Creep Strain')xlabel('Concrete Age (days)')ylabel('Average Creep Strain (microstrain)')ylim([-450 0])legend('C1','C2','C3','C4', 'C5','FIB MC2010-42.5 R cement','Location', 'northeast') % plot applied loadfigure('Name','Applied Load','NumberTitle','off')plot(time.load, load/1000,'o')grid ontitle('Applied Load for Creep Test')xlabel('Concrete Age (days)')ylabel('Applied Load (kN)') % plot creep thermal strains figure('Name','Thermal Strains-Creep','NumberTitle','off')plot(LJ3_dateTime(1202:end), thermalStrain.creep)title('Thermal Strains for Creep Specimens')xlabel('Concrete Age (days)')ylabel('Thermal Strain (microstrain)') %% Calculate the percent difference percentDiff.creepC1 = zeros(length(time.creep),1);percentDiff.creepC2 = zeros(length(time.creep),1);percentDiff.creepC3 = zeros(length(time.creep),1);percentDiff.creepC4 = zeros(length(time.creep),1);percentDiff.creepC5 = zeros(length(time.creep),1);labJackTime = LJ3_dateTime(1202:end);for i = 1:length(time.creep) j = 1; while time.creep(i) >= labJackTime(j) percentDiff.creepC1(i) = creepStrain.C1.avCreep(i)/predictedStrain52.C1(j); percentDiff.creepC2(i) = creepStrain.C2.avCreep(i)/predictedStrain52.C2(j); percentDiff.creepC3(i) = creepStrain.C3.avCreep(i)/predictedStrain52.C3(j); percentDiff.creepC4(i) = creepStrain.C4.avCreep(i)/predictedStrain52.C4(j); percentDiff.creepC5(i) = creepStrain.C5.avCreep(i)/predictedStrain52.C5(j); j = j+1; endend figure()plot(time.creep, percentDiff.creepC1,time.creep, percentDiff.creepC2,time.creep, percentDiff.creepC3,time.creep, percentDiff.creepC4,time.creep, percentDiff.creepC5)xlabel('Concrete Age (days)')

ylabel('Experimental Strain / Predicted Strain')legend('Specimen C1','Specimen C2','Specimen C3','Specimen C4','Specimen C5')title('Experimental To Predicted Creep Strains')grid on

F. interpVS.m

function [ VS ] = interpVS( RH,Temp,labJackTime, VSHigh, VSLow )% Interpolate the V/S ratio for the longitudinal strains for Pfender gauge% readings. % We cannot just take the middle distance - we need a V/S that is% representative of the average.% Therefore, find the V/S that gives you the average of all the predicted% strains for various V/S values within the range measured by the Pfender% gauge. % RH = relative humidity, in percent, a scalar% Temp = temperature, in degrees C, a scalar% labJackTime = date and time of interest, in days, a scalar% VS = V/S ratio, in mm% VSHigh = V/S farthest from the open end (i.e. upper bound),in mm% VSLow = V/S closest from the open end (i.e. lower bound), in mm fcm28_experiment = 54.6; % average value tc = 30.79; fcm28 = fcm28_experiment*(1.06-0.003*Temp); beta_bs = 1-exp(-0.2*sqrt(labJackTime)); alphaAS = 600; % for 52.5 N cement eps_cbso = -alphaAS*(((fcm28/10)/(6+fcm28/10))^2.5)*10^(-6); eps_cbs = eps_cbso*beta_bs; alphaDS1 = 6; % for 52.5 N cement alphaDS2 = 0.012; % for 52.5 N cement eps_cdso = ((220+110*alphaDS1)*exp(-alphaDS2*fcm28))*10^(-6); beta_s1 = (35/fcm28)^0.1; % <= 1.0 if (beta_s1 > 1.0) beta_s1 = 1.0; end beta_s1t = ((Temp-20)/25)^3; RHT = 99*beta_s1+beta_s1t; % <= 100 if RHT>100 RHT = 100; end if (RH >= RHT) beta_rh = 0.25; else beta_rh = -1.55*(1-(RH/100)^3); end beta_st = 1+(4/(103-RH))*((Temp-20)/40); beta_rht = beta_rh*beta_st; % create a V/S vector with values ranging from VSLow to VSHighvs_vector(1) = VSLow; % in mmfor i = 2:((VSHigh-VSLow+1)*2) vs_vector(i) = vs_vector(i-1)+0.5;

end % calculate the shrinkage strain values for each v/s valueeps_values = zeros(length(vs_vector),1); % initialize the vector for the output shrinkage strainsfor i = 1:length(vs_vector) [ eps_values(i) ] = FIBMC2010Shrinkage52( RH, Temp, labJackTime,vs_vector(i));end fun = @(volSurfaceRatio) (eps_cbs+(eps_cdso*beta_rht*(((labJackTime-tc)./((0.035*(2*volSurfaceRatio).^2.*exp(-0.06*(Temp-20)))+labJackTime-tc)).^0.5)))*1000000; % in microstrain q = integral(fun,VSLow,VSHigh); % integrate the shrinkage strain from VSLow to VSHigh average = q/(100); % average shrinakge strain, distance between targets is 100 mm % find the V/S value corresponding to the average strainfor i = 1:length(eps_values) if ((eps_values(i) <= average) && (eps_values(i+1) > average)) VS = vs_vector(i); break endend figure()plot(vs_vector,eps_values,VS,average,'o')xlabel('V/S (mm)')ylabel('Shrinkage Strain (microstrain)') end

F. GradientResults_v2.m%% Read in the data% read in the excel file fileName = 'results.xlsx';sheetName = 'Gradient'; % pull the shrinkage strain data and the date and time data from the sheet[numData, txtData, rawData] = xlsread(fileName,sheetName);numData = numData(1:51,:); % Specimens cast on August 14, 2015 in the afternoon (~2 pm)% Exposed to drying on September 14, 2015 at 9 am (~30.79)% Exposed to hot and cold bin on September 18, 2015 at 1:30 pm (34.97 days)% Only at 36 days is the temperature inside the specimens (G1,G2 in% particular) is stable at ~40 degrees C --> this would be September 19, 2015 at% 1:30 pm or morning of September 20, 2015% Already in microstrain because of equipment used% Row 1 of gradientStrain.G_.total is the open end and the last row is the closed end time.G1 = numData(5,16:end);time.G1 = time.G1 - time.G1(1) + 35.97;

gradientStrain.G1.total = numData(6:12,16:end);% Zero the gauges - they are zeroed right after the internal temperatures % are stable (i.e. at 35.97 days)% Everything before this time (shrinkage and thermal strains) are being% zeroed out as a resultfor i = 1:7 if (isequal(i,1)||isequal(i,5)||isequal(i,7)||isequal(i,4)) % dead gauge gradientStrain.G1.total(i,:) = NaN; else gradientStrain.G1.total(i,:) = gradientStrain.G1.total(i,:) - gradientStrain.G1.total(i,1); endend time.G2 = numData(15,16:end);time.G2 = time.G2 - time.G2(1) + 35.97;gradientStrain.G2.total = numData(16:22,16:end);% zero the gaugesfor i = 1:7 if (isequal(i,1)|| isequal(i,3)||isequal(i,4)) % dead gauges gradientStrain.G2.total(i,:) = NaN; else gradientStrain.G2.total(i,:) = gradientStrain.G2.total(i,:) - gradientStrain.G2.total(i,1); endend time.G3 = numData(25,16:end);time.G3 = time.G3 - time.G3(1) + 35.97;gradientStrain.G3.total = numData(26:33,16:end);% zero the gaugesfor i = 1:8 if (isequal(i,8)||isequal(i,5)||isequal(i,1)||isequal(i,3)) gradientStrain.G3.total(i,:) = NaN; else gradientStrain.G3.total(i,:) = gradientStrain.G3.total(i,:) - gradientStrain.G3.total(i,1); endend time.G4 = numData(36,16:end);time.G4 = time.G4 - time.G4(1) + 35.97;gradientStrain.G4.total = numData(37:43,16:end);% zero the gaugesfor i = 1:7 gradientStrain.G4.total(i,:) = gradientStrain.G4.total(i,:) - gradientStrain.G4.total(i,1);end time.G5 = numData(46,16:end);time.G5 = time.G5 - time.G5(1) + 35.97;gradientStrain.G5.total = numData(47:51,16:end);% zero the gaugesfor i = 1:5 if (isequal(i,5)||isequal(i,4)) gradientStrain.G5.total(i,:) = NaN; else gradientStrain.G5.total(i,:) = gradientStrain.G5.total(i,:) - gradientStrain.G5.total(i,1);

endend %% Plot Internal and Surface TOTAL Strains of the Gradient Specimens % plot G1figure('Name','Strain G1','NumberTitle','off')plot(time.G1,gradientStrain.G1.total,'o')grid ontitle('Total Internal/Surface Strain of Specimen G1')xlabel('Concrete Age (days)')ylabel('Total Strain (microstrain)')legend('Gauge 16-Dead,Open End,Int','Gauge 30,Surf','Gauge 17-Dead,Int','Gauge 18-Dead,int','Gauge 14-Dead,Int','Gauge 31,Surf','Gauge 15-Dead,Closed End,Int', 'Location', 'northeast') % plot G2figure('Name','Strain G2','NumberTitle','off')plot(time.G2,gradientStrain.G2.total,'o')grid ontitle('Total Internal/Surface Strain of Specimen G2')xlabel('Concrete Age (days)')ylabel('Total Strain (microstrain)')legend('Gauge 1-Dead,Open End,Int','Gauge 26,Surf','Gauge 2-Dead,Int','Gauge 3-Dead,Int','Gauge 4-Dead,Int','Gauge 27,Surf','Gauge 5-Dead,Closed End,Int', 'Location', 'southwest') % plot G3figure('Name','Strain G3','NumberTitle','off')plot(time.G3,gradientStrain.G3.total(1,:),'o',time.G3,gradientStrain.G3.total(2,:),'o',time.G3,gradientStrain.G3.total(3,:),'o',time.G3,gradientStrain.G3.total(4,:),'o',time.G3,gradientStrain.G3.total(5,:),'o',time.G3,gradientStrain.G3.total(6,:),'o',time.G3,gradientStrain.G3.total(7,:),'o',time.G3,gradientStrain.G3.total(8,:),'mo')grid ontitle('Total Internal/Surface Strain of Specimen G3')xlabel('Concrete Age (days)')ylabel('Total Strain (microstrain)')legend('Gauge 21-Dead,Open End,Int','Gauge 32,Surf','Gauge 22-Dead,Int','Gauge 33,Surf','Gauge 23-Dead,Int','Gauge 9-Dead,Int','Gauge 34,Surf','Gauge 10-Dead,Closed End,Int', 'Location', 'northeast') % plot G4 figure('Name','Strain G4','NumberTitle','off')plot(time.G4,gradientStrain.G4.total,'o')grid ontitle('Total Internal/Surface Strain of Specimen G4')xlabel('Concrete Age (days)')ylabel('Total Strain (microstrain)')legend('Gauge 11-Open End,Int','Gauge 28,Surf','Gauge 12,Int','Gauge 13,Int','Gauge 24-Dead,Int','Gauge 29,Surf','Gauge 25-Dead,Closed End,Int', 'Location', 'southwest') % plot G5 figure('Name','Int Strain G5','NumberTitle','off')plot(time.G5,gradientStrain.G5.total,'o')grid ontitle('Total Internal Strain of Specimen G5')xlabel('Concrete Age (days)')

ylabel('Total Strain (microstrain)')legend('Gauge 8-Open End,Int','Gauge 7,Int','Gauge 6,Int','Gauge 19-Dead,Int','Gauge 20-Dead,Closed End,Int', 'Location', 'northeast') %% Predict and Plot Internal Shrinkage and Thermal Strains % PredictedStrain and thermalStrain is from closed end to the open end by % row (i.e. row 1 is closed end, row 6 is open end)% Only consider the RH and Temp from the time the internal temperatures% were stable (i.e. 35.97 days) % Subtract out the thermal strain from the total strain % For the surface gauges still using the thermal strains based on the% internal temperature, not the external temperature % predictedStrain.__ is calculated using the int RH from the lollipops % (where the RH is cut off at 100%) and the V/S of the location of the lollipops % thermalStrain.__ is calculated using the int Temp fromt the lollipops %% SPECIMEN G1 labJackTime = LJ1_dateTime(590:end); predictedStrain52.G1 = zeros(6,length(labJackTime)); thermalStrain.G1 = zeros(6,length(labJackTime)); [ RH_modified ] = CutOffRH( LJ1_LP28.RH(590:end) ); [ predictedStrain52.G1(1,:) ] = FIBMC2010Shrinkage52( RH_modified, LJ1_LP28.Temp(590:end), labJackTime,415); [ thermalStrain.G1(1,:) ] = ThermalStrainsShrinkage( LJ1_LP28.Temp(590:end) ); predictedStrain52.G1(2,:) = NaN; % replaced LJ1_LP2.RH(302:end) thermalStrain.G1(2,:) = NaN; % replaced LJ1_LP2.Temp(302:end) [ RH_modified ] = CutOffRH( LJ1_LP14.RH(590:end) ); [ predictedStrain52.G1(3,:) ] = FIBMC2010Shrinkage52( RH_modified, LJ1_LP14.Temp(590:end), labJackTime,190); [ thermalStrain.G1(3,:) ] = ThermalStrainsShrinkage( LJ1_LP14.Temp(590:end) ); [ RH_modified ] = CutOffRH( LJ1_LP8.RH(590:end) ); [ predictedStrain52.G1(4,:) ] = FIBMC2010Shrinkage52(RH_modified, LJ1_LP8.Temp(590:end), labJackTime,125); [ thermalStrain.G1(4,:) ] = ThermalStrainsShrinkage( LJ1_LP8.Temp(590:end) ); [ RH_modified ] = CutOffRH( LJ1_LP12.RH(590:end) ); [ predictedStrain52.G1(5,:) ] = FIBMC2010Shrinkage52(RH_modified, LJ1_LP12.Temp(590:end), labJackTime,75); [ thermalStrain.G1(5,:) ] = ThermalStrainsShrinkage( LJ1_LP12.Temp(590:end) ); [ RH_modified ] = CutOffRH( LJ1_LP13.RH(590:end) ); [ predictedStrain52.G1(6,:) ] = FIBMC2010Shrinkage52(RH_modified, LJ1_LP13.Temp(590:end), labJackTime,30); [ thermalStrain.G1(6,:) ] = ThermalStrainsShrinkage( LJ1_LP13.Temp(590:end) ); figure('Name','G1 Int Thermal','NumberTitle','off') plot(labJackTime,thermalStrain.G1) grid on title('Internal Thermal Strain-G1') ylabel('Internal Thermal Strain (microstrain)')

xlabel('Concrete Age (days)') % from the open end legend('LP28 @ 415 mm', 'LP2 @ 295 mm-Dead', 'LP14 @ 190 mm', 'LP8 @ 125 mm', 'LP12 @ 75 mm', 'LP13 @ 30 mm','Location','northeast') dim = [0.15 0.70 .15 .15]; str = {'Distance taken from the open end'}; annotation('textbox',dim,'String',str,'FitBoxToText','on'); ylim([-100 100]); gradientStrain.G1.shrinkage = zeros(7,length(time.G1)); for i = 1:length(time.G1) for j = 1:length(labJackTime) if (time.G1(i) >= labJackTime(j)) && (time.G1(i) < labJackTime(j+1)) gradientStrain.G1.shrinkage(1,i) = gradientStrain.G1.total(1,i) - thermalStrain.G1(6,j); gradientStrain.G1.shrinkage(2,i) = gradientStrain.G1.total(2,i) - thermalStrain.G1(5,j); gradientStrain.G1.shrinkage(3,i) = gradientStrain.G1.total(3,i) - thermalStrain.G1(4,j); gradientStrain.G1.shrinkage(4,i) = gradientStrain.G1.total(4,i) - thermalStrain.G1(3,j); gradientStrain.G1.shrinkage(5,i) = gradientStrain.G1.total(5,i) - thermalStrain.G1(1,j); gradientStrain.G1.shrinkage(6,i) = gradientStrain.G1.total(6,i) - thermalStrain.G1(1,j); gradientStrain.G1.shrinkage(7,i) = gradientStrain.G1.total(7,i) - thermalStrain.G1(1,j); break end end end [ Temp,RH ] = weightedMeanLJ1_v2( LJ1_LP1.Temp(590:end),LJ1_LP1.RH(590:end),590 ); % hot bin lollipop [ A1 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,75); A1 = A1 - A1(1); % using lollipop recording hot bin environment, V/S=75mm [ A2 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,375); A2 = A2 - A2(1); % using lollipop recording hot bin environment, V/S=375mm predictedStrain52.G1 = predictedStrain52.G1-predictedStrain52.G1(1); % zero the predicted strains figure() plot(time.G1,gradientStrain.G1.shrinkage(2,:),'o','Color',[ 0.8500,0.3250,0.0980]) hold on plot(time.G1,gradientStrain.G1.shrinkage(6,:),'o','Color',[0.3010,0.7450,0.9330]) plot(labJackTime,predictedStrain52.G1(5,:),'--','Color',[ 0.8500,0.3250,0.0980]) plot(labJackTime,predictedStrain52.G1(2,:),'m--') plot(labJackTime,predictedStrain52.G1(1,:),'g--') plot(labJackTime,A1,'Color',[ 0.8500,0.3250,0.0980]) plot(labJackTime,A2,'Color',[0.3010,0.7450,0.9330]) hold off xlabel('Concrete Age (days)') ylabel('Shrinkage Strain (microstrain)') title('Internal/Surface Shrinkage Strain-G1') % from the open end legend('75 mm-Surf','375 mm-Surf','LP12-V/S=75 mm','295 mm-Dead','LP28-V/S=415 mm','HotBin-V/S=75 mm','HotBin-V/S=375 mm','Location','southeast') str = {'Dots=Experiment','Line=Theory,42.5 R cement'}; annotation('textbox', [0.15,0.15,0.2,0.1],'String', str,'FitBoxToText','on') str = {'Distance taken from open end'}; annotation('textbox', [0.15,0.26,0.2,0.1],'String', str) grid on %% SPECIMEN G2 labJackTime = LJ1_dateTime(590:end);

predictedStrain52.G2 = zeros(6,length(labJackTime)); thermalStrain.G2 = zeros(6,length(labJackTime)); [ RH_modified ] = CutOffRH( LJ1_LP5.RH(590:end) ); [ predictedStrain52.G2(1,:) ] = FIBMC2010Shrinkage52( RH_modified, LJ1_LP5.Temp(590:end), labJackTime,415); [ thermalStrain.G2(1,:) ] = ThermalStrainsShrinkage( LJ1_LP5.Temp(590:end) ); [ RH_modified ] = CutOffRH( LJ1_LP24.RH(590:end) ); [ predictedStrain52.G2(2,:) ] = FIBMC2010Shrinkage52( RH_modified, LJ1_LP24.Temp(590:end), labJackTime,295); [ thermalStrain.G2(2,:) ] = ThermalStrainsShrinkage( LJ1_LP24.Temp(590:end) ); [ RH_modified ] = CutOffRH( LJ1_LP30.RH(590:end) ); [ predictedStrain52.G2(3,:) ] = FIBMC2010Shrinkage52( RH_modified, LJ1_LP30.Temp(590:end), labJackTime,190); [ thermalStrain.G2(3,:) ] = ThermalStrainsShrinkage( LJ1_LP30.Temp(590:end) ); predictedStrain52.G2(4,:) = NaN; % replaced LJ1_LP25.RH(590:end) thermalStrain.G2(4,:) = NaN; % replaced LJ1_LP25.Temp(590:end) [ RH_modified ] = CutOffRH( LJ1_LP15.RH(590:end) ); [ predictedStrain52.G2(5,:) ] = FIBMC2010Shrinkage52(RH_modified, LJ1_LP15.Temp(590:end), labJackTime,75); [ thermalStrain.G2(5,:) ] = ThermalStrainsShrinkage( LJ1_LP15.Temp(590:end) ); [ RH_modified ] = CutOffRH( LJ1_LP27.RH(590:end) ); [ predictedStrain52.G2(6,:) ] = FIBMC2010Shrinkage52(RH_modified, LJ1_LP27.Temp(590:end), labJackTime,30); [ thermalStrain.G2(6,:) ] = ThermalStrainsShrinkage( LJ1_LP27.Temp(590:end) ); figure('Name','G2 Int Thermal','NumberTitle','off') plot(labJackTime,thermalStrain.G2) grid on title('Internal Thermal Strain-G2') ylabel('Internal Thermal Strain (microstrain)') xlabel('Concrete Age (days)') % from the open end legend('LP5 @ 415 mm','LP24 @ 295 mm','LP30 @ 190 mm','LP25 @ 125 mm-Dead','LP15 @ 75 mm','LP27 @ 30 mm','Location','southeast') dim = [0.15 0.15 .15 .15]; str = {'Distance taken from the open end'}; annotation('textbox',dim,'String',str,'FitBoxToText','on'); gradientStrain.G2.shrinkage = zeros(7,length(time.G2)); for i = 1:length(time.G2) for j = 1:length(labJackTime) if (time.G2(i) >= labJackTime(j)) && (time.G2(i) < labJackTime(j+1)) gradientStrain.G2.shrinkage(1,i) = gradientStrain.G2.total(1,i) - thermalStrain.G2(6,j); gradientStrain.G2.shrinkage(2,i) = gradientStrain.G2.total(2,i) - thermalStrain.G2(5,j); gradientStrain.G2.shrinkage(3,i) = gradientStrain.G2.total(3,i) - thermalStrain.G2(4,j); gradientStrain.G2.shrinkage(4,i) = gradientStrain.G2.total(4,i) - thermalStrain.G2(3,j); gradientStrain.G2.shrinkage(5,i) = gradientStrain.G2.total(5,i) - thermalStrain.G2(1,j); gradientStrain.G2.shrinkage(6,i) = gradientStrain.G2.total(6,i) - thermalStrain.G2(1,j); gradientStrain.G2.shrinkage(7,i) = gradientStrain.G2.total(7,i) - thermalStrain.G2(1,j); break end end end

[ Temp,RH ] = weightedMeanLJ1_v2( LJ1_LP1.Temp(590:end),LJ1_LP1.RH(590:end),590 ); % hot bin lollipop [ A1 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,75); A1 = A1 - A1(1); % using lollipop recording hot bin environment, V/S=75mm [ A2 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,375); A2 = A2 - A2(1); % using lollipop recording hot bin environment, V/S=375mm predictedStrain52.G2 = predictedStrain52.G2-predictedStrain52.G2(1); % zero the predicted strains figure() plot(time.G2,gradientStrain.G2.shrinkage(2,:),'o','Color',[0.8500,0.3250,0.0980]) hold on %plot(time.G2,gradientStrain.G2.shrinkage(5,:),'o','Color',[0.4660,0.6740,0.1880]) plot(time.G2,gradientStrain.G2.shrinkage(6,:),'o','Color',[0.3010,0.7450,0.9330]) plot(labJackTime,predictedStrain52.G2(5,:),'--','Color',[0.8500,0.3250,0.0980]) plot(labJackTime,predictedStrain52.G2(2,:),'m--') plot(labJackTime,predictedStrain52.G2(1,:),'g--') plot(labJackTime,A1,'Color',[0.8500,0.3250,0.0980]) plot(labJackTime,A2,'Color',[0.3010,0.7450,0.9330]) hold off xlabel('Concrete Age (days)') ylabel('Shrinkage Strain (microstrain)') title('Internal/Surface Shrinkage Strain-G2') % from the open end legend('75 mm-Surf','375 mm-Surf','LP15-V/S=75 mm','LP24-V/S=295 mm','LP5-V/S=415 mm','HotBin-V/S=75mm','HotBin-V/S=375mm','Location','southeast') str = {'Dots=Experiment','Line=Theory,42.5 R cement'}; annotation('textbox', [0.15,0.15,0.2,0.1],'String', str,'FitBoxToText','on') str = {'Distance taken from open end'}; annotation('textbox', [0.15,0.26,0.2,0.1],'String', str) ylim([-500 100]) grid on %% SPECIMEN G3 labJackTime = LJ3_dateTime(1466:end); predictedStrain52.G3 = zeros(6,length(labJackTime)); thermalStrain.G3 = zeros(6,length(labJackTime)); [ RH_modified ] = CutOffRH( LJ3_LP18.RH(1466:end) ); [ predictedStrain52.G3(1,:) ] = FIBMC2010Shrinkage52( RH_modified, LJ3_LP18.Temp(1466:end), labJackTime,415); [ thermalStrain.G3(1,:) ] = ThermalStrainsShrinkage( LJ3_LP18.Temp(1466:end) ); [ RH_modified ] = CutOffRH( LJ3_LP22.RH(1466:end) ); [ predictedStrain52.G3(2,:) ] = FIBMC2010Shrinkage52( RH_modified, LJ3_LP22.Temp(1466:end), labJackTime,295); [ thermalStrain.G3(2,:) ] = ThermalStrainsShrinkage( LJ3_LP22.Temp(1466:end) ); % modify LJ3_LP22.RH(1466:end) LJ3_LP22.Temp(1466:end) to get rid of % dip (dip happens at row 1909 to 4452 in LJ3_LP22.Temp and LJ3_LP22.RH) % although probably can't trust what happens after dip --> RH looks % suspect but Temp looks ok predictedStrain52.G3(2,1909-1466:4452-1466) = NaN; thermalStrain.G3(2,1909-1466:4452-1466) = NaN; [ RH_modified ] = CutOffRH( LJ3_LP10.RH(1466:end) );

[ predictedStrain52.G3(3,:) ] = FIBMC2010Shrinkage52( RH_modified, LJ3_LP10.Temp(1466:end), labJackTime,190); [ thermalStrain.G3(3,:) ] = ThermalStrainsShrinkage( LJ3_LP10.Temp(1466:end) ); [ RH_modified ] = CutOffRH( LJ3_LP3.RH(1466:end) ); [ predictedStrain52.G3(4,:) ] = FIBMC2010Shrinkage52(RH_modified, LJ3_LP3.Temp(1466:end), labJackTime,125); [ thermalStrain.G3(4,:) ] = ThermalStrainsShrinkage( LJ3_LP3.Temp(1466:end) ); [ RH_modified ] = CutOffRH( LJ3_LP11.RH(1466:end) ); [ predictedStrain52.G3(5,:) ] = FIBMC2010Shrinkage52(RH_modified, LJ3_LP11.Temp(1466:end), labJackTime,75); predictedStrain52.G3(5,7898:end) = NaN; % replaced some of the LJ3_LP11.RH(1466:end) [ thermalStrain.G3(5,:) ] = ThermalStrainsShrinkage( LJ3_LP11.Temp(1466:end) ); thermalStrain.G3(5,7898:end) = thermalStrain.G3(5,7897); % made it equal to whatever it was before, assuming isn't really changing because the temperature is fairly stable [ RH_modified ] = CutOffRH( LJ3_LP17.RH(1466:end) ); [ predictedStrain52.G3(6,:) ] = FIBMC2010Shrinkage52(RH_modified, LJ3_LP17.Temp(1466:end), labJackTime,30); [ thermalStrain.G3(6,:) ] = ThermalStrainsShrinkage( LJ3_LP17.Temp(1466:end) ); figure('Name','G3 Int Thermal','NumberTitle','off') plot(labJackTime,thermalStrain.G3) grid on title('Internal Thermal Strain-G3') ylabel('Internal Thermal Strain (microstrain)') xlabel('Concrete Age (days)') % from the open end legend('LP18 @ 415 mm','LP22 @ 295 mm','LP10 @ 190 mm','LP3 @ 125 mm','LP11 @ 75 mm-Dead','LP17 @ 30 mm','Location','southwest') dim = [0.15 0.15 .15 .15]; str = {'Distance taken from the open end'}; annotation('textbox',dim,'String',str,'FitBoxToText','on'); gradientStrain.G3.shrinkage = zeros(8,length(time.G3)); for i = 1:length(time.G3) for j = 1:length(labJackTime) if (time.G3(i) >= labJackTime(j)) && (time.G3(i) < labJackTime(j+1)) gradientStrain.G3.shrinkage(1,i) = gradientStrain.G3.total(1,i) - thermalStrain.G3(6,j); gradientStrain.G3.shrinkage(2,i) = gradientStrain.G3.total(2,i) - thermalStrain.G3(5,j); gradientStrain.G3.shrinkage(3,i) = gradientStrain.G3.total(3,i) - thermalStrain.G3(4,j); gradientStrain.G3.shrinkage(4,i) = gradientStrain.G3.total(4,i) - thermalStrain.G3(3,j); gradientStrain.G3.shrinkage(5,i) = gradientStrain.G3.total(5,i) - thermalStrain.G3(3,j); gradientStrain.G3.shrinkage(6,i) = gradientStrain.G3.total(6,i) - thermalStrain.G3(1,j); gradientStrain.G3.shrinkage(7,i) = gradientStrain.G3.total(7,i) - thermalStrain.G3(1,j); gradientStrain.G3.shrinkage(8,i) = gradientStrain.G3.total(8,i) - thermalStrain.G3(1,j); break end end end [ Temp,RH ] = weightedMeanLJ3_v2( LJ3_LP4.Temp(1466:end),LJ3_LP4.RH(1466:end),1466 ); % cold bin lollipop [ A1 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,75); A1 = A1 - A1(1); % using lollipop recording cold bin environment, V/S=75mm [ A2 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,225); A2 = A2 - A2(1); % using lollipop recording cold bin environment, V/S=225mm

[ A3 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,375); A3 = A3 - A3(1); % using lollipop recording cold bin environment, V/S=375mm predictedStrain52.G3 = predictedStrain52.G3-predictedStrain52.G3(1); % zero the predicted strains figure() plot(time.G3,gradientStrain.G3.shrinkage(2,:),'o','Color',[0.8500,0.3250,0.0980]) hold on plot(time.G3,gradientStrain.G3.shrinkage(4,:),'o','Color',[0.4940,0.1840,0.5560]) plot(time.G3,gradientStrain.G3.shrinkage(7,:),'o','Color',[0.6350,0.0780,0.1840]) plot(labJackTime,predictedStrain52.G3(5,:),'--','Color',[0.8500,0.3250,0.0980]) plot(labJackTime,predictedStrain52.G3(3,:),'r--') plot(labJackTime,predictedStrain52.G3(2,:),'m--') plot(labJackTime,predictedStrain52.G3(1,:),'g--') plot(labJackTime,A1,'Color',[0.8500,0.3250,0.0980]) plot(labJackTime,A2,'Color',[0.4940,0.1840,0.5560]) plot(labJackTime,A3,'Color',[0.6350,0.0780,0.1840]) hold off xlabel('Concrete Age (days)') ylabel('Shrinkage Strain (microstrain)') title('Internal/Surface Shrinkage Strain-G3') % from the open end legend('75 mm-Surf','225 mm-Surf','375 mm-Surf','LP11-V/S=75 mm','LP10-V/S=190 mm','LP22-V/S=295 mm','LP18-V/S=415 mm','ColdBin-V/S=75mm','ColdBin-V/S=225mm','ColdBin-V/S=375mm','Location','southwest') str = {'Dots=Experiment','Line=Theory,42.5 R cement'}; annotation('textbox', [0.45,0.15,0.2,0.1],'String', str,'FitBoxToText','on') str = {'Distance taken from open end'}; annotation('textbox', [0.45,0.26,0.2,0.1],'String', str) ylim([-600 100]) grid on %% SPECIMEN G4 labJackTime = LJ3_dateTime(1466:end); predictedStrain52.G4 = zeros(6,length(labJackTime)); thermalStrain.G4 = zeros(6,length(labJackTime)); [ RH_modified ] = CutOffRH( LJ3_LP21.RH(1466:end) ); [ predictedStrain52.G4(1,:) ] = FIBMC2010Shrinkage52( RH_modified, LJ3_LP21.Temp(1466:end), labJackTime,415); [ thermalStrain.G4(1,:) ] = ThermalStrainsShrinkage( LJ3_LP21.Temp(1466:end) ); [ RH_modified ] = CutOffRH( LJ3_LP9.RH(1466:end) ); [ predictedStrain52.G4(2,:) ] = FIBMC2010Shrinkage52( RH_modified, LJ3_LP9.Temp(1466:end), labJackTime,295); [ thermalStrain.G4(2,:) ] = ThermalStrainsShrinkage( LJ3_LP9.Temp(1466:end) ); [ RH_modified ] = CutOffRH( LJ3_LP19.RH(1466:end) ); [ predictedStrain52.G4(4,:) ] = FIBMC2010Shrinkage52(RH_modified, LJ3_LP19.Temp(1466:end), labJackTime,125); [ thermalStrain.G4(4,:) ] = ThermalStrainsShrinkage( LJ3_LP19.Temp(1466:end) ); % replaced some of LJ3_LP19.Temp(1466:end) and LJ3_LP9.Temp(1466:end) for i = 1:length(LJ3_dateTime(1466:end)) if (LJ3_LP19.Temp(i+1465)>70) predictedStrain52.G4(4,i) = NaN; thermalStrain.G4(4,i) = NaN; end if (LJ3_LP9.Temp(i+1465)>70)

predictedStrain52.G4(2,i) = NaN; thermalStrain.G4(2,i) = NaN; end end [ RH_modified ] = CutOffRH( LJ3_LP7.RH(1466:end) ); [ predictedStrain52.G4(6,:) ] = FIBMC2010Shrinkage52(RH_modified, LJ3_LP7.Temp(1466:end), labJackTime,30); [ thermalStrain.G4(6,:) ] = ThermalStrainsShrinkage( LJ3_LP7.Temp(1466:end) ); predictedStrain52.G4(3,:) = NaN; % --> LJ3_LP6.RH(1466:end) replaced thermalStrain.G4(3,:) = NaN; % --> LJ3_LP6.Temp(1466:end) replaced predictedStrain52.G4(5,:) = NaN; % --> LJ3_LP29.RH(1466:end) replace thermalStrain.G4(5,:) = NaN; % --> LJ3_LP29.Temp(1466:end) replace figure('Name','G4 Int Thermal','NumberTitle','off') plot(labJackTime,thermalStrain.G4) grid on title('Internal Thermal Strain-G4') ylabel('Internal Thermal Strain (microstrain)') xlabel('Concrete Age (days)') % from the open end legend('LP21 @ 415 mm','LP9 @ 295 mm','LP6 @ 190 mm-Dead','LP19 @ 125 mm','LP29 @ 75 mm-Dead','LP7 @ 30 mm') dim = [0.20 0.70 0.15 0.15]; str = {'Distance taken from the open end'}; annotation('textbox',dim,'String',str,'FitBoxToText','on'); gradientStrain.G4.shrinkage = zeros(7,length(time.G4)); for i = 1:length(time.G4) for j = 1:length(labJackTime) if (time.G4(i) >= labJackTime(j)) && (time.G4(i) < labJackTime(j+1)) gradientStrain.G4.shrinkage(1,i) = gradientStrain.G4.total(1,i) - thermalStrain.G4(6,j); gradientStrain.G4.shrinkage(2,i) = gradientStrain.G4.total(2,i) - thermalStrain.G4(6,j); % used row 6 instead of 5 because 5 is all NaN gradientStrain.G4.shrinkage(3,i) = gradientStrain.G4.total(3,i) - thermalStrain.G4(4,j); gradientStrain.G4.shrinkage(4,i) = gradientStrain.G4.total(4,i) - thermalStrain.G4(4,j); % used row 4 instead of 3 because 3 is all NaN gradientStrain.G4.shrinkage(5,i) = gradientStrain.G4.total(5,i) - thermalStrain.G4(1,j); gradientStrain.G4.shrinkage(6,i) = gradientStrain.G4.total(6,i) - thermalStrain.G4(1,j); gradientStrain.G4.shrinkage(7,i) = gradientStrain.G4.total(7,i) - thermalStrain.G4(1,j); break end end end [ Temp,RH ] = weightedMeanLJ3_v2( LJ3_LP4.Temp(1466:end),LJ3_LP4.RH(1466:end),1466 ); % cold bin lollipop [ A1 ] = FIBMC2010Shrinkage52(RH,Temp,labJackTime,55); A1 = A1 - A1(1); % using lollipop recording cold bin environment, V/S=55mm [ A2 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,75); A2 = A2 - A2(1); % using lollipop recording cold bin environment, V/S=75mm [ A3 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,143); A3 = A3 - A3(1); % using lollipop recording cold bin environment, V/S=143mm [ A4 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,228); A4 = A4 - A4(1); % using lollipop recording cold bin environment, V/S=228mm

[ A5 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,375); A5 = A5 - A5(1); % using lollipop recording cold bin environment, V/S=375mm predictedStrain52.G4 = predictedStrain52.G4-predictedStrain52.G4(1); % zero the predicted strains figure() plot(time.G4,gradientStrain.G4.shrinkage(1,:),'o','Color',[0,0.4470,0.7410]) hold on plot(time.G4,gradientStrain.G4.shrinkage(2,:),'o','Color',[0.8500,0.3250,0.0980]) plot(time.G4,gradientStrain.G4.shrinkage(3,:),'o','Color',[0.9290,0.6940,0.1250]) plot(time.G4,gradientStrain.G4.shrinkage(4,:),'o','Color',[0.4940,0.1840,0.5560]) plot(time.G4,gradientStrain.G4.shrinkage(6,:),'o','Color',[0.3010,0.7450,0.9330]) plot(labJackTime,predictedStrain52.G4(6,:),'--','Color',[0,0.4470,0.7410]) plot(labJackTime,predictedStrain52.G4(5,:),'--','Color',[0.8500,0.3250,0.0980]) plot(labJackTime,predictedStrain52.G4(4,:),'m--') plot(labJackTime,predictedStrain52.G4(3,:),'y--') plot(labJackTime,predictedStrain52.G4(2,:),'g--') plot(labJackTime,predictedStrain52.G4(1,:),'r--') plot(labJackTime,A1,'Color',[0,0.4470,0.7410]) plot(labJackTime,A2,'Color',[0.8500,0.3250,0.0980]) plot(labJackTime,A3,'Color',[0.9290,0.6940,0.1250]) plot(labJackTime,A4,'Color',[0.4940,0.1840,0.5560]) plot(labJackTime,A5,'Color',[0.3010,0.7450,0.9330]) hold off xlabel('Concrete Age (days)') ylabel('Shrinkage Strain (microstrain)') title('Internal/Surface Shrinkage Strain-G4') % from the open end legend('55 mm-Int','75 mm-Surf','143 mm-Int','228 mm-Int','375 mm-Surf','LP7-V/S=30 mm','75 mm-Dead','LP19-V/S=125 mm','0.190 m-Dead','LP9-V/S=295 mm','LP21-V/S=415 mm','ColdBin-V/S=55mm','ColdBin-V/S=75mm','ColdBin-V/S=143mm','ColdBin-V/S=228mm','ColdBin-V/S=375mm','Location','southeast') str = {'Dots=Experiment','Line=Theory,42.5 R cement'}; annotation('textbox', [0.15,0.15,0.2,0.1],'String', str,'FitBoxToText','on') str = {'Distance taken from open end'}; annotation('textbox', [0.15,0.26,0.2,0.1],'String', str) grid on %% SPECIMEN G5 labJackTime = LJ3_dateTime(1466:end); [ thermalStrain.G5 ] = ThermalStrainsShrinkage( LJ3_LP20.Temp(1466:end) ); % based on ambient environment because G5 has no lollipops gradientStrain.G5.shrinkage = zeros(5,length(time.G5)); for i = 1:length(time.G5) for j = 1:length(labJackTime) if (time.G5(i) >= labJackTime(j)) && (time.G5(i) < labJackTime(j+1)) gradientStrain.G5.shrinkage(1,i) = gradientStrain.G5.total(1,i) - thermalStrain.G5(j); gradientStrain.G5.shrinkage(2,i) = gradientStrain.G5.total(2,i) - thermalStrain.G5(j); gradientStrain.G5.shrinkage(3,i) = gradientStrain.G5.total(3,i) - thermalStrain.G5(j); gradientStrain.G5.shrinkage(4,i) = gradientStrain.G5.total(4,i) - thermalStrain.G5(j); gradientStrain.G5.shrinkage(5,i) = gradientStrain.G5.total(5,i) - thermalStrain.G5(j); break end end end

[ Temp,RH ] = weightedMeanLJ3_v2( LJ3_LP20.Temp(1466:end),LJ3_LP20.RH(1466:end),1466 ); % ambient lollipop [ A1 ] = FIBMC2010Shrinkage52(RH,Temp,labJackTime,55); A1 = A1 - A1(1); % using lollipop recording ambient environment, V/S=55mm [ A2 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,143); A2 = A2 - A2(1); % using lollipop recording ambient environment, V/S=143mm [ A3 ] = FIBMC2010Shrinkage52(RH,Temp, labJackTime,228); A3 = A3 - A3(1); % using lollipop recording ambient environment, V/S=228mm figure() plot(time.G5,gradientStrain.G5.shrinkage(1,:),'o','Color',[0,0.4470,0.7410]) hold on plot(time.G5,gradientStrain.G5.shrinkage(2,:),'o','Color',[0.8500,0.3250,0.0980]) plot(time.G5,gradientStrain.G5.shrinkage(3,:),'o','Color',[0.9290,0.6940,0.1250]) plot(labJackTime,A1,'Color',[0,0.4470,0.7410]) plot(labJackTime,A2,'Color',[0.8500,0.3250,0.0980]) plot(labJackTime,A3,'Color',[0.9290,0.6940,0.1250]) hold off xlabel('Concrete Age (days)') ylabel('Shrinkage Strain (microstrain)') title('Internal Shrinkage Strain-G5') % from the open end legend('55 mm-Int','143 mm-Int','228 mm-Int','Ambient-V/S=55mm','Ambient-V/S=143mm','Ambient-V/S=228mm','Location','southeast') str = {'Dots=Experiment','Line=Theory,42.5 R cement'}; annotation('textbox', [0.15,0.15,0.2,0.1],'String', str,'FitBoxToText','on') str = {'Distance taken from open end'}; annotation('textbox', [0.15,0.26,0.2,0.1],'String', str) grid on

F. PfenderResults.m

%% Read in the data% read in the excel file fileName = 'results.xlsx';sheetName = 'Sheet1'; % Concrete cast on August 14 2015% Reference target measurement was taken on September 23 2015% Age of concrete on reference day is 40 days% Specimen is already epoxied % pull the applied load data and load time data from the sheet[numData, ~, ~] = xlsread(fileName,sheetName);t = numData(25:end,28);time.target(1) = 0;l=1;for i = 1:length(t) if isnan(t(i)) continue else time.target(l) = t(i); l=l+1; end

endtime.target = time.target - time.target(1) + 40; % concrete age in days % column 1 is closest to the sealed end% column 5 is closest to the open endtargets.long.total = zeros(length(time.target),5);targets.long.total(:,1) = NaN;targets.long.total(:,4) = NaN;clear tt = numData(28:end,30);targets.long.total(1,2) = t(1);for i = 2:length(time.target) targets.long.total(i,2) = t((i-1)*6+1);endt = numData(28:end,32);targets.long.total(1,3) = t(1);for i = 2:length(time.target) targets.long.total(i,3) = t((i-1)*6+1);endt = numData(28:end,36);targets.long.total(1,5) = t(1);for i = 2:length(time.target) targets.long.total(i,5) = t((i-1)*6+1);end % column 1 is closest to the sealed end% column 5 is closest to the open endtargets.trans.total = zeros(length(time.target),5);targets.trans.total(:,1) = NaN;targets.trans.total(:,4) = NaN;t = numData(27:end,30);targets.trans.total(1,2) = t(1);for i = 2:length(time.target) targets.trans.total(i,2) = t((i-1)*6+1);endt = numData(27:end,32);targets.trans.total(1,3) = t(1);for i = 2:length(time.target) targets.trans.total(i,3) = t((i-1)*6+1);endt = numData(27:end,36);targets.trans.total(1,5) = t(1);for i = 2:length(time.target) targets.trans.total(i,5) = t((i-1)*6+1);end clear t %% Plot the Total Strains figure()plot(time.target,targets.long.total(:,5)*1000000,'o',time.target,targets.long.total(:,3)*1000000,'o',time.target,targets.long.total(:,2)*1000000,'o')title('Longitudinal Total Surface Strains-G5')

xlabel('Concrete Age (days)')ylabel('Total Surface Strains (microstrains)')legend('25-125 mm','225-325 mm','325-425 mm') % distance from open endgrid ondim = [0.45 0.60 .15 .15];str = {'Distance taken from the open end'};annotation('textbox',dim,'String',str,'FitBoxToText','on'); figure()plot(time.target, targets.trans.total(:,5)*1000000,'o',time.target, targets.trans.total(:,3)*1000000,'o',time.target, targets.trans.total(:,2)*1000000,'o')title('Transverse Total Surface Strains-G5')xlabel('Concrete Age (days)')ylabel('Total Surface Strains (microstrains)')legend('52 mm','275 mm','385 mm') % distance from open end grid ondim = [0.45 0.10 .15 .15];str = {'Distance taken from the open end'};annotation('textbox',dim,'String',str,'FitBoxToText','on'); %% Calculate the Thermal Strains and the Shrinkage Strains% Only take from a concrete age of 40 days because everything else before% this has been zeroed out[ thermalStrain.G5 ] = ThermalStrainsShrinkage( LJ3_LP20.Temp(2623:end) );labJackTime = LJ3_dateTime(2623:end); targets.long.shrinkage = zeros(length(time.target),5);targets.trans.shrinkage = zeros(length(time.target),5); for k = 1:5 % loop through the columnsfor i = 1:length(time.target) % loop through the rows for j = 1:length(labJackTime) if (time.target(i) >= labJackTime(j)) && (time.target(i) < labJackTime(j+1)) targets.trans.shrinkage(i,k) = targets.trans.total(i,k) - thermalStrain.G5(j)/1000000; targets.long.shrinkage(i,k) = targets.long.total(i,k) - thermalStrain.G5(j)/1000000; break end endendend %% Plot the Thermal Strains figure()plot(labJackTime,thermalStrain.G5)title('"Internal" Thermal Strains-G5')xlabel('Concrete Age (days)')ylabel('"Internal" Thermal Strains (microstrains)')grid on %% Find the V/S corresponding to average strain for each longitudinal segment % The time that we are examining the results at does not have a great% effect on VS --> from tests, if labJackTime ranges from 35 to 65, VS

% increases by 2 mm% Therefore, pick a random time --> pick around 80 days --> approx where% the av_RH_ambient occurs av_temp_ambient = round(mean(LJ3_LP20.Temp),2);av_RH_ambient = round(mean(LJ3_LP20.RH),2); % segment 1: 25-125 mm[ VS1 ] = interpVS( av_RH_ambient,av_temp_ambient,LJ3_dateTime(6562), 125, 25 ); % segment 2: 225-325 mm[ VS2 ] = interpVS( av_RH_ambient,av_temp_ambient,LJ3_dateTime(6562), 325, 225 ); % segment 3: 325-425 mm[ VS3 ] = interpVS( av_RH_ambient,av_temp_ambient,LJ3_dateTime(6562), 425, 325 ); %% Calculate the shrinkage strains using FIB MC2010% Used ambient RH and Temp to calculate the predicted shrinkage strain % Use the weighted accumulated average to make the calculations [ Temp,RH ] = weightedMeanLJ3_v2( LJ3_LP20.Temp(2623:end),LJ3_LP20.RH(2623:end),2623 ); [ predictedStrain52.G5.vs52 ] = FIBMC2010Shrinkage52( RH, Temp, labJackTime, 52 ); [ predictedStrain52.G5.vs275 ] = FIBMC2010Shrinkage52( RH, Temp, labJackTime, 275 ); [ predictedStrain52.G5.vs385 ] = FIBMC2010Shrinkage52( RH, Temp, labJackTime, 385 ); [ predictedStrain52.G5.VS1 ] = FIBMC2010Shrinkage52( RH, Temp, labJackTime, VS1 ); [ predictedStrain52.G5.VS2 ] = FIBMC2010Shrinkage52( RH, Temp, labJackTime, VS2 ); [ predictedStrain52.G5.VS3 ] = FIBMC2010Shrinkage52( RH, Temp, labJackTime, VS3 ); % zero the predicted strainspredictedStrain52.G5.vs52 = predictedStrain52.G5.vs52 - predictedStrain52.G5.vs52(1);predictedStrain52.G5.vs275 = predictedStrain52.G5.vs275 - predictedStrain52.G5.vs275(1);predictedStrain52.G5.vs385 = predictedStrain52.G5.vs385 - predictedStrain52.G5.vs385(1);predictedStrain52.G5.VS1 = predictedStrain52.G5.VS1 - predictedStrain52.G5.VS1(1);predictedStrain52.G5.VS2 = predictedStrain52.G5.VS2 - predictedStrain52.G5.VS2(1);predictedStrain52.G5.VS3 = predictedStrain52.G5.VS3 - predictedStrain52.G5.VS3(1); %% Plot the Shrinkage Strains (experimental and predicted) figure()plot(time.target, targets.long.shrinkage(:,5)*1000000,'o')hold on plot(time.target, targets.long.shrinkage(:,3)*1000000,'o')plot(time.target, targets.long.shrinkage(:,2)*1000000,'o')plot(labJackTime, predictedStrain52.G5.VS1,'Color',[0,0.4470,0.7410])plot(labJackTime,predictedStrain52.G5.VS2,'Color',[0.8500,0.3250,0.0980])plot(labJackTime,predictedStrain52.G5.VS3,'Color',[0.9290,0.6940,0.1250])

hold offtitle('Longitudinal Shrinkage Strains-G5')xlabel('Concrete Age (days)')ylabel('Shrinkage Strains (microstrains)')legend('25-125 mm','225-325 mm','325-425 mm','Ambient-VS1','Ambient-VS2','Ambient-VS3') % distance from open endstr = {'VS1(mm)=',VS1, 'VS2(mm)=',VS2, 'VS3(mm)',VS3};annotation('textbox', [0.15,0.15,0.15,0.25],'String', str)dim = [0.15 0.75 .15 .15];str = {'Distance taken from the open end'};annotation('textbox',dim,'String',str,'FitBoxToText','on');str = {'Dots=Experiment','Line=Theory,42.5 R cement'};annotation('textbox', [0.15,0.15,0.2,0.1],'String', str,'FitBoxToText','on')grid on figure()plot(time.target, targets.trans.shrinkage(:,5)*1000000,'o')hold onplot(time.target, targets.trans.shrinkage(:,3)*1000000,'o')plot(time.target, targets.trans.shrinkage(:,2)*1000000,'o')plot(labJackTime, predictedStrain52.G5.vs52,'Color',[0,0.4470,0.7410])plot(labJackTime,predictedStrain52.G5.vs275,'Color',[0.8500,0.3250,0.0980])plot(labJackTime,predictedStrain52.G5.vs385,'Color',[0.9290,0.6940,0.1250])hold offtitle('Transverse Shrinkage Strains-G5')xlabel('Concrete Age (days)')ylabel('Shrinkage Strains (microstrains)')legend('52 mm','275 mm','385 mm','Ambient-V/S=52 mm','Ambient-V/S=275 mm','Ambient-V/S=385 mm','Location','southeast') % distance from open end grid ondim = [0.15 0.08 .15 .15];str = {'Distance taken from the open end'};annotation('textbox',dim,'String',str,'FitBoxToText','on');str = {'Dots=Experiment','Line=Theory,42.5 R cement'};annotation('textbox', [0.15,0.15,0.2,0.1],'String', str,'FitBoxToText','on')

F. HeatTransferCold.m%% Temperature data % temp for specimens exposed to cold binx = cat(1,LJ3_LP20.Temp(1:1178),LJ3_LP4.Temp(1179:end));y = LJ3_dateTime; % linearly interpolate the temperature values between the data so that% changes in temperature are not so abrupt% interpolate the value every minute or 60/(24*60*60) days TempCOLD(1) = x(1); % initialize the vectorlabJackTimeCOLD(1) = y(1); % initialize the vectorl = 2; % initialize the output index for i = 2:length(x) if isequal(x(i),x(i-1))

TempCOLD(l) = x(i); labJackTimeCOLD(l) = y(i); else count = floor((y(i)-y(i-1))/(60/(24*60*60))); for j = 1:count if ((y(i-1)+(60/(24*60*60)*count))<y(i)) TempCOLD(l) = ((x(i)-x(i-1))/(y(i)-y(i-1)))*(60/(24*60*60))*count+x(i-1); labJackTimeCOLD(l) = y(i-1)+(60/(24*60*60))*count; l = l+1; end end TempCOLD(l) = x(i); labJackTimeCOLD(l)=y(i); end l = l+1;end %% Define the mesh and time step % use a mesh centred grid% let x=550 mm be the inside of the reactor maxDepth = 0.550; % max depth from surface, 550 mm, given in m i.e. length of specimentheta = 0.5;time = 20*24*60*60; % in secnumTimeStep = 20*24*60*60/10;deltaTime = time/numTimeStep; % in sec% define the number of grid blocks and the number of nodesnumBlocks = 100;numNodes = numBlocks+1;deltaX = maxDepth/numBlocks; % in mdepth = zeros(numNodes,1); % in mdepth(1,1) = 0; % in mfor i=2:numNodes depth(i,1) = depth(i-1,1)+deltaX;end %% Initialize the phi vectorphi = zeros(numNodes,1);% fill in the phi vector at the initial conditions% K = C + 273.15for i = 1:numNodes if isequal(i, numNodes) % if the last node phi(i,1) = TempCOLD(1)+273.15; elseif isequal(i,1) % if the first node phi(i,1) = TempCOLD(1)+273.15; else phi(i,1) = 25+273.15; % the initial temperature endendphi0 = phi-273.15; figure()plot(depth, phi0)

title('Initial Internal Temperature Profile')xlabel('Distance from Outside Surface (m)')ylabel('Internal Temperature (\circ C)')legend('September 14, 2015', 'Location', 'southeast')axis([0 0.6 18 26]) %% initialize the coefficient matrix filled with a1, a2, a3A = zeros(numNodes,numNodes);% create and fill the RHS B vector filled with phi, b1, b2, b3% this changes over timeB = zeros(numNodes,1); % from 1 to nB_prime = zeros(numNodes, 1); % from 1 to n% initialize the L and U vectorL = zeros(numNodes-1, 1); % from 2 to nU = zeros(numNodes, 1); % from 1 to n %% THERMAL PROPERTIESk = 1.279; % thermal conductivity coefficient, in W/mKrho = 2400; % concrete density, in kg/m^3c = 880; % specific heat, in J/kgK %% SOLVE% every few minutes there is a change in the environment temperature% this needs to be includedfigure()plot(depth, phi0)title('Fluctuations in Internal Temperature Profile-Cold Bin')xlabel('Distance from Outside Surface (m)')ylabel('Internal Temperature (degrees C)')str = {'Time(days)=',time/(60*60*24), '\Deltat(s)=',deltaTime, 'Num.Elem.=',numBlocks};annotation('textbox', [0.7,0.36,0.15,0.28],'String', str)value = 0;for t = 1:numTimeStep % FILL IN THE A MATRIX for i=1:numNodes % for each row % do not need to but a1, a2, a3, b1, b2, b3 in this for loop % becuase they are constant with space and time because k, c are % constant E = k/(rho*c); a1 = -theta*E/(deltaX^2); a2 = 1/deltaTime + 2*theta*E/(deltaX^2); a3 = -theta*E/(deltaX^2); b1 = (1-theta)*E/(deltaX^2); b2 = 1/deltaTime - 2*(1-theta)*E/(deltaX^2); b3 = (1-theta)*E/(deltaX^2); if isequal(i,numNodes) % if the last row A(i,numNodes) = 1; elseif isequal(i,numNodes-1) % if the second last row of the matrix A(i,numNodes-1) = a2; % second last column of second last row A(i,numNodes-2) = a1; % third last column of second last row elseif isequal(i,1) % if the first row of the matrix A(i,1) = 1; elseif isequal(i,2) % if the second row A(i,2) = a2; % row two column two A(i,3) = a3; % row two column three

else A(i,i-1) = a1; A(i,i) = a2; A(i,i+1) = a3; end end % use the Thomas Solver to solve because A has a bandwidth of 3 % this also changes over time U(1,1) = A(1,1); for i = 2:numNodes % from 2 to n L(i,1) = A(i,i-1)/U(i-1,1); U(i,1) = A(i,i)-L(i,1)*A(i-1,i); end % FILL IN THE B VECTOR for i = 1:numNodes if isequal(i,1) % if the first row B(i,1) = phi(i,1); B_prime(i,1) = B(i,1); elseif isequal(i,2) % if the second row B(i,1) = (b1-a1)*phi(i-1,1)+b2*phi(i,1)+b3*phi(i+1,1); B_prime(i,1) = B(i,1) - L(i,1)*B_prime(i-1,1); elseif isequal(i,numNodes-1) % if the second last row B(i,1) = b1*phi(i-1,1) + b2*phi(i,1)+(b3-a3)*phi(i+1,1); B_prime(i,1) = B(i,1) - L(i,1)*B_prime(i-1,1); elseif isequal(i,numNodes) % if the last row B(i,1) = phi(i,1); B_prime(i,1) = B(i,1) - L(i,1)*B_prime(i-1,1); else B(i,1) = b1*phi(i-1,1)+b2*phi(i,1)+b3*phi(i+1,1); B_prime(i,1) = B(i,1) - L(i,1)*B_prime(i-1,1); end end % SOLVE FOR PHI for i=numNodes:-1:1 if isequal(i,numNodes) % if the last node phi(i,1) = B_prime(i,1)/U(i,1); else phi(i,1) = (B_prime(i,1)-A(i,i+1)*phi(i+1,1))/U(i,1); end end % update the environmental temperature currentTime = t*deltaTime/(24*60*60)+30.79; % in days for k = 1+value:length(labJackTimeCOLD) if (abs(currentTime-labJackTimeCOLD(k))<=0.01) phi(1,1) = TempCOLD(k)+273.15; % update the surface temperature phi(numNodes,1) = TempCOLD(k)+273.15; % update the surface temperature value=k-1; break end end if isequal(t,numTimeStep*0.25) phi025 = phi-273.15; elseif isequal(t,numTimeStep*0.5)

phi05 = phi-273.15; elseif isequal(t,numTimeStep*0.75) phi075 = phi-273.15; elseif isequal(t,numTimeStep*0.85) phi085 = phi-273.15; elseif isequal(t,numTimeStep*0.86) phi086 = phi-273.15; elseif isequal(t,numTimeStep*0.87) phi087 = phi-273.15; elseif isequal(t,numTimeStep*0.88) phi088 = phi-273.15; elseif isequal(t,numTimeStep*0.9) phi09 = phi-273.15; end endhold off %% plotfigure()plot(depth, phi0, depth, phi025, depth, phi05, depth, phi075, depth, phi-273.15)title('Internal Temperature Profile-Cold Bin')xlabel('Distance from Outside Surface (m)')ylabel('Internal Temperature at Given Depth (\circ C)')legend('0% Time','25% Time','50% Time','75% Time','100% Time', 'Location', 'southeast')str = {'Time(days)=',time/(60*60*24), '\Deltat(s)=',deltaTime, 'Num.Elem.=',numBlocks};annotation('textbox', [0.6,0.15,0.15,0.28],'String', str)axis([0 0.6 18 26]) figure()plot(depth, phi085, depth, phi086, depth, phi087, depth, phi088, depth, phi09,depth, phi-273.15)title('Internal Temperature Profile-Cold Bin')xlabel('Distance from Sealed Surface (m)')ylabel('Internal Temperature at Given Depth (\circ C)')legend('4.25 days','4.3 days','4.35 days', '4.4 days','4.5 days','5 days','Location', 'northeast')str = {'Max.Time(days)=',time/(60*60*24), '\Deltat(s)=',deltaTime, 'Num.Elem.=',numBlocks};annotation('textbox', [0.7,0.17,0.2,0.28],'String', str)

F. HeatTransferHot.m%% Temperature data % temp for specimens exposed to hot binx = cat(1,LJ3_LP20.Temp(1:1178),LJ1_LP1.Temp(303:end));y = cat(1,LJ3_dateTime(1:1178),LJ1_dateTime(303:end)); % linearly interpolate the temperature values between the data so that% changes in temperature are not so abrupt% interpolate the value every minute or 60/(24*60*60) days TempHOT(1) = x(1); % initialize the vectorlabJackTimeHOT(1) = y(1); % initialize the vectorl = 2; % initialize the output index

for i = 2:length(x) if isequal(x(i),x(i-1)) TempHOT(l) = x(i); labJackTimeHOT(l) = y(i); else count = floor((y(i)-y(i-1))/(60/(24*60*60))); for j = 1:count if ((y(i-1)+(60/(24*60*60)*count))<y(i)) TempHOT(l) = ((x(i)-x(i-1))/(y(i)-y(i-1)))*(60/(24*60*60))*count+x(i-1); labJackTimeHOT(l) = y(i-1)+(60/(24*60*60))*count; l = l+1; end end TempHOT(l) = x(i); labJackTimeHOT(l)=y(i); end l = l+1;end %% Define the mesh and time step % use a mesh centred grid% let x=550 mm be the inside of the reactor maxDepth = 0.550; % max depth from surface, 550 mm, given in m i.e. length of specimentheta = 0.5;time = 220*24*60*60; % in secnumTimeStep = 220*24*60*60/10;deltaTime = time/numTimeStep; % in sec% define the number of grid blocks and the number of nodesnumBlocks = 100;numNodes = numBlocks+1;deltaX = maxDepth/numBlocks; % in mdepth = zeros(numNodes,1); % in mdepth(1,1) = 0; % in mfor i=2:numNodes depth(i,1) = depth(i-1,1)+deltaX;end %% Initialize the phi vectorphi = zeros(numNodes,1);% fill in the phi vector at the initial conditions% K = C + 273.15for i = 1:numNodes if isequal(i, numNodes) % if the last node phi(i,1) = TempHOT(1)+273.15; elseif isequal(i,1) % if the first node phi(i,1) = TempHOT(1)+273.15; else phi(i,1) = 25+273.15; % the initial temperature endendphi0 = phi-273.15;

figure()plot(depth, phi0)title('Initial Internal Temperature Profile-Hot Bin')xlabel('Distance from Outside Surface (m)')ylabel('Internal Temperature (\circ C)')legend('September 14, 2015', 'Location', 'southeast')axis([0 0.6 18 26]) %% initialize the coefficient matrix filled with a1, a2, a3A = zeros(numNodes,numNodes);% create and fill the RHS B vector filled with phi, b1, b2, b3% this changes over timeB = zeros(numNodes,1); % from 1 to nB_prime = zeros(numNodes, 1); % from 1 to n% initialize the L and U vectorL = zeros(numNodes-1, 1); % from 2 to nU = zeros(numNodes, 1); % from 1 to n %% THERMAL PROPERTIESk = 1.279; % thermal conductivity coefficient, in W/mKrho = 2400; % concrete density, in kg/m^3c = 880; % specific heat, in J/kgK %% SOLVE% every few minutes there is a change in the environment temperature% this needs to be included figure()plot(depth, phi0)title('Fluctuations in Internal Temperature Profile-Hot Bin')xlabel('Distance from Outside Surface (m)')ylabel('Internal Temperature (\circ C)')str = {'Time(days)=',time/(60*60*24), '\Deltat(s)=',deltaTime, 'Num.Elem.=',numBlocks};annotation('textbox', [0.7,0.36,0.15,0.28],'String', str)value = 0;for t = 1:numTimeStep % FILL IN THE A MATRIX for i=1:numNodes % for each row % do not need to but a1, a2, a3, b1, b2, b3 in this for loop % becuase they are constant with space and time because k, c are % constant E = k/(rho*c); a1 = -theta*E/(deltaX^2); a2 = 1/deltaTime + 2*theta*E/(deltaX^2); a3 = -theta*E/(deltaX^2); b1 = (1-theta)*E/(deltaX^2); b2 = 1/deltaTime - 2*(1-theta)*E/(deltaX^2); b3 = (1-theta)*E/(deltaX^2); if isequal(i,numNodes) % if the last row A(i,numNodes) = 1; elseif isequal(i,numNodes-1) % if the second last row of the matrix A(i,numNodes-1) = a2; % second last column of second last row A(i,numNodes-2) = a1; % third last column of second last row elseif isequal(i,1) % if the first row of the matrix

A(i,1) = 1; elseif isequal(i,2) % if the second row A(i,2) = a2; % row two column two A(i,3) = a3; % row two column three else A(i,i-1) = a1; A(i,i) = a2; A(i,i+1) = a3; end end % use the Thomas Solver to solve because A has a bandwidth of 3 % this also changes over time U(1,1) = A(1,1); for i = 2:numNodes % from 2 to n L(i,1) = A(i,i-1)/U(i-1,1); U(i,1) = A(i,i)-L(i,1)*A(i-1,i); end % FILL IN THE B VECTOR for i = 1:numNodes if isequal(i,1) % if the first row B(i,1) = phi(i,1); B_prime(i,1) = B(i,1); elseif isequal(i,2) % if the second row B(i,1) = (b1-a1)*phi(i-1,1)+b2*phi(i,1)+b3*phi(i+1,1); B_prime(i,1) = B(i,1) - L(i,1)*B_prime(i-1,1); elseif isequal(i,numNodes-1) % if the second last row B(i,1) = b1*phi(i-1,1) + b2*phi(i,1)+(b3-a3)*phi(i+1,1); B_prime(i,1) = B(i,1) - L(i,1)*B_prime(i-1,1); elseif isequal(i,numNodes) % if the last row B(i,1) = phi(i,1); B_prime(i,1) = B(i,1) - L(i,1)*B_prime(i-1,1); else B(i,1) = b1*phi(i-1,1)+b2*phi(i,1)+b3*phi(i+1,1); B_prime(i,1) = B(i,1) - L(i,1)*B_prime(i-1,1); end end % SOLVE FOR PHI for i=numNodes:-1:1 if isequal(i,numNodes) % if the last node phi(i,1) = B_prime(i,1)/U(i,1); else phi(i,1) = (B_prime(i,1)-A(i,i+1)*phi(i+1,1))/U(i,1); end end % update the environmental temperature currentTime = t*deltaTime/(24*60*60)+30.79; % in days for k = 1+value:length(labJackTimeHOT) if (abs(currentTime-labJackTimeHOT(k))<=0.01) phi(1,1) = TempHOT(k)+273.15; % update the surface temperature phi(numNodes,1) = TempHOT(k)+273.15; % update the surface temperature value = k-1; break end end

if isequal(t,numTimeStep*0.25) phi025 = phi-273.15; elseif isequal(t,numTimeStep*0.5) phi05 = phi-273.15; elseif isequal(t,numTimeStep*0.75) phi075 = phi-273.15; elseif isequal(t,numTimeStep*0.85) phi085 = phi-273.15; elseif isequal(t,numTimeStep*0.86) phi086 = phi-273.15; elseif isequal(t,numTimeStep*0.87) phi087 = phi-273.15; elseif isequal(t,numTimeStep*0.88) phi088 = phi-273.15; elseif isequal(t,numTimeStep*0.9) phi09 = phi-273.15; end endhold off %% plotfigure()plot(depth, phi025, depth, phi05, depth, phi075, depth, phi-273.15)title('Internal Temperature Profile-Hot Bin')xlabel('Distance from Outside Surface (m)')ylabel('Internal Temperature at Given Depth (\circ C)')legend('25% Time','50% Time','75% Time','100% Time', 'Location', 'southeast')str = {'Time(days)=',time/(60*60*24), '\Deltat(s)=',deltaTime, 'Num.Elem.=',numBlocks};annotation('textbox', [0.7,0.36,0.15,0.28],'String', str) figure()plot(depth, phi085, depth, phi086, depth, phi087, depth, phi088, depth, phi09,depth, phi-273.15)title('Internal Temperature Profile-Hot Bin')xlabel('Distance from Sealed Surface (m)')ylabel('Internal Temperature at Given Depth (\circ C)')legend('4.25 days','4.3 days','4.35 days', '4.4 days','4.5 days','5 days','Location', 'northeast')str = {'Max.Time(days)=',time/(60*60*24), '\Deltat(s)=',deltaTime, 'Num.Elem.=',numBlocks};annotation('textbox', [0.7,0.17,0.2,0.28],'String', str)

F. Recalibration.m

%% RECALIBRATION% the obtained values are x and the expected/corrected values are y in the% equation y=mx+b fileName = 'recalibration.xlsx';sheetName = 'data'; % pull the data from the sheet[numData, txtData, rawData] = xlsread(fileName,sheetName);numData = numData(2:length(numData),:); % get rid of the top row txtData = txtData(2:length(txtData),1); % get rid of the top row

% create the y values expectedRH = zeros(1,4);expectedRH(1) = 96.9;expectedRH(2) = 75.8;expectedRH(3) = 12;expectedRH(4) = 80.3; % initialize the polynomial coefficient fit vector% for LiCl, NaCl, PotSul, AmSulcoefficient1 = zeros(length(numData),2); % plot and solve for the line of best fitpoint = zeros(1,2);vector = zeros(1,2);vector(1,1) = 0;vector(1,2) = 100;for i = 1:length(numData) figure() % plot the data points plot(numData(i,1:4),expectedRH(1,1:4),'bo') hold on xlabel('Measured RH (%)') ylabel('Expected RH (%)') title(txtData(i)) % linear fit polynomial P = polyfit(numData(i,1:4),expectedRH(1,1:4), 1); coefficient1(i,1) = P(1,1); coefficient1(i,2) = P(1,2); % plot the line of best fit point(1,1) = coefficient1(i,1)*0+coefficient1(i,2); point(1,2) = coefficient1(i,1)*100+coefficient1(i,2); plot(vector,point, 'b') hold off legend('LiCl:12%,NaCl:75%,AmSul:80.3%,PotSul:96.9%','Line of Best Fit for LiCl,NaCl,AmSul,PotSul','Location','southeast')end

F.2 PlotResults.m

%% Initialize all the structs predictedStrain52 = struct; % using 52.5 N cementthermalStrain = struct;time = struct; %% Run the lollipop filerun('LollipopResults.m') %% Run the free shrinkage filerun('FreeShrinkageResults.m') %% Run the creep file

run('CreepResults.m') %% Plot the cold bin environment [Temp,RH] = weightedMeanLJ3_v2(LJ3_LP4.Temp(878:end),LJ3_LP4.RH(878:end),878); figure('Name','Cold Bin Temp','NumberTitle','off')plot(LJ3_dateTime(878:end),LJ3_LP4.Temp(878:end), LJ3_dateTime(878:end), Temp);grid ontitle('LP4 - Cold Bin Temperature')xlabel('Concrete Age (days)')ylabel('Temperature (\circ C)')legend('Temperature','Accumulated Average Temp','Location','northwest')av_temp_coldBin = round(mean(LJ3_LP4.Temp(1431:end)),2);dim = [0.14 0.12 .15 .15];str = {'Average Temp from concrete age of ~36 days:', av_temp_coldBin};annotation('textbox',dim,'String',str,'FitBoxToText','on');set(gca,'XMinorTick','on','YMinorTick','on'); figure('Name','Cold Bin RH','NumberTitle','off')plot(LJ3_dateTime(878:end),LJ3_LP4.RH(878:end),LJ3_dateTime(878:end), RH);grid ontitle('LP4 - Cold Bin Relative Humidity')xlabel('Concrete Age (days)')ylabel('Relative Humidity (%)')legend('RH','Accumulated Average RH')av_RH_coldBin = round(mean(LJ3_LP4.RH(1431:end)),2);dim = [0.35 0.2 .35 .35];str = {'Average RH from concrete age of ~36 days:', av_RH_coldBin};annotation('textbox',dim,'String',str,'FitBoxToText','on');set(gca,'XMinorTick','on','YMinorTick','on'); %% Plot the hot bin environment [Temp,RH] = weightedMeanLJ1_v2(LJ1_LP1.Temp(9:end),LJ1_LP1.RH(9:end),9); figure('Name','Hot Bin Temp','NumberTitle','off')plot(LJ1_dateTime(9:end),LJ1_LP1.Temp(9:end), LJ1_dateTime(9:end), Temp);grid ontitle('LP1 - Hot Bin Temperature')xlabel('Concrete Age (days)')ylabel('Temperature (\circ C)')legend('Temperature','Accumulated Average Temp','Location','southeast')av_temp_hotBin = round(mean(LJ1_LP1.Temp(555:end)),2);dim = [0.35 0.2 .15 .15];str = {'Average Temp from concrete age of ~36 days:', av_temp_hotBin};annotation('textbox',dim,'String',str,'FitBoxToText','on');set(gca,'XMinorTick','on','YMinorTick','on'); figure('Name','Hot Bin RH','NumberTitle','off')plot(LJ1_dateTime(9:end),LJ1_LP1.RH(9:end), LJ1_dateTime(9:end), RH);grid ontitle('LP1 - Hot Bin Relative Humidity')xlabel('Concrete Age (days)')

ylabel('Relative Humidity (%)')legend('RH','Accumulated Average RH')av_RH_hotBin = round(mean(LJ1_LP1.RH(555:end)),2);dim = [0.35 0.5 .15 .15];str = {'Average RH from concrete age of ~36 days:', av_RH_hotBin};annotation('textbox',dim,'String',str,'FitBoxToText','on');set(gca,'XMinorTick','on','YMinorTick','on'); %% Plot the ambient environment [Temp,RH] = weightedMeanLJ3_v2(LJ3_LP20.Temp,LJ3_LP20.RH,1); figure('Name','Ambient Temp','NumberTitle','off')plot(LJ3_dateTime,LJ3_LP20.Temp, LJ3_dateTime, Temp);grid ontitle('LP20 - Ambient Temperature')xlabel('Concrete Age (days)')ylabel('Temperature (\circ C)')legend('Temperature','Accumulated Average Temp','Location','southwest')av_temp_ambient = round(mean(LJ3_LP20.Temp),2);dim = [0.17 0.25 .15 .15];str = {'Average Temp:', av_temp_ambient};annotation('textbox',dim,'String',str,'FitBoxToText','on');set(gca,'XMinorTick','on','YMinorTick','on'); figure('Name','Ambient RH','NumberTitle','off')plot(LJ3_dateTime,LJ3_LP20.RH,LJ3_dateTime,RH);grid ontitle('LP20 - Ambient Relative Humidity')xlabel('Concrete Age (days)')ylabel('Relative Humidity (%)')legend('RH','Accumulated Average RH')av_RH_ambient = round(mean(LJ3_LP20.RH),2);dim = [0.15 0.12 .15 .15];str = {'Average RH:', av_RH_ambient};annotation('textbox',dim,'String',str,'FitBoxToText','on');set(gca,'XMinorTick','on','YMinorTick','on'); %% Plot the creep environment [Temp,RH] = weightedMeanLJ3_v2(LJ3_LP16.Temp(660:end),LJ3_LP16.RH(660:end),660); figure('Name','Creep Temp','NumberTitle','off')plot(LJ3_dateTime(660:end),LJ3_LP16.Temp(660:end),LJ3_dateTime(660:end),Temp);grid ontitle('LP16 - Creep Chamber Temperature')xlabel('Concrete Age (days)')ylabel('Temperature (\circ C)')legend('Temperature','Accumulated Average Temp','Location','northwest')av_temp_creep = round(mean(LJ3_LP16.Temp(660:end)),2);dim = [0.15 0.10 .15 .15];str = {'Average Temp from concrete age of 33 days:', av_temp_creep};annotation('textbox',dim,'String',str,'FitBoxToText','on');set(gca,'XMinorTick','on','YMinorTick','on');

figure('Name','Creep RH','NumberTitle','off')plot(LJ3_dateTime(660:end),LJ3_LP16.RH(660:end), LJ3_dateTime(660:end), RH);grid ontitle('LP16 - Creep Chamber Relative Humidity')xlabel('Concrete Age (days)')ylabel('Relative Humidity (%)')legend('RH','Accumulated Average RH')av_RH_creep = round(mean(LJ3_LP16.RH(660:end)),2);dim = [0.33 0.2 .45 .45];str = {'Average RH from concrete age of 33 days:', av_RH_creep};annotation('textbox',dim,'String',str,'FitBoxToText','on');set(gca,'XMinorTick','on','YMinorTick','on'); %% Plot G3 Lollipops % replace LJ3_LP11.Temp(877:end) and LJ3_LP11.RH(877:end)dead1 = LJ3_LP11.Temp(877:end);dead2 = LJ3_LP11.RH(877:end);for i = (9075-877):length(dead1) dead1(i) = NaN; dead2(i) = NaN;end % replace LJ3_LP22.Temp(875:end) and LJ3_LP22.RH(875:end)dead3 = LJ3_LP22.Temp(875:end);dead4 = LJ3_LP22.RH(875:end);for i = (1915-875):(4459-875) dead3(i) = NaN; dead4(i) = NaN;end % plot G3 relative humidityfigure('Name','G3 RH','NumberTitle','off')plot(LJ3_dateTime(874:end),LJ3_LP18.RH(874:end),LJ3_dateTime(875:end),dead4,LJ3_dateTime(875:end),LJ3_LP10.RH(875:end),LJ3_dateTime(876:end),LJ3_LP3.RH(876:end),... LJ3_dateTime(877:end),dead2,LJ3_dateTime(878:end),LJ3_LP17.RH(878:end),LJ3_dateTime(878:end),LJ3_LP4.RH(878:end));grid ontitle('G3 Relative Humidity')xlabel('Concrete Age (days)')ylabel('Relative Humidity (%)')legend('LP18-Closed End','LP22','LP10','LP3','LP11-Dead','LP17-Open End','LP4-Cold Bin')set(gca,'XMinorTick','on','YMinorTick','on');% plot G3 temperaturefigure('Name','G3 Temp','NumberTitle','off')plot(LJ3_dateTime(874:end),LJ3_LP18.Temp(874:end),LJ3_dateTime(875:end),dead3,LJ3_dateTime(875:end),LJ3_LP10.Temp(875:end),LJ3_dateTime(876:end),... LJ3_LP3.Temp(876:end),LJ3_dateTime(877:end),dead1,LJ3_dateTime(878:end),LJ3_LP17.Temp(878:end),LJ3_dateTime(878:end),LJ3_LP4.Temp(878:end));grid ontitle('G3 Temperature')

xlabel('Concrete Age (days)')ylabel('Temperature (\circ C)')legend('LP18-Closed End','LP22','LP10','LP3','LP11-Dead','LP17-Open End','LP4-Cold Bin','Location','southwest')set(gca,'XMinorTick','on','YMinorTick','on');ylim([15 27]) %% Plot G4 Lollipops % replace LJ3_LP29.Temp(871:end), LJ3_LP29.RH(871:end),LJ3_LP6.Temp(871:end), LJ3_LP6.RH(871:end)dead1 = LJ3_LP29.Temp(871:end);for i = 1:length(dead1) dead1(i) = NaN;end % replace LJ3_LP9.Temp(869:end) and LJ3_LP9.RH(869:end)dead3 = LJ3_LP9.Temp(869:end);dead4 = LJ3_LP9.RH(869:end);for i = (11258-869):(12033-869) dead3(i) = NaN; dead4(i) = NaN;end % plot G4 relative humidityfigure('Name','G4 RH','NumberTitle','off')plot(LJ3_dateTime(868:end),LJ3_LP21.RH(868:end),LJ3_dateTime(869:end),dead4,LJ3_dateTime(871:end),dead1,LJ3_dateTime(871:end),LJ3_LP19.RH(871:end),... LJ3_dateTime(871:end),dead1,LJ3_dateTime(873:end),LJ3_LP7.RH(873:end),LJ3_dateTime(878:end),LJ3_LP4.RH(878:end));grid ontitle('G4 Relative Humidity')xlabel('Concrete Age (days)')ylabel('Relative Humidity (%)')legend('LP21-Closed End','LP9','LP6-Dead','LP19','LP29-Dead','LP7-Open End','LP4-Cold Bin')set(gca,'XMinorTick','on','YMinorTick','on');% plot G4 temperaturefigure('Name','G4 Temp','NumberTitle','off')plot(LJ3_dateTime(868:end),LJ3_LP21.Temp(868:end),LJ3_dateTime(869:end),dead3,LJ3_dateTime(871:end),dead1,LJ3_dateTime(871:end),... LJ3_LP19.Temp(871:end),LJ3_dateTime(871:end),dead1,LJ3_dateTime(873:end),LJ3_LP7.Temp(873:end),LJ3_dateTime(878:end),LJ3_LP4.Temp(878:end));grid ontitle('G4 Temperature')xlabel('Concrete Age (days)')ylabel('Temperature (\circ C)')legend('LP21-Closed End','LP9','LP6-Dead','LP19','LP29-Dead','LP7-Open End','LP4-Cold Bin','Location','southwest')set(gca,'XMinorTick','on','YMinorTick','on');ylim([15 30]) %% Plot G1 Lollipops % replace LJ1_LP2.Temp(6:end) and LJ1_LP2.RH(6:end)dead = LJ1_LP2.Temp(6:end);

for i = 1:length(dead) dead(i) = NaN;end % plot G1 relative humidityfigure('Name','G1 RH','NumberTitle','off')plot(LJ1_dateTime(6:end),LJ1_LP28.RH(6:end), LJ1_dateTime(6:end),dead, LJ1_dateTime(6:end),LJ1_LP14.RH(6:end), LJ1_dateTime(6:end),LJ1_LP8.RH(6:end), ... LJ1_dateTime(6:end),LJ1_LP12.RH(6:end), LJ1_dateTime(6:end),LJ1_LP13.RH(6:end),LJ1_dateTime(9:end),LJ1_LP1.RH(9:end));grid ontitle('G1 Relative Humidity')xlabel('Concrete Age (days)')ylabel('Relative Humidity (%)')legend('LP28-Closed End', 'LP2-Dead', 'LP14', 'LP8', 'LP12', 'LP13-Open End','LP1-Hot Bin')set(gca,'XMinorTick','on','YMinorTick','on');% plot G1 temperaturefigure('Name','G1 Temp','NumberTitle','off')plot(LJ1_dateTime(6:end),LJ1_LP28.Temp(6:end),LJ1_dateTime(6:end),dead,LJ1_dateTime(6:end),LJ1_LP14.Temp(6:end),LJ1_dateTime(6:end),LJ1_LP8.Temp(6:end),... LJ1_dateTime(6:end),LJ1_LP12.Temp(6:end),LJ1_dateTime(6:end),LJ1_LP13.Temp(6:end),LJ1_dateTime(9:end),LJ1_LP1.Temp(9:end));grid ontitle('G1 Temperature')xlabel('Concrete Age (days)')ylabel('Temperature (\circ C)')legend('LP28-Closed End', 'LP2-Dead', 'LP14', 'LP8', 'LP12', 'LP13-Open End','LP1-Hot Bin','Location','southeast')set(gca,'XMinorTick','on','YMinorTick','on');ylim([25 45]) %% Plot G2 Lollipops % replace LJ1_LP25.Temp(9:end) and LJ1_LP25.RH(9:end)dead = LJ1_LP25.Temp(9:end);for i = 1:length(dead) dead(i) = NaN;end % plot G2 relative humidityfigure('Name','G2 RH','NumberTitle','off')plot(LJ1_dateTime(6:end),LJ1_LP5.RH(6:end),LJ1_dateTime(6:end),LJ1_LP24.RH(6:end),LJ1_dateTime(6:end),LJ1_LP30.RH(6:end),LJ1_dateTime(9:end),dead,... LJ1_dateTime(8:end),LJ1_LP15.RH(8:end),LJ1_dateTime(8:end),LJ1_LP27.RH(8:end),LJ1_dateTime(9:end),LJ1_LP1.RH(9:end));grid ontitle('G2 Relative Humidity')xlabel('Concrete Age (days)')ylabel('Relative Humidity (%)')legend('LP5-Closed End','LP24','LP30','LP25-Dead','LP15','LP27-Open End','LP1-Hot Bin')set(gca,'XMinorTick','on','YMinorTick','on');% plot G2 temperaturefigure('Name','G2 Temp','NumberTitle','off')

plot(LJ1_dateTime(6:end),LJ1_LP5.Temp(6:end),LJ1_dateTime(6:end),LJ1_LP24.Temp(6:end),LJ1_dateTime(6:end),LJ1_LP30.Temp(6:end),LJ1_dateTime(9:end),dead,... LJ1_dateTime(8:end),LJ1_LP15.Temp(8:end),LJ1_dateTime(8:end),LJ1_LP27.Temp(8:end),LJ1_dateTime(9:end),LJ1_LP1.Temp(9:end));grid ontitle('G2 Temperature')xlabel('Concrete Age (days)')ylabel('Temperature (\circ C)')legend('LP5-Closed End','LP24','LP30','LP25-Dead','LP15','LP27-Open End','LP1-Hot Bin','Location','southeast')set(gca,'XMinorTick','on','YMinorTick','on');ylim([20 45]) %% Plot Outside Temperature and RH % read in the excel filefileName = 'outside_temperature_fluctuations.xlsx'; sheetName = 'sep 2015';sheetName2 = 'oct 2015';sheetName3 = 'nov 2015';sheetName4 = 'dec 2015';sheetName5 = 'jan 2016';sheetName6 = 'feb 2016';sheetName7 = 'march 2016';sheetName8 = 'april 2016';sheetName9 = 'may 2016';sheetName10 = 'june 2016'; % pull the first sheet of data[numData, ~, ~] = xlsread(fileName,sheetName);numData1 = numData(16:length(numData),:); % get rid of the top 17 rows % pull the second sheet of data[numData, ~, ~] = xlsread(fileName,sheetName2);numData2 = numData(16:length(numData),:); % get rid of the top 17 rows % pull the third sheet of data[numData, ~, ~] = xlsread(fileName,sheetName3);numData3 = numData(16:length(numData),:); % get rid of the top 17 rows % pull the fourth sheet of data[numData, ~, ~] = xlsread(fileName,sheetName4);numData4 = numData(16:length(numData),:); % get rid of the top 17 rows % pull the fifth sheet of data[numData, ~, ~] = xlsread(fileName,sheetName5);numData5 = numData(16:length(numData),:); % get rid of the top 17 rows % pull the sixth sheet of data[numData, ~, ~] = xlsread(fileName,sheetName6);numData6 = numData(16:length(numData),:); % get rid of the top 17 rows

% pull the seventh sheet of data[numData, ~, ~] = xlsread(fileName,sheetName7);numData7 = numData(16:length(numData),:); % get rid of the top 17 rows % pull the eigth sheet of data[numData, ~, ~] = xlsread(fileName,sheetName8);numData8 = numData(16:length(numData),:); % get rid of the top 17 rows % pull the ninth sheet of data[numData, ~, ~] = xlsread(fileName,sheetName9);numData9 = numData(16:length(numData),:); % get rid of the top 17 rows % pull the tenth sheet of data[numData, ~, ~] = xlsread(fileName,sheetName10);numData10 = numData(16:length(numData),:); % get rid of the top 17 rows % combine all the temp, RH, and date data into one vectortemperature_outside = cat(1,numData1(:,5),numData2(:,5),numData3(:,5),numData4(:,5),numData5(:,5),numData6(:,5),numData7(:,5),numData8(:,5),numData9(:,5),numData10(:,5)); RH_outside = cat(1,numData1(:,6),numData2(:,6),numData3(:,6),numData4(:,6),numData5(:,6),numData6(:,6),numData7(:,6),numData8(:,6),numData9(:,6),numData10(:,6));date_outside = cat(1,numData1(:,9),numData2(:,9),numData3(:,9),numData4(:,9),numData5(:,9),numData6(:,9),numData7(:,9),numData8(:,9),numData9(:,9),numData10(:,9));date_outside = date_outside - date_outside(1) + 30.79; averageTemp = mean(temperature_outside(1,:));averageRH = mean(RH_outside(1,:)); figure('Name','Outside Temp','NumberTitle','off')plot(date_outside,temperature_outside)title('Sep 14, 2015 to June 22, 2016')ylabel('Outside Temperature (\circ C)')xlabel('Concrete Age (days)')dim = [0.15 0.10 .15 .15];str = {'Average Temp:', averageTemp};annotation('textbox',dim,'String',str,'FitBoxToText','on');set(gca,'XMinorTick','on','YMinorTick','on'); figure('Name','Outside RH','NumberTitle','off')plot(date_outside,RH_outside)title('Sep 14, 2015 to June 22, 2016')ylabel('Outside Relative Humidity (%)')xlabel('Concrete Age (days)')dim = [0.15 0.10 .15 .15];str = {'Average RH:', averageRH};annotation('textbox',dim,'String',str,'FitBoxToText','on');set(gca,'XMinorTick','on','YMinorTick','on'); clear averageTemp averageRH

%% Run the gradient filerun('GradientResults_v2.m') %% Plot Moisture Flow Case 2 vs Experimental values timetime = 220*24*60*60;deltaTime = 1080;numBlocks = 3000;alpha = 0.05;cc = 11*10^-8;[ depth,phi ] = MoistureFlowCase2_v3( timetime,deltaTime,numBlocks,alpha,cc ); % initialize the RH and the depth/location of lollipop vectorsG1 = zeros(6,1);G2 = zeros(6,1);G3 = zeros(6,1);G4 = zeros(6,1);d = [135;255;360;425;475;520]; % in mm, from sealed end of the specimenindex = 0; for j = 1:2 % for each tote bin% j = 1: hot bin% j = 2: cold bin if isequal(j,1) labJackTime = LJ1_dateTime; else labJackTime = LJ3_dateTime; end for i = 1:length(labJackTime) % if the labjackTime matches the time at which we are modelling if (abs(labJackTime(i)-(timetime/(24*60*60)+30.79)) <= 0.01) index = i; break end end % from the closed end to the open end if isequal(j,1) G1 = [LJ1_LP28.RH(index); LJ1_LP2.RH(index); LJ1_LP14.RH(index); LJ1_LP8.RH(index); LJ1_LP12.RH(index); LJ1_LP13.RH(index)]; G2 = [LJ1_LP5.RH(index); LJ1_LP24.RH(index); LJ1_LP30.RH(index); LJ1_LP25.RH(index); LJ1_LP15.RH(index); LJ1_LP27.RH(index)]; else G3 = [LJ3_LP18.RH(index); LJ3_LP22.RH(index); LJ3_LP10.RH(index); LJ3_LP3.RH(index);LJ3_LP11.RH(index); LJ3_LP17.RH(index)]; G4 = [LJ3_LP21.RH(index); LJ3_LP9.RH(index); LJ3_LP6.RH(index); LJ3_LP19.RH(index); LJ3_LP29.RH(index); LJ3_LP7.RH(index)]; endend % G1 = [LJ1_LP28.RH(index); LJ1_LP2.RH(index); LJ1_LP14.RH(index); LJ1_LP8.RH(index); LJ1_LP12.RH(index); LJ1_LP13.RH(index)];% G2 = [LJ1_LP5.RH(index); LJ1_LP24.RH(index); LJ1_LP30.RH(index); LJ1_LP25.RH(index); LJ1_LP15.RH(index); LJ1_LP27.RH(index)];% G3 = [LJ3_LP18.RH(index); LJ3_LP22.RH(index); LJ3_LP10.RH(index); LJ3_LP3.RH(index);LJ3_LP11.RH(index); LJ3_LP17.RH(index)];

% G4 = [LJ3_LP21.RH(index); LJ3_LP9.RH(index); LJ3_LP6.RH(index); LJ3_LP19.RH(index); LJ3_LP29.RH(index); LJ3_LP7.RH(index)]; figure('Name','ExpVSTheoryRH','NumberTitle','off')plot(depth*1000, phi*100, d, G1,'o', d, G2,'x', d, G3,'*', d, G4,'s')title('Internal Relative Humidity Gradient')xlabel('Distance from Sealed End (mm)')ylabel('Internal Relative Humidity at Given Depth (%)')axis([0 600 0 110])legend('Theoretical','G1','G2','G3','G4', 'Location', 'southeast')str = {'Concrete Age (days)=',timetime/(60*60*24)+30.75, '\Deltat(s)=',deltaTime, 'Num. of Elem.=',numBlocks, 'Alpha=',alpha,'cc=',cc};annotation('textbox', [0.15,0.35,0.15,0.25],'String', str,'FitBoxToText','on') %% Plot Int Temp Hot Bin vs Predictedclose allrun('HeatTransferHot.m') % initialize the depth/location of lollipop vectorsd = [0.135;0.255;0.360;0.425;0.475;0.520]; % in m, from sealed end of the specimenindex = 0; for i = 1:length(LJ1_dateTime) % if the labjackTime matches the time at which we are modelling if (abs(LJ1_dateTime(i)-(time/(24*60*60)+30.79)) <= 0.01) index = i; break end end % from the closed end to the open end G1 = [LJ1_LP28.Temp(index); NaN; LJ1_LP14.Temp(index); LJ1_LP8.Temp(index); LJ1_LP12.Temp(index); LJ1_LP13.Temp(index)]; G2 = [LJ1_LP5.Temp(index); LJ1_LP24.Temp(index); LJ1_LP30.Temp(index); NaN; LJ1_LP15.Temp(index); LJ1_LP27.Temp(index)]; figure('Name','ExpVSTheoryTemp','NumberTitle','off')plot(depth, phi-273.15, d, G1,'o', d, G2,'x')title('Internal Temperature Gradient-Hot Tote Bin')xlabel('Distance from Sealed End (m)')ylabel('Internal Temperature at Given Depth (\circC)')%axis([0 0.6 0 1.1])legend('Theoretical','G1','G2','Location', 'southwest')str = {'Age(days)=',time/(60*60*24)+30.75, '\Deltat(s)=',deltaTime, 'Num.Elem=',numBlocks};annotation('textbox', [0.15,0.55,0.15,0.25],'String', str) %% Plot Int Temp Cold Bin vs Predictedclose allrun('HeatTransferCold.m') % initialize the depth/location of lollipop vectorsd = [0.135;0.255;0.360;0.425;0.475;0.520]; % in m, from sealed end of the specimenindex = 0; for i = 1:length(LJ3_dateTime)

% if the labjackTime matches the time at which we are modelling if (abs(LJ3_dateTime(i)-(time/(24*60*60)+30.79)) <= 0.01) index = i; break end end % LJ3_LP22.Temp(index) % from the closed end to the open end G3 = [LJ3_LP18.Temp(index); LJ3_LP22.Temp(index); LJ3_LP10.Temp(index); LJ3_LP3.Temp(index); NaN; LJ3_LP17.Temp(index)]; G4 = [LJ3_LP21.Temp(index); LJ3_LP9.Temp(index); NaN; LJ3_LP19.Temp(index); NaN; LJ3_LP7.Temp(index)]; % LJ3_LP22.Temp(index) figure('Name','ExpVSTheoryTemp','NumberTitle','off')plot(depth, phi-273.15, d, G3,'o', d, G4,'x')title('Internal Temperature Gradient-Cold Tote Bin')xlabel('Distance from Sealed End (m)')ylabel('Internal Temperature at Given Depth (\circC)')%axis([0 0.6 0 1.1])legend('Theoretical','G3','G4','Location', 'southwest')str = {'Age(days)=',time/(60*60*24)+30.75, '\Deltat(s)=',deltaTime, 'Num.Elem=',numBlocks};annotation('textbox', [0.15,0.35,0.15,0.25],'String', str)ylim([18 26])