38  Mass-volume relationships

Author

Andres Patrignani

Published

January 5, 2024

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}

# Import modules
import numpy as np
# Problem information
sample_diameter = 5.00 # cm
sample_height = 5.00 # cm
wet_mass = 180.0 # grams
dry_mass = 147.0 # grams
density_water = 0.998 # g/cm^3 at 20 Celsius
particle_density = 2.65 # g/cm^3
# Sample volume
sample_volume = np.pi * (sample_diameter/2)**2 * sample_height
print(f'Volume of sample is: {sample_volume:.0f} cm^3')
Volume of sample is: 98 cm^3
# Mass of water in the sample
mass_water = wet_mass - dry_mass
print(f'Mass of water is: {mass_water:.0f} g')
Mass of water is: 33 g
# Bulk density
bulk_density = dry_mass/sample_volume
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
f = (1 - bulk_density/particle_density)
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
theta_g = mass_water / dry_mass
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
volume_water = mass_water / density_water
theta_v = volume_water / sample_volume
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
rel_sat = theta_v/f
print(f'Relative saturation is: {rel_sat:.2f}')
Relative saturation is: 0.77
# Storage
storage_mm = theta_v * sample_height*10 # convert from cm to mm
storage_in = storage_mm/25.4 # 1 inch = 25.4 mm
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

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
field_area = 64*10_000 # 1 hectare = 10,000 m^2
profile_length = 1 # meter
equivalent_height_of_water = profile_length * theta_v # m of water
volume_of_water = field_area * equivalent_height_of_water # m^3 of water

# Use the fact that 1 m^3 = 1,000 liters
liters_of_water = volume_of_water * 1_000
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)
pool_volume = 50 * 25 * 2 # m^3
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_volume = field_area * 1 # m^3

# Since 1 Mg/m^3 = g/cm^3, we use the same value (1 Megagram = 1 metric ton)
field_mass = field_volume * bulk_density 

one_percent_mass = field_mass/100
print(f'1% of the entire field mass is {one_percent_mass:.1f} Mg')

ultra_truck_maxload = 450 # Mg or metric tons
number_of_truck_loads_required = one_percent_mass / ultra_truck_maxload
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