πŸŒͺ️ Overview

AEROTICA is an open-source, multi-parameter framework for the systematic characterization, real-time mapping, and predictive modeling of atmospheric kinetic energy at urban, regional, and continental scales. The system integrates nine analytically independent parameters into a single operational composite β€” the Atmospheric Kinetic Efficiency (AKE) index β€” validated across 3,412 meteorological station-years from 24 national networks spanning 35 countries and 6 climate zones.

βœ… Production Ready

AEROTICA achieves 96.2% AKE classification accuracy against high-fidelity Large Eddy Simulation benchmarks. The framework is actively used for offshore wind optimization, gust pre-alerting, and building-integrated wind energy assessment.

Key Capabilities

  • High Accuracy: 96.2% AKE classification accuracy across 3,412 station-years
  • Gust Prediction: Β±28 second gust timing precision with 4-6 minute pre-alert lead time
  • PINN Speed: 93.8% agreement with LES at <90 seconds per site computation
  • Urban Bias Correction: 18.7% legacy atlas underestimation corrected at 40-80m height
  • Offshore Improvement: 34% wake model improvement vs. Jensen model (0.41 m/s RMSE)
  • Building-Integrated Wind: 180 GWh/year harvestable across 3 case study cities

System Statistics

AKE Classification Accuracy

96.2%

vs. LES benchmarks, 3,412 station-years

Gust Timing Precision

Β±28s

1,247 severe wind events

PINN Inference Speed

<90s

Per 50Γ—50 km domain

Economic Benefit

€124M

Casablanca Β· 287Γ— ROI

Quick Navigation

πŸ’» Installation

System Requirements

  • Python: 3.11 or higher
  • PyTorch: 2.3 or higher (for PINN inference)
  • RAM: 8 GB minimum (16 GB recommended for full dataset)
  • Storage: ~10 GB for reference data + model weights; 80 GB for full validation dataset
  • CUDA: 11.8+ optional (GPU acceleration for PINN training)
  • GDAL: 3.6+ (for LiDAR and geospatial processing)
  • NetCDF4: 1.7+ (for atmospheric data formats)

Install from PyPI

pip install aerotica-ake

Install from GitLab

# Clone the repository git clone https://gitlab.com/gitdeeper07/aerotica.git cd aerotica # Create conda environment (recommended) conda env create -f environment.yml conda activate aerotica # Install Python package in editable mode pip install -e ".[dev,pinn,docs,dashboard]" # Pre-trained PINN weights (via DVC) dvc remote add -d zenodo https://zenodo.org/record/aerotica2026 dvc pull models/pinn_v1/ # ~4 GB dvc pull data/reference/ # ~6 GB # Run tests to verify installation pytest tests/unit/ -v

Docker

docker pull registry.gitlab.com/gitdeeper07/aerotica:latest docker run --gpus all --rm \ -v $(pwd)/data:/workspace/data \ aerotica:latest python scripts/compute_ake.py --help
⚠️ Note

The full validation dataset (80 GB) requires additional storage. The reference package (10 GB) is sufficient for most applications.

πŸš€ Quick Start

1

Compute a Single Parameter

2

Assemble the AKE Index

3

Classify and Generate Report

1 Β· Compute KED for a Site

from aerotica.parameters import KED # Instantiate with wind speed time series ked = KED(wind_speed_series="data/processed/anemometer/site_casablanca.csv", height_m=60.0, site_type="urban_complex") score = ked.compute() # β†’ float in [0, 1] bias_flag = ked.urban_bias() # β†’ legacy atlas bias estimate uncertainty = ked.uncertainty() # β†’ Β± value report = ked.report() # β†’ diagnostic dict print(f"KED = {score:.3f} Β± {uncertainty:.3f}") # KED = 0.791 Β± 0.024 print(f"Urban bias: {bias_flag:.1f}%") # Urban bias: 18.7%

2 Β· Compute the AKE Composite Index

from aerotica.ake import AKEComposite ake = AKEComposite(site_id="casablanca_port_zone", climate_zone="arid", site_type="urban_coastal") ake.load_parameters({ "KED": 0.831, "TII": 0.764, "VSR": 0.892, "AOD": 0.341, "THD": 0.723, "PGF": 0.651, "HCI": 0.589, "ASI": 0.712, "LRC": 0.445, }) result = ake.compute() print(result.score) # β†’ 0.724 print(result.classification) # β†’ "VIABLE" print(result.gust_risk) # β†’ "ELEVATED" print(result.confidence) # β†’ 0.94

