import numpy as np
import matplotlib.pyplot as plt
import pandas as pd 
import panel as pn
pn.extension('katex') 

5. Effective K & Recitation#

  • solutions for homework problems 1 – 4

  • tutorial problems on effective conductivity and flow nets

  • homework problems on effective conductivity and flow nets

5.1. Solutions for Homework Problems 1 – 2#

5.2. Homework Problems 1#

# Given 
A = 200 # km^2, aquifer area
D_h = 1.6*0.05 # m, head decrease
S_u = 0.13 # (-), Storativity unconfined aquifer
S_c = 0.0005 # (-) Storage coefficient, confined aquifer

# interim calculation
A_m2 = A*10**6 # m^2, aquifer area unit converted

# Solution
DV_wu = A_m2*S_u*D_h # m^3, change in water volume unconfined aquifer
DV_wc = A_m2*S_c*D_h  # m^3 change in water volume unconfined aquifer

# output

print("Change in water volume in unconfined aquifer is: {0:1.1e}".format(DV_wu),"m\u00b3 \n")
print("Change in water volume in confined aquifer is: {0:1.1e}".format(DV_wc),"m\u00b3")
Change in water volume in unconfined aquifer is: 2.1e+06 m³ 

Change in water volume in confined aquifer is: 8.0e+03 m³

5.3. Homework Problem 2#

Conduct a sieve analysis for a dried soil sample (see data in the table below)

  1. Draw the granulometric curve (cumulative mass distribution) and briefly characterise the sediment with regard to its major constituent(s).

  2. What is the coefficient of uniformity?

### Head = ["mesh size [mm]", "residue in the sieve [g] ", "∑ total", "∑ / ∑total"]
Size = [6.3, 2, 0.63, 0.2, 0.063, "< 0.063 /cup"]
residue = [11, 62, 288, 189, 42, 8]


data1= {"mesh size [mm]": Size, "residue in the sieve [g] ": residue}
df1= pd.DataFrame(data1)
df1.set_index("mesh size [mm]")
residue in the sieve [g]
mesh size [mm]
6.3 11
2 62
0.63 288
0.2 189
0.063 42
< 0.063 /cup 8

5.3.1. Solution of problem 2#

# solution of problem 2

t_sample = np.sum(residue) # g, add the residue column to get total mass
retain_per = np.round(residue/t_sample *100,2) # %, # retain percentage residue/total mass
retain_per_cumsum =np.round(np.cumsum(retain_per),2) # get the cummulative sum of the reatined
passing_per = np.round(100 - retain_per_cumsum,3) # substract 100-cummsum to get passing % - the last column

data2 = {"mesh size [mm]": Size, "residue in the sieve [g]": residue, "Σtotal %": retain_per, "Σ/Σtotal %": passing_per }

df2= pd.DataFrame(data2)
df2 = df2.set_index("mesh size [mm]")
df2
residue in the sieve [g] Σtotal % Σ/Σtotal %
mesh size [mm]
6.3 11 1.83 98.17
2 62 10.33 87.84
0.63 288 48.00 39.84
0.2 189 31.50 8.34
0.063 42 7.00 1.34
< 0.063 /cup 8 1.33 0.01
# Plotting granulometric curve

plt.rcParams['axes.linewidth']=2
plt.rcParams['grid.linestyle']='--'
plt.rcParams['grid.linewidth']=1

x = np.append([20], Size[:5]) # adding for all left over.
y = np.append([100],passing_per[:5])

fig = plt.figure(figsize=(9,6));

plt.plot(x, y, 'x-', color='red', lw=2.5); 
tics=x.tolist()

plt.xscale('log');lw=2.5

plt.grid(which='major', color='k', alpha=0.7) 
plt.grid(which='minor', color='k', alpha=0.3)
plt.xticks(x, tics);  
plt.yticks(np.arange(0,110,10));

#plt.title('grain size distribution (combined wet sieving and sedimentation analysis)');
plt.xlabel('grain size d [mm]');
plt.ylabel('Cummulative Passed fraction %');

plt.annotate('', xy=(0.20, 10),  xycoords='data', xytext=(0.045, 10), arrowprops=dict(arrowstyle='->', color="b", lw=2.5),ha='right', va='top',)
plt.annotate('', xy=(1.1, 60),  xycoords='data', xytext=(0.045, 60), arrowprops=dict(arrowstyle='->', color="b", lw=2.5),ha='right', va='top',)
plt.annotate(r'$d_{60}$', xy=(1, 60),  xycoords="data", xytext=(0.85, -3),color='red',size=12, arrowprops=dict(arrowstyle='<-', color="b", lw=2.5),ha='left', va='bottom',)
plt.annotate(r'$d_{10}$', xy=(0.20, 10),  xycoords='data', xytext=(0.235, 1.5),color='red',size=12, arrowprops=dict(arrowstyle='<-', color="b", lw=2.5),ha='right', va='top',)
plt.rcParams["font.weight"] = "bold"   

