Parametric Tower Facade System
A Grasshopper-driven parametric model for generating optimized facade panels with integrated structural analysis via Karamba3D. Achieved 25% material reduction through form-finding algorithms.
Computational Structural Engineer
Engineering the intersection of structural analysis, programming, and sustainability. Building digital tools and optimization-driven solutions that enhance both environmental performance and economic viability of structural systems.
Driven by a passion for computational design and sustainable engineering solutions.
Computational Structural Engineer
Killa Architectural Design • Dubai, UAE
February 2025 – Present
Graduate Engineer
Killa Architectural Design • Dubai, UAE
January 2023 – February 2025
MSc Civil Engineering: Innovative Structural Materials
University of Bath • Distinction
BEng (Hons) Civil and Environmental Engineering
Coventry University • First Class Honours
A selection of computational design projects focused on performance optimization and sustainable structural solutions.
A Grasshopper-driven parametric model for generating optimized facade panels with integrated structural analysis via Karamba3D. Achieved 25% material reduction through form-finding algorithms.
Custom optimization framework for reinforced concrete elements targeting embodied carbon reduction. Successfully implemented on B+G+46 residential building achieving ~20% carbon decrease.
Real-time visualization tool for non-linear finite element analysis results. Integrates with Kangaroo for physics-based form-finding and structural behavior simulation.
Automated workflow for generating long-term concrete deflection contours and inter-drift displacement charts from ETABS models for design review submissions.
Interactive dashboard for visualizing modal periods, participating mass ratios, and dynamic response data extracted from structural analysis models.
Intelligent rebar scheduling algorithm that optimizes reinforcement layouts for constructability while minimizing material waste and embodied carbon.
Examples of custom implementations for structural engineering workflows, featuring complex data handling and API integrations.
// ShearRow.cs - Custom data structure for shear wall analysis
public class ShearRow
{
public string WallId { get; set; }
public double Length { get; set; }
public double Thickness { get; set; }
public double ShearForce { get; set; }
public double ShearCapacity { get; set; }
public double UtilizationRatio => ShearForce / ShearCapacity;
public bool IsAdequate => UtilizationRatio <= 1.0;
}
// Custom tuple return for wall optimization results
public (double OptimalThickness, double CarbonReduction, List<ShearRow> UpdatedWalls)
OptimizeShearWalls(List<ShearRow> walls, double targetUtilization = 0.85)
{
var optimizedWalls = new List<ShearRow>();
double totalCarbonSaved = 0;
foreach (var wall in walls)
{
var optimalThickness = CalculateOptimalThickness(
wall, targetUtilization);
var carbonDelta = (wall.Thickness - optimalThickness)
* wall.Length * CarbonFactor;
totalCarbonSaved += carbonDelta;
optimizedWalls.Add(new ShearRow
{
WallId = wall.WallId,
Length = wall.Length,
Thickness = optimalThickness,
ShearForce = wall.ShearForce,
ShearCapacity = RecalculateCapacity(optimalThickness)
});
}
return (optimizedWalls.Average(w => w.Thickness),
totalCarbonSaved,
optimizedWalls);
}# etabs_processor.py - ETABS API data extraction
import comtypes.client
from dataclasses import dataclass
from typing import List, Tuple, Dict
@dataclass
class ModalPeriod:
mode_number: int
period: float
mass_participation_x: float
mass_participation_y: float
cumulative_mass_x: float
cumulative_mass_y: float
def extract_modal_data(model_path: str) -> List[ModalPeriod]:
"""Extract modal analysis results from ETABS model."""
etabs = comtypes.client.GetActiveObject("CSI.ETABS.API.ETABSObject")
sap_model = etabs.SapModel
# Get number of modes
num_modes = sap_model.Results.Modal.GetModeCount()
modal_results: List[ModalPeriod] = []
cumulative_x, cumulative_y = 0.0, 0.0
for mode in range(1, num_modes + 1):
period = sap_model.Results.Modal.GetPeriod(mode)
mass_x = sap_model.Results.Modal.GetMassParticipation(mode, 'X')
mass_y = sap_model.Results.Modal.GetMassParticipation(mode, 'Y')
cumulative_x += mass_x
cumulative_y += mass_y
modal_results.append(ModalPeriod(
mode_number=mode,
period=period,
mass_participation_x=mass_x,
mass_participation_y=mass_y,
cumulative_mass_x=cumulative_x,
cumulative_mass_y=cumulative_y
))
return modal_results
def calculate_base_shear(modal_data: List[ModalPeriod],
seismic_weight: float,
site_coefficient: float) -> Dict[str, float]:
"""Calculate design base shear per ASCE 7."""
T1 = modal_data[0].period # Fundamental period
return {
"fundamental_period": T1,
"base_shear_x": seismic_weight * site_coefficient / T1,
"base_shear_y": seismic_weight * site_coefficient / T1
}Interested in discussing computational structural engineering, optimization workflows, or potential collaborations? Feel free to reach out.