3 Β· Gust Pre-Alert System

from aerotica.alerts import GustPreAlertEngine import pandas as pd engine = GustPreAlertEngine( pinn_model="models/pinn_v1/", site_config="configs/casablanca_urban.yaml" ) obs = pd.read_csv("data/realtime/casablanca_current.csv") alert = engine.evaluate(obs) if alert.triggered: print(f"⚠️ GUST PRE-ALERT") print(f" Lead time: {alert.lead_minutes:.1f} min") print(f" Predicted gust: {alert.gust_speed_ms:.1f} m/s") print(f" Confidence: {alert.confidence:.1%}")

πŸ”¬ The Nine AKE Parameters

Each parameter captures a physically orthogonal dimension of atmospheric kinetic energy variability. Weights were determined through a three-stage Bayesian principal component analysis across all 3,412 station-years.

#SymbolParameterWeightDomainKey Instrument
1KEDKinetic Energy Density22%Wind Resource AssessmentSonic anemometer Β· LIDAR
2TIITurbulence Intensity Index16%Structural FatigueSonic anemometer (20 Hz)
3VSRVertical Shear Ratio14%Offshore WindMulti-height met mast
4AODAerosol Optical Depth12%Arid MeteorologyMODIS Β· AERONET
5THDThermal Helicity Dynamics10%Gust PredictionDoppler radar Β· Radiosonde
6PGFPressure Gradient Force8%Synoptic MeteorologyERA5 reanalysis
7HCIHumidity-Convection Interaction7%Tropical MeteorologyRadiosonde Β· GPS
8ASIAtmospheric Stability Integration6%Nocturnal Jet DynamicsRadiosonde Β· ERA5
9LRCLocal Roughness Coefficient5%Urban AerodynamicsLiDAR Β· GIS

Composite Formula

// Atmospheric Kinetic Efficiency β€” Composite Formula AKE = 0.22 Β· KED* // Kinetic Energy Density + 0.16 Β· TII* // Turbulence Intensity Index + 0.14 Β· VSR* // Vertical Shear Ratio + 0.12 Β· AOD* // Aerosol Optical Depth + 0.10 Β· THD* // Thermal Helicity Dynamics + 0.08 Β· PGF* // Pressure Gradient Force + 0.07 Β· HCI* // Humidity–Convection Interaction + 0.06 Β· ASI* // Atmospheric Stability Integration + 0.05 Β· LRC* // Local Roughness Coefficient // Under missing data: weights renormalized to unity // Accuracy remains > 88% with KED + at least 3 of {TII, VSR, AOD, THD}
πŸ“˜ Normalization

All parameters are normalized to [0,1] relative to climate-zone-specific reference distributions. This ensures that an arid desert and a temperate forest are evaluated against their own reference states, not against each other.

πŸ“Š AKE Classification Levels

The AKE score is mapped to five operational classification levels that guide wind energy development, hazard monitoring, and grid protection decisions.

πŸ”΅ PREMIUM
> 0.85
🟒 VIABLE
0.70 – 0.85
🟑 MARGINAL
0.55 – 0.70
🟠 CONSTRAINED
0.40 – 0.55
⚫ BENIGN
< 0.40
ClassAKE RangeOperational StateRecommended Action
PREMIUM> 0.85Maximum harvestable resource, peak gust hazardPriority wind development + full alerting
VIABLE0.70 – 0.85Strong resource, manageable turbulence loadsStandard wind development + monitoring
MARGINAL0.55 – 0.70Below bankable threshold, site-specific potentialDetailed site survey before development
CONSTRAINED0.40 – 0.55Limited resource, elevated turbulence riskBuilding-integrated micro-harvest only
BENIGN< 0.40Negligible kinetic energy resourceNo wind development Β· structural monitoring

🧠 Physics-Informed Neural Network

The computational core of AEROTICA is a Physics-Informed Neural Network that learns to represent the atmospheric wind field as a continuous function satisfying the Navier-Stokes equations β€” not by solving them on a grid, but by embedding their residuals directly in the training loss function.

Architecture Overview

