# Import modules
import numpy as np
38 Mass-volume relationships
Mass-volume relationships are fundamental variables for understanding and describing the soil composition in terms of the mass and volume of the main soil constituents (solids, water, air). Key variables include bulk density, which measures the mass of soil per unit volume, and porosity, indicating the volume fraction of soil that can be occupied by air and water. These relationships are crucial for assessing soil health, estimating soil fertility, and water storage. Understanding mass-volume relationships is vital for effective soil management, influencing practices like irrigation, tillage, and crop selection, ultimately impacting agricultural productivity.
Problem 1
A cylindrical soil sample with a diameter of 5.00 cm and a height of 5.00 cm has a wet mass of 180.0 g. After oven-drying the soil sample at 105 degrees Celsius for 48 hours, the sample has a dry mass of 147.0 g. Based on the provided information, calculate:
- volume of the soil sample: V_t = \pi \ r^2 \ h
- mass of water in the sample: M_{water} = M_{wet \ soil} - M_{dry \ soil}
- bulk density: \rho_b = M_{dry \ soil}/V_t
- porosity: f = 1 - \rho_b/\rho_p
- gravimetric water content: \theta_g = M_{water} / M_{dry \ soil}
- volumetric water content: \theta_v = V_{water} / V_{t}
- relative saturation: \theta_rel = \theta_v / f
- soil water storage expressed in mm and inches of water: S = \theta_v * z
Throughout the exercise, assume a particle density of 2.65 g cm^{-3} and that water has a density of 0.998 g cm^{-3}
# Problem information
= 5.00 # cm
sample_diameter = 5.00 # cm
sample_height = 180.0 # grams
wet_mass = 147.0 # grams
dry_mass = 0.998 # g/cm^3 at 20 Celsius
density_water = 2.65 # g/cm^3 particle_density
# Sample volume
= np.pi * (sample_diameter/2)**2 * sample_height
sample_volume print(f'Volume of sample is: {sample_volume:.0f} cm^3')
Volume of sample is: 98 cm^3
# Mass of water in the sample
= wet_mass - dry_mass
mass_water print(f'Mass of water is: {mass_water:.0f} g')
Mass of water is: 33 g
# Bulk density
= dry_mass/sample_volume
bulk_density print('Bulk density of the sample is:', round(bulk_density,2), 'g/cm^3')
Bulk density of the sample is: 1.5 g/cm^3
# Porosity
= (1 - bulk_density/particle_density)
f print(f'Porosity of the sample is: {f:.2f}') # Second `f` is for floating-point
Porosity of the sample is: 0.43
# Gravimetric soil mositure
# Mass of water per unit mass of dry soil. Typically in g/g or kg/kg
= mass_water / dry_mass
theta_g print(f'Gravimetric water content is: {theta_g:.3f} g/g')
Gravimetric water content is: 0.224 g/g
# Volumetric soil mositure
# Volume of water per unit volume of dry soil. Typically in cm^3/cm^3 or m^3/m^3
= mass_water / density_water
volume_water = volume_water / sample_volume
theta_v print(f'Volumetric water content is: {theta_v:.3f} cm^3/cm^3')
Volumetric water content is: 0.337 cm^3/cm^3
# Relative saturation
= theta_v/f
rel_sat print(f'Relative saturation is: {rel_sat:.2f}')
Relative saturation is: 0.77
# Storage
= theta_v * sample_height*10 # convert from cm to mm
storage_mm = storage_mm/25.4 # 1 inch = 25.4 mm
storage_in print(f'The soil water storage in mm is: {storage_mm:.1f} mm')
print(f'The soil water storage in inches is: {storage_in:.3f} inches')
The soil water storage in mm is: 16.8 mm
The soil water storage in inches is: 0.663 inches
Problem 2
How many liters of water are stored in the top 1 meter of the soil profile of a field that has an area of 64 hectares (about 160 acres)? Assume that average soil moisture of the field is the volumetric water content computed in the previous problem.
Note Recall that the volume ratio is the same as the length ratio. This means that we can use the volumetric water content to represent the ‘height of water’ in the field. If you are having trouble visualizing this fact, grab a cylindrical container and fill it with 25% of its volume in water. Then measure the height of the water relative to the height of the container, it should also be 25%. Note that this will not work for conical shapes, so make sure to grab a uniform shape like a cylinder or a cube.
# Liters of water in a field
= 64*10_000 # 1 hectare = 10,000 m^2
field_area = 1 # meter
profile_length = profile_length * theta_v # m of water
equivalent_height_of_water = field_area * equivalent_height_of_water # m^3 of water
volume_of_water
# Use the fact that 1 m^3 = 1,000 liters
= volume_of_water * 1_000
liters_of_water print(f'There are {round(liters_of_water)} liters of water')
# Compare volume of water to an Olympic-size swimming pool (50 m x 25 m x 2 m)
= 50 * 25 * 2 # m^3
pool_volume print(f'This is equivalent to {round(liters_of_water/pool_volume)} olympic swimming pools!')
There are 215557669 liters of water
This is equivalent to 86223 olympic swimming pools!
Problem 3
Imagine that we want to change the soil texture of this field in the rootzone (top 1 m). How much sand, silt, or clay do we need to haul in to change the textural composition by say 1%? While different soil fractions usually have slightly different bulk densities, let’s use the value from the previous problem. We are not looking for the exact number, we just want a ballpark idea. So, what is 1% of the total mass of the field considering the top 1 m of the soil profile?
# Field area was already in converted from hectares to m^2
= field_area * 1 # m^3
field_volume
# Since 1 Mg/m^3 = g/cm^3, we use the same value (1 Megagram = 1 metric ton)
= field_volume * bulk_density
field_mass
= field_mass/100
one_percent_mass print(f'1% of the entire field mass is {one_percent_mass:.1f} Mg')
= 450 # Mg or metric tons
ultra_truck_maxload = one_percent_mass / ultra_truck_maxload
number_of_truck_loads_required print(f'It would require the load of {number_of_truck_loads_required:.0f} trucks')
1% of the entire field mass is 9582.9 Mg
It would require the load of 21 trucks