Mechanical engineering fundamentals including statics, dynamics, machine design, heat transfer, fluid mechanics, and manufacturing processes
When designing mechanical systems, analyzing structural behavior, calculating thermal performance, or specifying manufacturing requirements for mechanical components.
import math
from dataclasses import dataclass
from typing import Tuple
@dataclass
class Material:
name: str
yield_strength: float # MPa
ultimate_strength: float # MPa
elastic_modulus: float # GPa
poisson_ratio: float
ALUMINUM_6061 = Material(
name="Aluminum 6061-T6",
yield_strength=276,
ultimate_strength=310,
elastic_modulus=68.9,
poisson_ratio=0.33
)
def calculate_bending_stress(
moment: float,
section_modulus: float
) -> float:
"""Calculate bending stress from bending moment."""
return moment / section_modulus
def calculate_torsional_shear_stress(
torque: float,
polar_moment: float
) -> float:
"""Calculate torsional shear stress."""
return torque / polar_moment
def combined_stress_analysis(
normal_stress: float,
shear_stress: float,
yield_strength: float,
factor_of_safety: float = 2.0
) -> Tuple[float, bool]:
"""Analyze combined stress using von Mises criterion."""
von_mises = math.sqrt(
normal_stress**2 + 3 * shear_stress**2
)
allowable = yield_strength / factor_of_safety
return von_mises, von_mises <= allowable
# Example: Shaft under combined loading
moment = 500e3 # N-mm
torque = 300e3 # N-mm
section_modulus = 5000 # mm³
polar_moment = 10000 # mm⁴
sigma = calculate_bending_stress(moment, section_modulus)
tau = calculate_torsional_shear_stress(torque, polar_moment)
vm_stress, is_safe = combined_stress_analysis(
sigma, tau, ALUMINUM_6061.yield_strength
)
print(f"Bending stress: {sigma:.2f} MPa")
print(f"Shear stress: {tau:.2f} MPa")
print(f"Von Mises stress: {vm_stress:.2f} MPa")
print(f"Design safe: {is_safe}")
from dataclasses import dataclass
from typing import Optional
@dataclass
class ThermalProperties:
thermal_conductivity: float # W/(m·K)
specific_heat: float # J/(kg·K)
density: float # kg/m³
COPPER = ThermalProperties(
thermal_conductivity=401,
specific_heat=385,
density=8960
)
def conduction_heat_transfer(
k: float,
A: float,
dT: float,
thickness: float
) -> float:
"""Calculate heat transfer through conduction."""
return k * A * dT / thickness
def convective_heat_transfer(
h: float,
A: float,
T_surface: float,
T_fluid: float
) -> float:
"""Calculate heat transfer from convection."""
return h * A * (T_surface - T_fluid)
def thermal_resistance_network(
R_conv: float,
R_cond: float
) -> float:
"""Calculate total thermal resistance."""
return R_conv + R_cond
def heat_sink_design(
power_dissipation: float,
T_ambient: float,
T_junction_max: float,
R_jc: float,
R_cs: float
) -> dict:
"""Design heat sink for power dissipation."""
R_sa_max = (T_junction_max - T_ambient) / power_dissipation - R_jc - R_cs
return {
"max_sink_thermal_resistance": R_sa_max,
"junction_temp_estimate": T_ambient + power_dissipation * (R_jc + R_cs + R_sa_max)
}
# Example: Electronic heat sink
power = 50 # W
T_amb = 25 # °C
T_junction_max = 125 # °C
R_junction_to_case = 0.5 # °C/W
R_case_to_sink = 0.1 # °C/W
result = heat_sink_design(power, T_amb, T_junction_max, R_junction_to_case, R_case_to_sink)
print(f"Maximum sink resistance: {result['max_sink_thermal_resistance']:.2f} °C/W")
print(f"Estimated junction temperature: {result['junction_temp_estimate']:.1f} °C")
from dataclasses import dataclass
from typing import Tuple
import math
@dataclass
class GearParameters:
module: float # mm
num_teeth: int
face_width: float # mm
pressure_angle: float # degrees
material_strength: float # MPa
def calculate_pitch_diameter(module: float, num_teeth: int) -> float:
"""Calculate gear pitch diameter."""
return module * num_teeth
def calculate_center_distance(
d1: float,
d2: float
) -> float:
"""Calculate gear center distance."""
return (d1 + d2) / 2
def lewis_bending_stress(
Ft: float,
b: float,
m: float,
Y: float
) -> float:
"""Calculate bending stress using Lewis formula."""
return Ft / (b * m * Y)
def calculate_dynamic_load(
Ft: float,
V: float,
Kv: float = 1.0
) -> float:
"""Calculate dynamic load on gear teeth."""
return Ft * Kv * (1 + V / 20)
def gear_ratio(driven: int, driver: int) -> float:
"""Calculate gear ratio."""
return driven / driver
# Example: Spur gear design
driver_teeth = 20
driven_teeth = 40
module = 2.5 # mm
face_width = 20 # mm
transmitted_load = 500 # N
lewis_form_factor = 0.32
pitch_diameter = calculate_pitch_diameter(module, driver_teeth)
ratio = gear_ratio(driven_teeth, driver_teeth)
stress = lewis_bending_stress(transmitted_load, face_width, module, lewis_form_factor)
print(f"Pitch diameter: {pitch_diameter:.2f} mm")
print(f"Gear ratio: {ratio:.2f}")
print(f"Bending stress: {stress:.2f} MPa")
def reynolds_number(
rho: float,
V: float,
L: float,
mu: float
) -> float:
"""Calculate Reynolds number for flow regime."""
return rho * V * L / mu
def darcy_weisbach_loss(
f: float,
L: float,
D: float,
V: float,
g: float = 9.81
) -> float:
"""Calculate head loss using Darcy-Weisbach equation."""
return f * (L / D) * (V**2 / (2 * g))
def bernoulli_equation(
p1: float,
V1: float,
z1: float,
p2: float,
V2: float,
z2: float,
g: float = 9.81,
rho: float = 1000
) -> float:
"""Apply Bernoulli's equation between two points."""
return (p1/rho + V1**2/(2*g) + z1) - (p2/rho + V2**2/(2*g) + z2)
def pipe_diameter_flow(
Q: float,
V: float
) -> float:
"""Calculate pipe diameter from flow rate and velocity."""
return (4 * Q / (math.pi * V))**0.5
# Example: Water flow in pipe
flow_rate = 0.01 # m³/s
velocity = 2.0 # m/s
pipe_length = 100 # m
friction_factor = 0.02
diameter = pipe_diameter_flow(flow_rate, velocity)
head_loss = darcy_weisbach_loss(friction_factor, pipe_length, diameter, velocity)
print(f"Required pipe diameter: {diameter*1000:.2f} mm")
print(f"Head loss: {head_loss:.3f} m")
from enum import Enum
from dataclasses import dataclass
class ManufacturingProcess(Enum):
CNC_MACHINING = "CNC Machining"
CASTING = "Casting"
FORGING = "Forging"
ADDITIVE_MANUFACTURING = "Additive Manufacturing"
SHEET_METAL = "Sheet Metal Forming"
INJECTION_MOLDING = "Injection Molding"
@dataclass
class PartRequirements:
material: str
quantity: int
tolerance: float # mm
surface_finish: float # Ra
complexity: float # 1-10
batch_size: str # prototype, low, medium, high
def select_manufacturing_process(
requirements: PartRequirements
) -> ManufacturingProcess:
"""Select optimal manufacturing process based on requirements."""
if requirements.batch_size == "prototype":
if requirements.complexity > 7:
return ManufacturingProcess.ADDITIVE_MANUFACTURING
return ManufacturingProcess.CNC_MACHINING
elif requirements.batch_size == "low":
if requirements.tolerance < 0.05:
return ManufacturingProcess.CNC_MACHINING
return ManufacturingProcess.CASTING
elif requirements.batch_size == "medium":
if requirements.complexity > 5:
return ManufacturingProcess.INJECTION_MOLDING
return ManufacturingProcess.CASTING
else: # high volume
if requirements.material in ["aluminum", "plastic"]:
return ManufacturingProcess.INJECTION_MOLDING
return ManufacturingProcess.FORGING
# Example: Process selection
part = PartRequirements(
material="aluminum",
quantity=10000,
tolerance=0.1,
surface_finish=1.6,
complexity=4,
batch_size="high"
)
process = select_manufacturing_process(part)
print(f"Recommended process: {process.value}")