// Three coupled networks β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Velocity Network U(x,y,z,t) β†’ (u, v, w) β”‚ β”‚ Pressure Network P(x,y,z,t) β†’ p β”‚ β”‚ Temperature Network T(x,y,z,t) β†’ ΞΈ β”‚ β”‚ 8-layer backbone Β· 512 neurons Β· Fourier features β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ // Loss function L_total = Ξ±Β·L_data + Ξ²Β·L_NS + Ξ³Β·L_BC + δ·L_IC // Navier-Stokes residual ρ(βˆ‚u/βˆ‚t + uΒ·βˆ‡u) = βˆ’βˆ‡p + ΞΌβˆ‡Β²u + ρg + F_Coriolis + F_buoyancy // Training: 72 GPU-hours on 8Γ— NVIDIA A100 // Inference: < 2 GPU-seconds per 30-second forecast cycle // Domain: 50 km Γ— 50 km Γ— 2 km Β· 10 m / 5 m resolution

Performance

Training Time

72h

8Γ— NVIDIA A100

Inference

<2s

Per 30-second forecast

LES Agreement

93.8%

vs. Large Eddy Simulation

Cloud Cost

$0.003

Per site per day

πŸ“‘ API Reference

aerotica.parameters β€” Individual Parameter Modules

All nine parameter classes share a common interface:

from aerotica.parameters import KED, TII, VSR, AOD, THD, PGF, HCI, ASI, LRC # Unified interface β€” same for all 9 parameters p = KED(wind_speed_series="...") # instantiate p.compute() # β†’ float [0,1] p.uncertainty() # β†’ float (Β± value) p.report() # β†’ dict (full diagnostics) p.plot() # β†’ matplotlib Figure

aerotica.ake β€” Composite Index Engine

from aerotica.ake import AKEComposite, AKEWeights, AKETHRESHOLDS # AKEComposite ake = AKEComposite(site_id="casablanca", climate_zone="arid", site_type="urban_coastal") ake.load_parameters(param_dict) # dict of 9 raw scores result = ake.compute() # β†’ AKEResult namedtuple result.score # float result.classification # str: PREMIUM / VIABLE / … result.gust_risk # str: SEVERE / HIGH / MODERATE / LOW result.confidence # float [0,1] # AKEWeights β€” Bayesian weights weights = AKEWeights(climate_zone="temperate") weights.get_weights() # β†’ dict of weights # AKETHRESHOLDS β€” classification thresholds thresh = AKETHRESHOLDS(climate_zone="arid") thresh.classify(0.724) # β†’ "VIABLE"

aerotica.pinn β€” Physics-Informed Neural Network

from aerotica.pinn import AeroticaPINN # Load pre-trained model pinn = AeroticaPINN.from_pretrained("models/pinn_v1/", climate_zone="temperate", device="cuda") # Infer 3D wind field wind_field = pinn.infer( surface_obs="data/realtime/surface_obs.nc", radiosonde="data/realtime/radiosonde.nc", radar="data/realtime/radar.nc", aod_field="data/realtime/modis_aod.nc", ) wind_field.u # 3D array of u-velocity wind_field.ake_map # 2D AKE surface map wind_field.plot() # β†’ matplotlib Figure

aerotica.alerts β€” Gust Pre-Alert Engine

from aerotica.alerts import GustPreAlertEngine engine = GustPreAlertEngine( pinn_model="models/pinn_v1/", site_config="configs/casablanca_urban.yaml" ) # Real-time evaluation alert = engine.evaluate(observations_df) if alert: print(f"Lead time: {alert.lead_time_seconds}s") print(f"Gust speed: {alert.gust_speed_ms} m/s") # Dispatch notifications engine.dispatch(alert, recipients=["grid_ops", "port_ops"])

aerotica.urban β€” Building-Integrated Wind Assessment

from aerotica.urban import BuildingWindAssessor assessor = BuildingWindAssessor( lidar_dem="data/lidar/casablanca_2m_dsm.tif", climate_ref="data/reference/climatology.nc" ) # Identify viable rooftop locations viable_sites = assessor.identify_sites(ake_threshold=0.75) print(f"Viable locations: {len(viable_sites)}") viable_sites.to_geojson("results/viable_sites.geojson")

aerotica.offshore β€” Offshore Wind Optimization

from aerotica.offshore import OffshoreOptimizer optimizer = OffshoreOptimizer( site_latitude=55.0, site_longitude=-3.0, water_depth=50, n_turbines=100, area_bounds=((0, 10000), (0, 10000)) ) optimizer.setup(years=[2020,2021,2022,2023,2024]) optimizer.create_initial_layout("staggered") results = optimizer.optimize_layout(n_iterations=200) print(f"AEP: {results['final']['aep_mwh']} MWh") optimizer.generate_report("results/offshore_report/")

