Desktop Application

GeoGrade Engine

A Python-based standalone desktop application for automated Soil Classification using the Unified Soil Classification System (USCS).

Read Published Paper
PythonTkinterSciPyMatplotlib

The Engineering Problem

Soil being a natural material can behave unpredictably as it suffers from intrinsic spatial variability. Classifying soils is one of the most essential steps in geotechnical engineering, guiding foundation design and land development. However, manual classification takes time, requires experience, and is highly prone to errors, which can negatively affect both learning environments and active fieldwork. Current automated methods are often restricted in scope or demand high computational resources.

Methodology & Benefits

GeoGrade was developed as an accessible desktop application equipped with a robust graphical user interface (GUI). It leverages conventional input data from Atterberg limits and sieve analysis to automatically calculate key metrics such as D10, D30, D60, the coefficient of uniformity (Cu), and the coefficient of curvature (Cc).

By combining technical rigor with an intuitive format, the software obviates calculation mistakes, saves critical engineering time, and improves the understanding of soil characteristics in real-time.

Interface & Visualizations

GeoGrade Sieve Analysis GUI Input

Automated Sieve Analysis

Interactive GUI for inputting total weight and retained sieve data, triggering real-time calculations without manual Excel sheets.

Grain Size Distribution Curve

Grain Size Distribution Curve

Smooth distribution plots generated using SciPy PCHIP interpolation to pinpoint D10, D30, and D60 intercepts mathematically.

USCS Plasticity Chart

USCS Plasticity Chart (ASTM D2487)

Matplotlib-powered Casagrande plasticity chart plotting Liquid Limit (LL) and Plasticity Index (PI) against the A-line and U-line for visual verification of clay vs silt classification.

Algorithmic Core

Beneath the GUI, the software uses robust root-finding and interpolation logic to extract the exact particle diameters at 10%, 30%, and 60% passing thresholds. These values are then defensively evaluated to calculate the fundamental soil coefficients required for USCS classification.

uscs_classifier.py
import numpy as np
from scipy.interpolate import pchip
import matplotlib.pyplot as plt

def analyze_soil_gradation(sieve_sizes, percent_passing):
    """
    Computes D10, D30, and D60 from Sieve Analysis data 
    using PCHIP interpolation to avoid oscillation.
    """
    # Reverse arrays to be monotonically increasing for interpolation
    x = percent_passing[::-1]
    y = sieve_sizes[::-1]
    
    interp_func = pchip(x, y)
    
    d10 = interp_func(10)
    d30 = interp_func(30)
    d60 = interp_func(60)
    
    cu = d60 / d10 if d10 > 0 else 0
    cc = (d30 ** 2) / (d10 * d60) if (d10 * d60) > 0 else 0
    
    return {'D10': d10, 'D30': d30, 'D60': d60, 'Cu': cu, 'Cc': cc}

def classify_uscs(gravel_pct, sand_pct, fines_pct, cu, cc, ll, pi):
    """
    Fundamental Boolean Logic for USCS Classification.
    """
    if fines_pct < 5:
        if gravel_pct > sand_pct:
            return "GW" if (cu >= 4 and 1 <= cc <= 3) else "GP"
        else:
            return "SW" if (cu >= 6 and 1 <= cc <= 3) else "SP"
    elif fines_pct > 12:
        if ll < 50:
            return "CL" if pi > 7 and pi >= 0.73 * (ll - 20) else "ML"
        else:
            return "CH" if pi >= 0.73 * (ll - 20) else "MH"
    else:
        # Dual symbol logic requires deeper branching
        return "Dual Symbol Required (e.g., GW-GM)"