plt.savefig("fig6.png", dpi=300)

mpl_pane = pn.pane.Matplotlib(fig)
../../../_images/tutorial_04_8_0.png
# From the figure
d_10 = 0.22 # mm,approx, diameter 10% passing, see the arrow bottom in x-axis
d_60 = 1.0 # mm, approx diameter 10% passing, see the arrow bottom in x-axis

c_u = d_60/d_10 # [], coefficient of uniformity

#Output
print("\n The coefficient of uniformity is: {0:1.1f}".format(c_u), "\n") 
r2_1 = pn.pane.Markdown("""
**Major constituents: coarse sand/medium sand** """, width=600, style={'font-size': '12pt', 'color': 'blue'} )
pn.Row(r2_1) 
 The coefficient of uniformity is: 4.5 

5.4. Tutorial Problems on effective conductivity#

5.4.1. Tutorial problem 11#

A sandy layer with a thickness of 2.5 m is embedded between two gravel layers. Both gravel layers have a thickness of 1.5 m and a hydraulic conductivity of 3.7·10-3 m/s. Steady-state groundwater flow is in parallel to the layering. A hydraulic gradient of 0.001 and an overall discharge of 1 m³/d per unit width have been determined.

a. Determine the effective hydraulic conductivity.

b. What is the hydraulic conductivity of the sand layer?

c. Which effective hydraulic conductivity would be obtained if flow was assumed perpendicular to the layering?

d. Calculate effective hydraulic conductivity if the angle between the flow direction and the layering equals 45°.

#Given Solution of 11 a, b

Q = 1 # m^3/d, discharge
W = 1 # m, per unit width
K_g = 3.7*1E-3# m/s, conductivity of gravel layer 
m_g = 1.5 # m, thickness of gravel layer
m_s = 2.5 # m, thickness of sand layer
Dh_L = 0.001 # (-), hydraulic gradient

#interim calculation
m = 2*m_g + m_s # m. total thickness of aquifer

#Solution of 11a
Keff_h = (Q/W)/(m*Dh_L) # m/d, conductivity
Keff_hs = Keff_h/(24*3600)# m/s, conductivity unit changed

#Solution of 11b
# K_eff = (2*m_g*K_g + m_s*K_s)/m # (Keff*m-2*m_g*K_g)/m_s

K_s = ((m*Keff_hs - 2*m_g*K_g))/m_s  # m/s cond. of sand layer

print("\n")
print("Effective horizontal hydraulic conductivity (Keff_h) = {0:1.2f}".format(Keff_h), "m/d\n" ) 
print("Effective horizontal hydraulic conductivity (Keff_hs) = {0:1.3E}".format(Keff_hs), "m/s\n" )
print("Hydraulic conductivity of sand layer (K_s) = {0:1.1E}".format(K_s), "m/s\n" )     
Effective horizontal hydraulic conductivity (Keff_h) = 181.82 m/d

Effective horizontal hydraulic conductivity (Keff_hs) = 2.104E-03 m/s

Hydraulic conductivity of sand layer (K_s) = 1.9E-04 m/s
# Solution of 11c

Keff_v = m/(2*(m_g/K_g)+ (m_s/K_s)) # m/s, conductivity K_v

#Given 
theta = 45 # theta 
theta_r = theta*(np.pi)/180 # degree to radian conversion
K_h = Keff_hs # m/s, solution from 11a
K_v = Keff_v # m/s, solution from 11c

# solution from 11d
Keff_i = 1/((np.cos(theta_r)**2/K_h)+(np.sin(theta_r)**2/K_v))

print("\n")
print("Effective horizontal hydraulic conductivity (Keff_hs) = {0:1.2E}".format(Keff_hs), "m/s\n" ) 
print("Effective vertical hydraulic conductivity (Keff_v) = {0:1.2E}".format(Keff_v), "m/s\n" ) 
print("Effective inclined hydraulic conductivity (Keff_i) = {0:1.2E}".format(Keff_i), "m/s\n" ) 
Effective horizontal hydraulic conductivity (Keff_hs) = 2.10E-03 m/s

Effective vertical hydraulic conductivity (Keff_v) = 3.93E-04 m/s

Effective inclined hydraulic conductivity (Keff_i) = 6.62E-04 m/s