The Dykstra-Parsons method involves plotting the frequency distribution of the permeability on a log-normal probability graph paper. This is done by arranging the permeability values in descending order and then calculating for each permeability, the percent of the samples with permeability greater than that value. to avoid values of zero or 100%, the percent greater than or equal to value is normalized by n+1, where n it is the number of samples.
# imort data
data = read.csv('C:/Users/intel/Desktop/karpur.csv')
kcore= data$k.core
depth=data$depth
summary(data)
## depth caliper ind.deep ind.med
## Min. :5667 Min. :8.487 Min. : 6.532 Min. : 9.386
## 1st Qu.:5769 1st Qu.:8.556 1st Qu.: 28.799 1st Qu.: 27.892
## Median :5872 Median :8.588 Median :217.849 Median :254.383
## Mean :5873 Mean :8.622 Mean :275.357 Mean :273.357
## 3rd Qu.:5977 3rd Qu.:8.686 3rd Qu.:566.793 3rd Qu.:544.232
## Max. :6083 Max. :8.886 Max. :769.484 Max. :746.028
## gamma phi.N R.deep R.med
## Min. : 16.74 Min. :0.0150 Min. : 1.300 Min. : 1.340
## 1st Qu.: 40.89 1st Qu.:0.2030 1st Qu.: 1.764 1st Qu.: 1.837
## Median : 51.37 Median :0.2450 Median : 4.590 Median : 3.931
## Mean : 53.42 Mean :0.2213 Mean : 24.501 Mean : 21.196
## 3rd Qu.: 62.37 3rd Qu.:0.2640 3rd Qu.: 34.724 3rd Qu.: 35.853
## Max. :112.40 Max. :0.4100 Max. :153.085 Max. :106.542
## SP density.corr density phi.core
## Min. :-73.95 Min. :-0.067000 Min. :1.758 Min. :15.70
## 1st Qu.:-42.01 1st Qu.:-0.016000 1st Qu.:2.023 1st Qu.:23.90
## Median :-32.25 Median :-0.007000 Median :2.099 Median :27.60
## Mean :-30.98 Mean :-0.008883 Mean :2.102 Mean :26.93
## 3rd Qu.:-19.48 3rd Qu.: 0.002000 3rd Qu.:2.181 3rd Qu.:30.70
## Max. : 25.13 Max. : 0.089000 Max. :2.387 Max. :36.30
## k.core Facies phi.core_frac.
## Min. : 0.42 Length:819 Min. :0.1570
## 1st Qu.: 657.33 Class :character 1st Qu.:0.2390
## Median : 1591.22 Mode :character Median :0.2760
## Mean : 2251.91 Mean :0.2693
## 3rd Qu.: 3046.82 3rd Qu.:0.3070
## Max. :15600.00 Max. :0.3630
make sort the permeability in decreasing order
sorted_k = sort(kcore,decreasing = TRUE)
head(sorted_k)
## [1] 15600.00 14225.31 13544.98 13033.53 11841.74 11117.40
n = length(sorted_k)
# find the percent for each permeability
k_percent = c(1:n)/(n+1)
summary(k_percent)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00122 0.25061 0.50000 0.50000 0.74939 0.99878
# plot best strighat line between sorted permeability and permeability percentage
mod1=lm(log10(sorted_k) ~ k_percent)
plot(k_percent, sorted_k, log="y", lwd = 2)
abline(mod1)
The Dykstra-Parsons coefficient of permeability variation (V) is determined from the graph as:
V=(k50−k84.1)/k50
k50=10^predict(mod1,data.frame(k_percent=c(0.5)))
k84.1=10^predict(mod1,data.frame(k_percent=c(0.841)))
V=(k50 - k84.1)/(k50)
print(V)
## 1
## 0.7661618
The Lorenz coefficient of permeability variation is obtained by plotting a graph of cumulative kh versus cumulative phi*h, sometimes called a flow capacity plot.
calculate the thickness from the differences in depths.
thickness = depth[2:n]-depth[1:n-1]
summary(thickness)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.5000 0.5000 0.5000 0.5086 0.5000 1.0000
thickness=append(thickness, 0.5)
ta=data.frame(data)
ta["thickness"]=thickness
j=ta[order(kcore, decreasing = TRUE),]
summary(j)
## depth caliper ind.deep ind.med
## Min. :5667 Min. :8.487 Min. : 6.532 Min. : 9.386
## 1st Qu.:5769 1st Qu.:8.556 1st Qu.: 28.799 1st Qu.: 27.892
## Median :5872 Median :8.588 Median :217.849 Median :254.383
## Mean :5873 Mean :8.622 Mean :275.357 Mean :273.357
## 3rd Qu.:5977 3rd Qu.:8.686 3rd Qu.:566.793 3rd Qu.:544.232
## Max. :6083 Max. :8.886 Max. :769.484 Max. :746.028
## gamma phi.N R.deep R.med
## Min. : 16.74 Min. :0.0150 Min. : 1.300 Min. : 1.340
## 1st Qu.: 40.89 1st Qu.:0.2030 1st Qu.: 1.764 1st Qu.: 1.837
## Median : 51.37 Median :0.2450 Median : 4.590 Median : 3.931
## Mean : 53.42 Mean :0.2213 Mean : 24.501 Mean : 21.196
## 3rd Qu.: 62.37 3rd Qu.:0.2640 3rd Qu.: 34.724 3rd Qu.: 35.853
## Max. :112.40 Max. :0.4100 Max. :153.085 Max. :106.542
## SP density.corr density phi.core
## Min. :-73.95 Min. :-0.067000 Min. :1.758 Min. :15.70
## 1st Qu.:-42.01 1st Qu.:-0.016000 1st Qu.:2.023 1st Qu.:23.90
## Median :-32.25 Median :-0.007000 Median :2.099 Median :27.60
## Mean :-30.98 Mean :-0.008883 Mean :2.102 Mean :26.93
## 3rd Qu.:-19.48 3rd Qu.: 0.002000 3rd Qu.:2.181 3rd Qu.:30.70
## Max. : 25.13 Max. : 0.089000 Max. :2.387 Max. :36.30
## k.core Facies phi.core_frac. thickness
## Min. : 0.42 Length:819 Min. :0.1570 Min. :0.5000
## 1st Qu.: 657.33 Class :character 1st Qu.:0.2390 1st Qu.:0.5000
## Median : 1591.22 Mode :character Median :0.2760 Median :0.5000
## Mean : 2251.91 Mean :0.2693 Mean :0.5085
## 3rd Qu.: 3046.82 3rd Qu.:0.3070 3rd Qu.:0.5000
## Max. :15600.00 Max. :0.3630 Max. :1.0000
# make table contain (thickness,phi.core,k.core)
ta['kh']= j$k.core * j$thickness
ta['sum_kh']=cumsum(ta['kh'])
ta['sum_kh/total']=ta['sum_kh']/ta[n, 'sum_kh']
ta['phih'] = j$phi.core * j$thickness
ta['sum_phih'] = cumsum(ta['phih'])
ta['sum_phih/total'] = ta['sum_phih']/ta[n, 'sum_phih']
plot(ta['sum_phih/total'][1:n,1], ta['sum_kh/total'][1:n,1], xlab = "fraction of total volume (phih)",
ylab = "fraction of total flow capacity (kh)")
x = c(ta['sum_phih/total'][1:n,1])
dx = x[2:n] - x[1:n-1]
y1 = c(ta['sum_kh/total'][1:n,1])[1:n-1]
y2 = c(ta['sum_kh/total'][1:n,1])[2:n]
lower_area = sum(y1*dx) #Reduce("+", y1*dx)
upper_area = sum(y2*dx) #Reduce("+", y2*dx)
AUC = (lower_area + upper_area)/2
print(AUC)
## [1] 0.7247318
calculate Lorenz coefficient as fallows:
Lorenz_coefficient = (AUC - 0.5)/0.5
print(Lorenz_coefficient)
## [1] 0.4494636