Abstract
A nanocomponent is a collection of atoms arranged in a definite pattern in order to achieve a desired function with an acceptable performance and reliability. Types of atoms, the manner in which they are arranged within the nanocomponent, and their inter-relationships have a direct effect on the nanocomponent’s reliability and its failure. This article, proposed a general method using the notion of a copula to model the inter-relationships between the atoms of a nanocomponent and then assess the reliability or probability of failure of the nanocomponent under different structures. This approach is refered to as a “zoom-out” approach. The proposed method is very flexible and it is very easy to implement. This article considers a nanocomponent at a fixed moment of time, say the present moment, and assumes that the present status of a nanocomponent depends on the present status of its atoms.
Appendix
R codes for calculating the probability of failure
################# Parallel structures #################
## probability of failure for a parallel structure
## p0: common probability of failure for each atom
## th0: dependence parameter between each atom and its hidden factor
## d: number of atoms
pd = function(p0, th0, d)
{
(1-p0)*(th0^d)*(p0^d) + p0*((th0*p0+1-th0)^d)
} # end of the function
## probability of failure of a parallel structure
## u: a vector of probabilities of failure; these probabilities can be different
## th0: dependence parameter between each atom/nano-subcomponent
## and its hidden factor
pd_diffp0 = function(u, th0)
{
d = length(u)
neg = which(u<0)
if( length(neg) > 0 ) {u = u[-neg]}
d = length(u)
if(d < 1){stop(''No avaliable u!!, =====> d = '', d, ''\n'')}
uu = c(1, sort(u, T), 0)
uth = th0*uu + 1 - th0
add = NULL
for(i in 1:(d+1))
{
tem1 = uu[i] - uu[i+1]
tem2 = th0^(d-i+1)
tem3 = prod(uth[1:i])
tem4 = prod(u) / prod(uu[1:i])
add[i] = tem1 * tem2 * tem3 * tem4
}
sum(add)
} # end of the function
################# Series structures #################
## probability of failure for a series structure
## p0: common probability of failure for each atom
## th0: dependence parameter between each atom and its hidden factor
## d: number of atoms
## If d = 0, return -1
ppd = function(p0, th0, d)
{
dd = 1:d
tem1 = sapply(dd, function(x){ (1-p0)*((th0*p0)^x) + p0*((th0*p0+1-th0)^x) } )
tem2 = sapply(dd, function(x){ choose(d, x)*( (-1)^{x+1} ) } )
out = sum( tem1*tem2 )
out
} # end of the function
## probability of failure for a series structure
## u: a vector of probabilities of failure; these probabilities can be different
## th0: dependence parameter between each atom/nano-subcomponent
## and its hidden factor
ppd_diffp0 = function(u, th0)
{
neg = which(u<0)
if( length(neg) > 0 ) {u = u[-neg]}
d = length(u)
if(d < 1){ return(-1)}
add = sum(u)
if(d >= 2)
{
for(i in 2:d)
{
com = combn(1:d, i)
ncom = length(com[1,])
for(j in 1:ncom)
{
uu_temp = u[com[,j]]
add = add + pd_diffp0(uu_temp, th0)*( (-1)^{i+1} )
}
}
}
add
} # end of the function
################# Sample a nanocomponent with 50 atoms #################
set.seed(1221)
nm = 4 # nanometers
nanox = runif(50)*nm
nanoy = runif(50)*nm
Ngrid = 4
xinx = as.integer( (nanox/nm) / (1/Ngrid))+1
yinx = as.integer((nanoy/nm) / (1/Ngrid))+1
grp = (yinx-1)*Ngrid + xinx
## number of atoms in each 1st stage nano-subcomponent
n1 = NULL
for(i in 1:Ngrid^2)
{
n1[i] = length(which(grp == i))
}
## assign group numbers for each 4 1st stage nano-subcomponents
grp1 = NULL
for(i in 1:Ngrid^2)
{
grp1[i] = (as.integer(as.integer((i-1)/Ngrid)/2))*(Ngrid/2)
+ (as.integer((i-1)/2))%%(Ngrid/2)+1
}
## calculate probability of failure for three different structures
## 1. parallel; 2. series; 3. series-parallel
## p0: common probability of failure for each atom
## th0, th1, th2: dependence parameters for the three steps
prob.failure = function(p0, th0, th1, th2)
{
probcell1 = sapply(n1, function(x){ pd(p0, th0, x) } )
probcell1_series = sapply(n1, function(x){ ppd(p0, th0, x) } )
od = order(grp1, 1:(Ngrid^2)) # reorder to construct
# the 2nd stage nano-subcomponent
pgrid = probcell1[od]
pgrid_series = probcell1_series[od]
NNN = ((Ngrid^2)/4)
uu1_series = uu1 = matrix(0, NNN, 4)
for(i in 1:NNN)
{
uu1[i,] = pgrid[((i-1)*4+1):(i*4)]
uu1_series[i,] = pgrid_series[((i-1)*4+1):(i*4)]
}
probcell2 = probcell2_series = probcell2_series_parallel = NULL
for(i in 1:NNN)
{
probcell2[i] = pd_diffp0(uu1[i,], th1)
probcell2_series[i] = ppd_diffp0(uu1_series[i,], th1)
probcell2_series_parallel[i] = pd_diffp0(uu1_series[i,], th1)
}
prob.parallel = pd_diffp0(probcell2, th2)
prob.series = ppd_diffp0(probcell2_series, th2)
prob.series.parallel = pd_diffp0(probcell2_series_parallel, th2)
return(list(prob.parallel = prob.parallel, prob.series = prob.series,
prob.series.parallel = prob.series.parallel ))
} # end of the function
################# Do the calculation #################
> prob.failure(0.01, 0.3, 0.7, 0.99)
$prob.parallel
[1] 2.058032e-13
$prob.series
[1] 0.2336215
$prob.series.parallel
[1] 1.077729e-12
Additional information
Notes on contributors
Nader Ebrahimi
Nader Ebrahimi received his Ph.D. degree from Iowa State University, Ames, Iowa. He is a Professor of statistics in the Division of Statistics at Northern Illinois University, DeKalb. He works in the areas of reliability theory and survival analysis, information theoretic statistics and modeling and applications in Hardware, nano, and software engineering, and medical sciences.
Lei Hua
Lei Hua is currently Assistant Professor at the Division of Statistics at the Northern Illinois University. Dr. Hua received his PhD degree in Statistics in 2012 from the University of British Columbia, and he does research in multivariate non-Gaussian theory and applications, which include dependence modeling, extreme value theory, and quantitative risk management. Dr. Hua is also Associate of the Society of Actuaries.