βš™οΈ Snakemake Workflows

All analyses are reproducible via Snakemake. The master pipeline automatically determines which rules to run based on available inputs.

Run Full Validation Pipeline

# Full pipeline β€” requires complete dataset (~96h on 32-core HPC) snakemake --cores 32 --use-conda all # Reproduce publication figures only snakemake --cores 8 figures # Single case study snakemake --cores 4 results/case_studies/casablanca/ # Dry run β€” preview without executing snakemake --cores 32 --use-conda --dry-run all

Available Rules

Rule FileDescriptionInputsOutputs
preprocessing.smkStation, radiosonde, radar preprocessingdata/raw/data/processed/
parameter_computation.smkCompute all 9 parameter scores per sitedata/processed/data/processed/parameters/
ake_aggregation.smkNormalize and aggregate AKE indexdata/processed/parameters/data/processed/ake_scores/
pinn_training.smkTrain PINN modelsdata/processed/models/
validation.smkCross-validation, sensitivity, uncertaintydata/processed/ake_scores/results/validation/

πŸ—„οΈ Data & Formats

Supported Input Formats

ParameterFormatSourceTypical Size
KED, TII (anemometer)CSV, NetCDF4NOAA ISD Β· ECA&D10–100 MB per station
VSR (profiles)NetCDF4, BUFRIGRA Β· ERA55–50 MB per site
AOD (satellite)HDF4, NetCDF4MODIS Β· VIIRS100 MB per granule
THD (radar)NetCDF4, HDF5EUMETNET OPERA50–200 MB per scan
PGF (reanalysis)NetCDF4, GRIBERA5 Β· GDAS1–5 GB per month
HCI (radiosonde)NetCDF4, CSVIGRA<1 MB per profile
ASI (stability)NetCDF4ERA5Derived from PGF
LRC (LiDAR)GeoTIFF, LASUSGS 3DEP0.5–5 GB per city

Output Formats

# AKE score output (CSV) site_id, timestamp, KED, TII, VSR, AOD, THD, PGF, HCI, ASI, LRC, AKE, classification, gust_risk, confidence # GeoJSON output (for spatial analysis) { "type": "Feature", "properties": { "site_id": "casablanca", "AKE": 0.724, "classification": "VIABLE", "gust_risk": "ELEVATED" } }

🏭 Applications

Offshore Wind Farm Optimization

AEROTICA's wake modeling and resource assessment modules achieve 97.1% AKE classification accuracy offshore, with 34% improvement over the Jensen wake model (RMSE 0.41 m/s vs. 0.62 m/s).

# Optimize turbine layout python scripts/offshore_optimize.py \ --site "North Sea Alpha" \ --lat 55.5 --lon 2.5 \ --depth 50 \ --n-turbines 100 \ --area 100

Urban Gust Pre-Alerting

THD-driven gust detection achieves 4-6 minute lead time with probability of detection 0.886 and false alarm rate 0.114. Annual economic benefit of €124M in Casablanca (287Γ— ROI).

# Real-time gust monitoring python scripts/gust_prealert.py \ --site "casablanca" \ --interval 30 \ --config configs/casablanca_urban.yaml

Building-Integrated Wind Energy

2-meter resolution LiDAR + LRC parameter identifies 180 GWh/year harvestable urban wind across 3 case study cities.

# Assess urban wind potential python scripts/urban_assessment.py \ --lidar data/lidar/tokyo_2m.tif \ --threshold 0.75 \ --output results/tokyo_assessment/

βœ… Validation & Reproducibility

Cross-Validation Protocol

AEROTICA uses a leave-one-climate-zone-out cross-validation design: the model is trained on 5 climate zones and evaluated on the held-out 6th. This tests generalization across entirely different atmospheric regimes.

Overall Accuracy

96.2%

3,412 station-years

Best Zone

97.3%

Arid (Sahara, Gobi)

Worst Zone

94.7%

High Altitude (Andes, Himalayas)

CV Variation

3.1%

Across 6 climate zones

Gust Timing Validation

Timing Precision

Β±28s

1,247 severe wind events

Probability of Detection

0.886

Casablanca (214 days)

False Alarm Rate

0.114

Casablanca (214 days)

