The MATLAB code title is in bold and everything following is the actual code that can be used in a MATLAB environment. Each specific code is broken up by these bold titles.
“STPQUAD3.m”:
%% Begin input clear all
global F_0 F Finv alphaF betaF gammaF n T_c G alphaG betaG gammaG R tau alphaR betaR gammaR
n=3; % number of safety trains;
F=cell(1,n);
Finv=cell(1,n);
R=cell(1,n);
T=24; % mission time, in hours T_c=1; % critical time, in hours
G=@logncdf; % cdf in time (hours) for recovery of offsite power, here taken as lognormal cdf
% per Word document "Verification 2"
alphaG=0.300; betaG=1.064; gammaG=0; % parameters for G, here respectively mean time to
% recovery (hours) and standard deviation for the associated normal distribution, as in
% the Word document "Verification 2"
F_0(1)=.014; % probability of initial failure to start of train i, per
"Verification 2".
F{1}=@FTR6890; % cdf for failure of train 1 to start and load; here a piecewise
% exponential cdf, per "Verification 2"
Finv{1}=@FTR6890inv; % the corresponding inverse cdf for failure of train 1 to start and load; here
% the inverse of the piecewise exponential function coded into FTR6890, per
% "Verification 2"
alphaF(1)=400; betaF(1)=1; gammaF(1)=1250; % parameters for cdf for failure to run, here
% alphaF = mu1 = exponential mean up to time betaF = cutoff time, and gammaF = subsequent
% exponential mean conditional on reaching the cutoff time, numerical
% values per "Verification 2"
R{1}=@wblcdf; % cdf in time (hours) for recovery (repair) of train 1.
Here the Weibull
% cdf, per "Verification 2"
alphaR(1)=15.5; betaR(1)=0.739; gammaR(1)=0; % parameters for recovery cdf for train 1, here
% the respective values of the scale and shape parameters for a Weibull
% distribution, as detailed in "Verification 2" (alphaR in hours)
F_0(2)=.014; % probability of initial failure to start of train 2, per
"Verification 2".
F{2}=@FTR6890; % cdf for failure of train 2 to start and load; here a piecewise
% exponential cdf, per "Verification 2"
Finv{2}=@FTR6890inv; % the corresponding inverse cdf for failure of train 2 to start and load; here
% the inverse of the piecewise exponential function coded into FTR6890, per
% "Verification 2"
alphaF(2)=400; betaF(2)=1; gammaF(2)=1250; % parameters for cdf for failure to run, here
% alphaF = mu1 = exponential mean up to time betaF = cutoff time, and gammaF = subsequent
% exponential mean conditional on reaching the cutoff time, numerical
% values per "Verification 2"
R{2}=@wblcdf; % cdf in time (hours) for recovery (repair) of train 2.
Here the Weibull
% cdf, per "Verification 2"
alphaR(2)=15.5; betaR(2)=0.739; gammaR(2)=0; % parameters for recovery cdf for train 2, here
% the respective values of the scale and shape parameters for a Weibull
% distribution, as detailed in "Verification 2" (alphaR in hours)
F_0(3)=.014; % probability of initial failure to start of train 3, per
"Verification 2".
F{3}=@FTR6890; % cdf for failure of train 3 to start and load; here a piecewise
% exponential cdf, per "Verification 2"
Finv{3}=@FTR6890inv; % the corresponding inverse cdf for failure of train 3 to start and load; here
% the inverse of the piecewise exponential function coded into FTR6890, per
% "Verification 2"
alphaF(3)=400; betaF(3)=1; gammaF(3)=1250; % parameters for cdf for failure to run, here
% alphaF = mu1 = exponential mean up to time betaF = cutoff time, and gammaF = subsequent
% exponential mean conditional on reaching the cutoff time, numerical
% values per "Verification 2"
R{3}=@wblcdf; % cdf in time (hours) for recovery (repair) of train 3.
%%
%
%% Computation of nonrecovery integral
% Convert Riemann-Stieltjes triple nonrecovery integral to ordinary Riemann
% is 1.0e-10. See "Verification 2" for the basis for this recommendation.
“Lloyd3.m”:
%% Begin input clear all
global f F_0 F alphaF betaF gammaF n T_c G alphaG betaG gammaG Rhat n=2; % number of safety trains;
f=cell(1,n);
F=cell(1,n);
R=cell(1,n);
T=24; % mission time, in hours T_c=1; % critical time, in hours
%G=@Gzero; % Set G=0; no credit for offsite recovery; aid in debugging G=@logncdf; % cdf in time (hours) for recovery of offsite power
alphaG=0.300; betaG=1.064; gammaG=0; % parameters for G, here mean and standard deviation
% (natural log hours) of associated normal distribution
%
F_0(1)=.014; % probability of initial failure to start of train i, from
% Table 4.2 (p. 24) of Vol. 2 of NUREG/CR-6890
%%
f{1}=@FTR6890pdf; % pdf for failure of train 1; here the two-regime
% exponential pdf, per "Verification 2"
F{1}=@FTR6890; % cdf for failure of train 1; here the two-regime
% exponential pdf, per "Verification 2"
alphaF(1)=1/2.5e-3; betaF(1)=1; gammaF(1)=1/8.0e-4; % parameters for failure pdf, cdf and its inverse, for
% train 1, here mean time to failure prior to cutoff, cutoff (hours) and mean time to failure
% after cutoff, as in "Verification 2," all times in hours
%%
%Rhat(1)=1.0; % nonrecovery factor for train 1; here no credit taken for onsite recovery
R{1}=@wblcdf; % cdf in time (hours) for recovery (repair) of train 1.
Here the Weibull
% cdf, per "Verification 2"
alphaR(1)=15.5; betaR(1)=0.739; gammaR(1)=0;
% parameters for recovery cdf for train 1, here
% the respective values of the scale and shape parameters for a Weibull
% distribution, as detailed in "Verification 2" (alphaR in hours) Rhat(1)=1-feval(R{1},T_c,alphaR(1),betaR(1),gammaR(1)); %nonrecovery factor for train 1;
% here as appropriate to Weibull cdf in the Read-Fleming version of the
% Lloyd-Anoba approach
%%
F_0(2)=.014; % probability of initial failure to start of train i, from
% Table 4.2 (p. 24) of Vol. 2 of NUREG/CR-6890
f{2}=@FTR6890pdf; % pdf for failure of train 1; here the two-regime
% exponential pdf, per "Verification 2"
F{2}=@FTR6890; % cdf for failure of train 1; here the two-regime
% exponential pdf, per "Verification 2"
alphaF(2)=1/2.5e-3; betaF(2)=1; gammaF(2)=1/8.0e-4; % parameters for failure pdf, cdf and its inverse, for
% train 1, here mean time to failure prior to cutoff, cutoff (hours) and mean time to failure
% after cutoff, as in "Verification 2," all times in hours
%%
%Rhat(2)=1.0; % nonrecovery factor for train 1; here no credit taken for onsite recovery
R{2}=@wblcdf; % cdf in time (hours) for recovery (repair) of train 1.
Here the Weibull
% cdf, per "Verification 2"
alphaR(2)=15.5; betaR(2)=0.739; gammaR(2)=0;
% parameters for recovery cdf for train 2, here
% the respective values of the scale and shape parameters for a Weibull
% distribution, as detailed in "Verification 2" (alphaR in hours) Rhat(2)=1-feval(R{2},T_c,alphaR(2),betaR(2),gammaR(2)); %nonrecovery factor for train 1;
% here as appropriate to Weibull cdf in the Read-Fleming version of the
% Lloyd-Anoba approach
%%
F_0(3)=.014; % probability of initial failure to start of train i, from
% Table 4.2 (p. 24) of Vol. 2 of NUREG/CR-6890
f{3}=@FTR6890pdf; % pdf for failure of train 1; here the two-regime
% exponential pdf, per "Verification 2"
F{3}=@FTR6890; % cdf for failure of train 1; here the two-regime
% exponential pdf, per "Verification 2"
alphaF(3)=1/2.5e-3; betaF(3)=1; gammaF(3)=1/8.0e-4; % parameters for failure pdf, cdf and its inverse, for
% train 1, here mean time to failure prior to cutoff, cutoff (hours) and mean time to failure
% after cutoff, as in "Verification 2," all times in hours
% HERE; must change Rhat as below but with new recovery in order to take
% full credit for on-site recovery
%Rhat(3)=1.0; % nonrecovery factor for train 3; here no credit taken for onsite recovery
R{3}=@wblcdf; % cdf in time (hours) for recovery (repair) of train 1.
Rhat(3)=1-feval(R{3},T_c,alphaR(3),betaR(3),gammaR(3)); %nonrecovery factor for train 1;
% here as appropriate to Weibull cdf in the Read-Fleming version of the
% Lloyd-Anoba approach
%%
% Computation of Lloyd approximation to nonrecovery integral startpart=(1-G(T_c,alphaG,betaG,gammaG))*F_0(1)*F_0(2)*F_0(3);
%runpart=quadl(@INTEGRAND3,0,T);
runpart=quadl(@INTEGRAND3,0,T,1.0e-10); % tolerance of 1.0e-10
%recommended
%runpart=quad(@INTEGRAND3,0,T,1.0e-14);
%runpart=quad(@INTEGRAND3,0,T);
% Following assumes identical EDGs ??Why
P_CSBO=Rhat(1)*Rhat(2)*Rhat(3)*(startpart+runpart)
“INTEGRANDv1pt0.m”:
function H=INTEGRANDv1pt0(F1,F2,F3)
global F_0 F Finv alphaF betaF gammaF n G T_c G alphaG betaG gammaG R tau alphaR betaR gammaR
tau=cell(1,n);
%%
% Identify corresponding times, tau1, tau2, tau3 C1=F1<F_0(1);
tau{3}(i,j)=feval(Finv{1,3},((F3(i,j)-F_0(2))./(1-F_0(3))),alphaF(2),betaF(2),gammaF(2));
end end end
H=ones(m1,n1); % Correct if credit taken only for nonfailure of emergency
% trains, as in approach of the 'multiple trains, no recovery" section of
% the Rio paper. Looks o.k. for F = exponential integral, but need to
% compare to ICONE18 paper and to Rio paper
%%
% Determine taumax taumax=tau{1};
for i=2:n
taumax=max(taumax,tau{i});
end
% Now take credit for recovery of offsite power, as in Section 3.4 of Rio paper
H=H.*(1-feval(G,taumax+T_c,alphaG,betaG,gammaG));
% Now take credit for recovery of emergency power trains for i=1:n
H=H.*(1-feval(R{i},taumax+T_c-tau{i},alphaR(i),betaR(i),gammaR(i)));
% Alternately take only credit for recovery of emergency power trains that
% comes from repair work following full failure of onsite power (per
% Lloyd-Anoba, for the case coincident with Read-Fleming) %H=H.*(1-feval(R{i},T_c,alphaR(i),betaR(i),gammaR(i)));
end
“INTEGRAND3.m”:
function H=INTEGRAND3(taumax)
global f F_0 F alphaF betaF gammaF n G T_c G alphaG betaG gammaG Rhat
[m1 n1]=size(taumax);
H=ones(m1,n1); % Correct if credit taken only for nonfailure of emergency
% trains, as in approach of the "multiple trains, no recovery" section of
% the Rio paper.
% Credit for offsite recovery only following SBO
Hsum1=(1-F_0(1)).*feval(f{1},taumax,alphaF(1),betaF(1),gammaF(1)); % EDG 1 is last to fail (to run)
Hsum1=Hsum1.*(F_0(2).*ones(m1,n1)+(1-F_0(2)).*feval(F{2},taumax,alphaF(2),betaF(2),gammaF(2)));
% EDG 2 fails earlier, either to start or to run
Hsum1=Hsum1.*(F_0(3).*ones(m1,n1)+(1-F_0(3)).*feval(F{3},taumax,alphaF(3),betaF(3),gammaF(3)));
% EDG 3 fails earlier, either to start or to run
Hsum2=(1-F_0(2)).*feval(f{2},taumax,alphaF(2),betaF(2),gammaF(2)); % EDG 2 is last to fail (to run)
Hsum2=Hsum2.*(F_0(1).*ones(m1,n1)+(1-F_0(1)).*feval(F{1},taumax,alphaF(1),betaF(1),gammaF(1)));
% EDG 1 fails earlier, either to start or to run
Hsum2=Hsum2.*(F_0(3).*ones(m1,n1)+(1-F_0(3)).*feval(F{3},taumax,alphaF(3),betaF(3),gammaF(3)));
% EDG 3 fails earlier, either to start or to run
Hsum3=(1-F_0(3)).*feval(f{3},taumax,alphaF(3),betaF(3),gammaF(3)); % EDG 3 is last to fail (to run)
Hsum3=Hsum3.*(F_0(1).*ones(m1,n1)+(1-F_0(1)).*feval(F{1},taumax,alphaF(1),betaF(1),gammaF(1)));
% EDG 1 fails earlier, either to start or to run
Hsum3=Hsum3.*(F_0(2).*ones(m1,n1)+(1-F_0(2)).*feval(F{2},taumax,alphaF(2),betaF(2),gammaF(2)));
% EDG 2 fails earlier, either to start or to run Hsum=Hsum1+Hsum2+Hsum3;
H=H.*Hsum;
“FTR6890.m”:
function P=FTR6890(t,mu1,cutpoint,mu2)
%cdf for a rv distributed exponentially with mean mu1 for times t <=
%cutpoint, and distributed afterward, conditionally upon exceeding cutpoint,
%exponentially with mean mu2
if t<= cutpoint P=expcdf(t,mu1);
else
P1=expcdf(cutpoint,mu1);
P=P1+(1-P1)*expcdf(t-cutpoint,mu2);
end
“FTR6890inv.m”:
function t=FTR6890inv(P,mu1,cutpoint,mu2)
%CDF for a rv distributed exponentially with mean mu1 for times t <=
%cutpoint, and distributed afterward, conditioally upon exceeding cutpoint,
%exponentially with mean mu2
Pcut=expcdf(cutpoint,mu1);
if P<=Pcut
t=expinv(P,mu1);
else
Pcut=expcdf(cutpoint,mu1);
Pexcess=(P-Pcut)/(1-Pcut);
t=cutpoint+expinv(Pexcess,mu2);
end
“FTR6890pdf.m”:
function P=FTR6890pdf(t,mu1,cutpoint,mu2)
%pdf for a rv distributed exponentially with mean mu1 for times t <=
%cutpoint, and distributed afterward, conditionally upon exceeding cutpoint,
%exponentially with mean mu2
if t<= cutpoint P=exppdf(t,mu1);
else
P1=expcdf(cutpoint,mu1);
P=(1-P1)*exppdf(t-cutpoint,mu2);
end