Lead Time

4–6 min

Before conventional detection

Reproducing All Results

# Reproduce all paper results (requires full dataset) snakemake --cores 32 --use-conda all # Reproduce specific table from paper python scripts/generate_figures.py --table 2 # AKE accuracy table python scripts/generate_figures.py --fig 4 # Gust timing distribution # Environment hash (reproducibility verification) # sha256:c7a3f82... verified on Ubuntu 22.04 Β· CUDA 11.8

πŸ• Changelog

v1.0.0
Feb 2026

Initial Release

Full nine-parameter AKE framework, PINN architecture, gust pre-alerting engine, urban and offshore modules. Validated across 3,412 station-years from 35 countries. Paper submitted to npj Climate and Atmospheric Science.

v0.9.0
Jan 2026

Beta Release

Complete parameter suite, Bayesian weight determination, basic PINN implementation. Internal validation across North Sea and Casablanca datasets.

v0.5.0
Oct 2025

Alpha β€” Core Framework

KED, TII, VSR modules functional. Proof-of-concept AKE composite. Initial 800-station dataset from European networks.

πŸ“„ Publications

πŸ“˜ Primary Reference

If you use AEROTICA in your research, please cite the primary paper using the BibTeX entry below.

@article{baladi2026aerotica, title = {{AEROTICA}: An Intelligent Computational Framework for Atmospheric Kinetic Energy Mapping and Aero-Elastic Resilience}, author = {Baladi, Samir}, journal = {npj Climate and Atmospheric Science}, year = {2026}, doi = {10.14293/AEROTICA.2026.001}, note = {Submitted June 2026} }

πŸ™ Acknowledgments

The AEROTICA framework builds upon the foundational work of the global atmospheric science community. Special thanks to:

  • NOAA National Centers for Environmental Information (ISD, IGRA)
  • ECMWF Copernicus Climate Change Service (ERA5 reanalysis)
  • NASA Goddard Space Flight Center (MODIS AOD products)
  • EUMETNET OPERA Radar Network
  • Japan Meteorological Agency (AMeDAS network)
  • Direction de la MΓ©tΓ©orologie Nationale du Maroc (Casablanca validation)
  • Hornsea Project One, Hollandse Kust Noord, and Borssele Alpha offshore wind farms
  • The Ronin Institute for supporting independent scholarship

πŸ‘€ Author & Principal Investigator

πŸŒͺ️

Samir Baladi

Interdisciplinary AI Researcher

πŸ“§ gitdeeper@gmail.com

πŸ“ž +1 (614) 264-2074

πŸ†” 0009-0003-8903-0029

Ronin Institute / Rite of Renaissance

About the Author

Samir Baladi is an independent interdisciplinary researcher working at the intersection of artificial intelligence, earth system science, and complex systems modeling. Affiliated with the Ronin Institute β€” a global institution that supports rigorous scholarship outside the boundaries of traditional academic departments β€” his work rests on a single conviction: that the most consequential scientific breakthroughs of the 21st century will come not from deeper specialization, but from principled integration across disciplines that have long developed in parallel without sufficient communication.

Research Focus

  • Atmospheric Physics: Physics-Informed Neural Networks for kinetic energy mapping
  • Fluid Dynamics: Turbulence modeling, wake effects, and aero-elastic resilience
  • Multi-Parameter AI: Bayesian integration of heterogeneous data streams
  • Earth System Science: Cross-domain transfer learning (ocean ↔ atmosphere)

The Rite of Renaissance

AEROTICA is the fourth and final framework in the Rite of Renaissance series β€” a planetary monitoring architecture with a common computational language:

β˜„οΈ METEORICA

Extraterrestrial materials Β· Solar system formation

🌿 BIOTICA

Terrestrial ecosystem resilience Β· IBR index

🌊 ABYSSICA

Deep ocean kinetic energy Β· Biogeochemical cycling

πŸŒͺ️ AEROTICA

Atmospheric kinetic energy Β· Aero-elastic resilience

Long-term Vision: GAIA

The long-term scientific ambition is their integration into GAIA (Global Anthropic Intelligence Architecture): a continuously updated, AI-generated assessment of the coupled state of the entire Earth system in near-real time. Currently in scoping phase (2027 β†’).

"Each framework is not merely a tool. It is a language β€” a principled, reproducible, open-source vocabulary for reading a different dimension of the physical world. AEROTICA is the language of the wind."

↑