Trust & bankability
WaiMAP supports bankability with evidence you can check: how each number was computed, from which data, how the engines were cross-checked, what it costs and who approved the report.
Your files
- On your computerIFC (up to about 200 MB), GeoTIFF / COG previews and point values, DXF drawings and many imports are read in your browser — the file never leaves your computer.
- On WaiMAP's calculation serverA temporary processing copy exists only while the job runs. It is deleted when the job ends (success or failure) or when you have downloaded the result — within minutes, 2 hours at most. Processed rasters come back to you as downloads.
- From your own server (URL)Give an https link (presigned S3 / R2 / Azure / GCS, WebDAV or plain https): WaiMAP reads the file from there — rasters by range requests, nothing kept. The link is not stored unless you ask WaiMAP to remember it in your project.
- What WaiMAP keepsYour project records: parameters, results and metadata (for example a patch's bounds, coordinate system, source, licence and checksum) — small data that belongs to your account.
- What WaiMAP does not keepYour source files. There is no file storage and no storage quota.
The six trust layers
What WaiMAP shows for each layer, and where to see it.
| Trust layer | What WaiMAP shows | Where |
|---|---|---|
| Engineering methodology | Every engine names its method and standard (IEC 60826 / EN 50341-1 line loads, CIGRE TB 324 change of state, IEC 60909 short circuit, pvlib ModelChain, PyWake wakes, IEC 62933 storage …) in the capability matrix and in the report sections. | Capability matrix Engines per sector |
| Data traceability | Every map layer carries its licence and attribution; reports name sources and dates; the Data Trust & Evidence register classifies inputs as measured, user-supplied, modelled, derived or assumed; Site Check shows source, licence and units per value. | Data Trust & Evidence Site Check |
| Calculation evidence | Calculation steps, inputs and intermediate results in the report and the Excel calc sheets; the analysis record keeps the inputs fingerprint and software build; the demonstrations publish the calculation summary (CSV) next to the sample report. | Project demonstrations Reports |
| Independent validation | Engine results compared with open reference tools run on the same inputs, analytic solutions, standard tables and anonymised published cases — values, differences, tool versions and dates; licensed-reference cases are listed with their band only. | Validation report Engine cross-checks below |
| Financial feasibility | Project-finance model (DSCR, LLCR, IRR, NPV, LCOE / LCOS), estimate classes with accuracy ranges, sensitivities and Monte Carlo P50 / P90 — with the unit rates and their dates. | Bankability Assessment Savings method |
| Approval status | Every report cover shows a Design status (Concept · Preliminary assessment · Feasibility (screening) · Verified design) and an Approval status (Draft · Checked · Approved · Pre-feasibility only); "Approved" needs a named approver and an explicit confirmation; issued reports can be verified by serial and SHA-256. | Report verification Reports |
Engine cross-checks
95 comparisons re-run by tools/validation_run.py (WaiMAP side from tools/validation_cases.js, reference tools on the calculation server) on 2026-10-13: 86 green, 9 amber, 0 red. 1 case(s) with a licensed reference are listed with their band only — no numbers.
All cross-checks
| Engine | Metric | Reference | WaiMAP | Reference value | Difference | Band |
|---|---|---|---|---|---|---|
| Solar PV yield (hourly simulator) | Annual AC energy | NREL PySAM Pvwattsv8 7.1.1.post1 | 17,551 MWh | 17,928 MWh | −2.10 % | Green |
| Solar PV yield (hourly simulator) | Specific yield | NREL PySAM Pvwattsv8 7.1.1.post1 | 1,755 kWh/kWp | 1,793 kWh/kWp | −2.10 % | Green |
| Solar PV yield (hourly simulator) | Performance ratio | NREL PySAM Pvwattsv8 7.1.1.post1 | 84.18 % | 87.40 % | −3.68 % | Amber |
| Solar PV yield (hourly simulator) | Annual AC energy | pvlib ModelChain (Perez, SAPM, PVWatts losses / inverter) 0.16.1 | 17,551 MWh | 18,141 MWh | −3.25 % | Amber |
| Solar PV yield (hourly simulator) | Specific yield | pvlib ModelChain (Perez, SAPM, PVWatts losses / inverter) 0.16.1 | 1,755 kWh/kWp | 1,814 kWh/kWp | −3.25 % | Amber |
| Solar PV yield (hourly simulator) | Performance ratio | pvlib ModelChain (Perez, SAPM, PVWatts losses / inverter) 0.16.1 | 84.18 % | 87.07 % | −3.32 % | Amber |
| PVWatts-method (JS) — WaiMAP's own re-implementation used as an offline second opinion | Specific yield | pvlib ModelChain (PVWatts DC / losses / inverter) 0.16.1 | 1,814 kWh/kWp | 1,814 kWh/kWp | +0.008 % | Green |
| Solar PV yield (hourly simulator) | Annual AC energy | NREL PySAM Pvwattsv8 7.1.1.post1 | 21,308 MWh | 21,708 MWh | −1.84 % | Green |
| Solar PV yield (hourly simulator) | Specific yield | NREL PySAM Pvwattsv8 7.1.1.post1 | 2,131 kWh/kWp | 2,171 kWh/kWp | −1.84 % | Green |
| Solar PV yield (hourly simulator) | Performance ratio | NREL PySAM Pvwattsv8 7.1.1.post1 | 84.89 % | 87.85 % | −3.37 % | Amber |
| Solar PV yield (hourly simulator) | Annual AC energy | pvlib ModelChain (Perez, SAPM, PVWatts losses / inverter) 0.16.1 | 21,308 MWh | 21,938 MWh | −2.87 % | Green |
| Solar PV yield (hourly simulator) | Specific yield | pvlib ModelChain (Perez, SAPM, PVWatts losses / inverter) 0.16.1 | 2,131 kWh/kWp | 2,194 kWh/kWp | −2.87 % | Green |
| Solar PV yield (hourly simulator) | Performance ratio | pvlib ModelChain (Perez, SAPM, PVWatts losses / inverter) 0.16.1 | 84.89 % | 87.44 % | −2.92 % | Green |
| PVWatts-method (JS) — WaiMAP's own re-implementation used as an offline second opinion | Specific yield | pvlib ModelChain (PVWatts DC / losses / inverter) 0.16.1 | 2,194 kWh/kWp | 2,194 kWh/kWp | +0.014 % | Green |
| Solar PV — bifacial rear side (2D infinite sheds, JS) | Rear-side gain (rear × bifaciality × structure / front) | pvlib infinite_sheds (Hay-Davies) 0.16.1 | 5.761 % | 5.757 % | +0.069 % | Green |
| Solar PV — bifacial rear side (2D infinite sheds, JS) | Annual rear-side irradiation | pvlib infinite_sheds (Hay-Davies) 0.16.1 | 177.6 kWh/m² | 177.6 kWh/m² | −0.019 % | Green |
| Solar PV — inverter clipping (Sandia model) | Inverter clipping loss (same hourly DC input) | pvlib.inverter.sandia 0.16.1 | 31.11 MWh | 31.11 MWh | +0.000 % | Green |
| Solar PV — inverter clipping (Sandia model) | Inverter clipping loss (same hourly DC input) | NREL PySAM Pvsandiainv 7.1.1.post1 | 31.11 MWh | 31.11 MWh | +0.000 % | Green |
| Solar PV — performance ratio (IEC 61724-1) | Temperature-corrected PR (25 °C) | pvlib ModelChain (Perez, SAPM cell temperature, PVWatts DC) 0.16.1 | 93.59 % | 90.93 % | +2.656 % | Amber |
| Solar PV — slope-aware backtracking (Anderson & Mikofski 2020) | Mean tracker rotation |θ| over the daylight hours (same sun angles) | pvlib.tracking.singleaxis (cross_axis_tilt) 0.16.1 | 32.75 ° | 32.75 ° | +0.000000 ° | Green |
| Solar PV — row-to-row shading on a slope | Row-to-row shaded fraction, annual sum of hourly values | pvlib.shading.shaded_fraction1d 0.16.1 | 142.0 h | 142.0 h | +0.000000 h | Green |
| Solar PV — loss diagram (PVsyst order) | Energy injected: GHI × kWp + Σ loss-diagram steps | Energy from the simulator's own hourly chain (identity check) | 22,531 MWh | 22,531 MWh | +0.000 % | Green |
| Solar PV — automatic stringing (IEC 62548-1 / NEC 690.7) | Maximum modules per string | floor(1500 / (49.5 × (1 + (−0.0025)(−10 − 25)))) | 27.00 modules | 27.00 modules | +0.000000 modules | Green |
| Solar PV — row-to-row shading on a slope | Shaded fraction of the row width | 1 − (pitch / width) · sin e / sin(e + β) | 0.3246 – | 0.3246 – | +0.000000 – | Green |
| Solar PV — tracker pile reveal and grading | Grading volume (cut + fill) | Residual 2 % slope → reveals 1.7 ± 0.72 m; excess beyond 1.2–2.2 m × 8 m × 3 m | 13.44 m³ | 13.44 m³ | +0.000 % | Green |
| Wind energy yield (hourly, Jensen wakes) | Gross AEP | PyWake 2.6.20 | 119,922 MWh | 119,922 MWh | −0.000 % | Green |
| Wind energy yield (hourly, Jensen wakes) | Wake loss | PyWake NOJ / Jensen (same k 0.075, same Ct) 2.6.20 | 3.111 % | 3.108 % | +0.002974 % | Green |
| Wind energy yield (hourly, Jensen wakes) | Net AEP (after wakes and WaiMAP's other losses) | PyWake NOJ / Jensen 2.6.20 | 106,075 MWh | 106,079 MWh | −0.004 % | Green |
| Wind energy yield (hourly, Jensen wakes) | Wake loss — wake-model sensitivity | PyWake Bastankhah & Porté-Agel Gaussian 2.6.20 | 3.111 % | 3.266 % | −0.1550 % | Green |
| Wind energy yield (hourly, Gaussian wakes) | Wake loss — Gaussian model, same settings | PyWake BastankhahGaussianDeficit (same settings) 2.6.20 | 2.713 % | 2.702 % | +0.0106 % | Green |
| Wind energy yield (hourly, Gaussian wakes) | Net AEP — Gaussian model, same settings | PyWake BastankhahGaussianDeficit (same settings) 2.6.20 | 106,511 MWh | 106,522 MWh | −0.011 % | Green |
| Wind energy yield (hourly, Gaussian wakes) | Wake loss — Gaussian model, same settings | PyWake BastankhahGaussianDeficit (same settings) 2.6.20 | 5.381 % | 5.365 % | +0.0157 % | Green |
| Wind energy yield (hourly, Gaussian wakes) | Net AEP — Gaussian model, same settings | PyWake BastankhahGaussianDeficit (same settings) 2.6.20 | 414,359 MWh | 414,426 MWh | −0.016 % | Green |
| Wind farm layout optimisation (Gaussian wakes in the loop) | Wake loss — Gaussian model, same settings | PyWake BastankhahGaussianDeficit (same settings) 2.6.20 | 1.447 % | 1.441 % | +0.005502 % | Green |
| Wind farm layout optimisation (Gaussian wakes in the loop) | Net AEP — Gaussian model, same settings | PyWake BastankhahGaussianDeficit (same settings) 2.6.20 | 215,794 MWh | 215,807 MWh | −0.006 % | Green |
| Wind MCP (long-term correction) | Regression slope recovered | Known relationship of the synthetic case | 1.101 – | 1.100 – | +0.001057 – | Green |
| Wind MCP (long-term correction) | Long-term mean wind speed at 100 m | 1.1 × reference long-term mean + 0.4 | 8.126 m/s | 8.128 m/s | −0.026 % | Green |
| Wind MCP (long-term correction) | Standard deviation of the long-term series (variance ratio) | √(1.1² σ_ref² + 0.6²) | 2.672 m/s | 2.667 m/s | +0.22 % | Green |
| Wind shear from mast heights | Power-law exponent α (60 / 100 m) | Shear imposed on the synthetic mast | 0.2000 – | 0.2000 – | +0.000001 – | Green |
| Battery dispatch (dynamic programme on state of charge) | Arbitrage margin after throughput cost (perfect foresight) | PyPSA (linopy + HiGHS) — linear-programme optimum 1.2.4 | 6,254,882 EUR / year | 6,276,665 EUR / year | −0.35 % | Green |
| Battery dispatch (dynamic programme on state of charge) | Net arbitrage revenue (sales − charging) | PyPSA (linopy + HiGHS) 1.2.4 | 6,660,623 EUR / year | 6,685,204 EUR / year | −0.37 % | Green |
| Battery dispatch (dynamic programme on state of charge) | Full-equivalent cycles | PyPSA (linopy + HiGHS) 1.2.4 | 362.5 cycles / year | 365.0 cycles / year | −0.68 % | Green |
| Battery dispatch (dynamic programme on state of charge) | Daily arbitrage margin | Closed-form two-price arbitrage | 1,589 per day | 1,589 per day | +0.000 % | Green |
| Load flow (AC Newton–Raphson) | Voltage at MV | pandapower 3.5.5 | 0.9997 pu | 0.9997 pu | −0.003 % | Green |
| Load flow (AC Newton–Raphson) | Voltage at MV | PyPSA AC power flow (n.pf()) 1.2.4 | 0.9997 pu | 0.9997 pu | −0.003 % | Green |
| Load flow (AC Newton–Raphson) | Voltage at F1 | pandapower 3.5.5 | 1.003 pu | 1.003 pu | −0.002 % | Green |
| Load flow (AC Newton–Raphson) | Voltage at F1 | PyPSA AC power flow (n.pf()) 1.2.4 | 1.003 pu | 1.003 pu | −0.002 % | Green |
| Load flow (AC Newton–Raphson) | Voltage at POI | pandapower 3.5.5 | 1.001 pu | 1.001 pu | +0.002 % | Green |
| Load flow (AC Newton–Raphson) | Voltage at POI | PyPSA AC power flow (n.pf()) 1.2.4 | 1.001 pu | 1.001 pu | +0.002 % | Green |
| Load flow (AC Newton–Raphson) | Loading of HV-L1 | pandapower 3.5.5 | 41.40 % | 41.40 % | +0.004000 % | Green |
| Load flow (AC Newton–Raphson) | Loading of MV-F1 | pandapower 3.5.5 | 84.80 % | 84.80 % | +0.001000 % | Green |
| Load flow (AC Newton–Raphson) | Loading of T1 | pandapower 3.5.5 | 79.60 % | 79.50 % | +0.0990 % | Green |
| Load flow (AC Newton–Raphson) | Network losses | pandapower 3.5.5 | 0.8413 MW | 0.8413 MW | +0.005 % | Green |
| Load flow (AC Newton–Raphson) | Network losses | PyPSA AC power flow (n.pf()) 1.2.4 | 0.8413 MW | 0.8413 MW | +0.005 % | Green |
| Short circuit (IEC 60909-0) | Ik″ max at MV | pandapower IEC 60909 3.5.5 | 16.83 kA | 16.83 kA | +0.000 % | Green |
| Short circuit (IEC 60909-0) | Ik″ max at F1 | pandapower IEC 60909 3.5.5 | 13.86 kA | 13.86 kA | +0.013 % | Green |
| Short circuit (IEC 60909-0) | Ik″ max at 33 kV | IEC 60909-0 by hand (ohms at 33 kV, KT correction) | 13.85 kA | 13.85 kA | +0.000 % | Green |
| Short circuit (IEC 60909-0) | Ik″ max at 33 kV | pandapower IEC 60909 3.5.5 | 13.85 kA | 13.85 kA | +0.000 % | Green |
| Short circuit (IEC 60909-0) | Peak current ip at 33 kV | pandapower IEC 60909 3.5.5 | 36.81 kA | 36.81 kA | +0.000 % | Green |
| Sag-tension (state-change equation) | Sag at 75 °C | Exact catenary-length iteration (independent code) | 8.530 m | 8.530 m | −0.003 % | Green |
| Sag-tension (state-change equation, tension section) | Horizontal tension, minimum temperature (initial) | Independent Python implementation (exact catenary + elastic strain integral) worker 1.0.0 | 33.09 kN | 33.10 kN | −0.018 % | Green |
| Sag-tension (state-change equation, tension section) | Horizontal tension, extreme wind (initial) | Independent Python implementation (exact catenary + elastic strain integral) worker 1.0.0 | 51.71 kN | 51.68 kN | +0.054 % | Green |
| Sag-tension (state-change equation, tension section) | Horizontal tension, ice (initial) | Independent Python implementation (exact catenary + elastic strain integral) worker 1.0.0 | 38.73 kN | 38.72 kN | +0.014 % | Green |
| Sag-tension (state-change equation, tension section) | Sag at the ruling span, ice (final, after creep) | Independent Python implementation (exact catenary + elastic strain integral) worker 1.0.0 | 9.980 m | 9.982 m | −0.019 % | Green |
| Sag-tension (state-change equation, tension section) | Sag at the ruling span, maximum operating temperature (final, after creep) | Independent Python implementation (exact catenary + elastic strain integral) worker 1.0.0 | 12.60 m | 12.61 m | −0.007 % | Green |
| Conductor ampacity (IEEE 738 steady state) | Ampacity at 75 °C | linerate IEEE738 model 5.0.0 | 721.3 A | 721.6 A | −0.029 % | Green |
| Conductor ampacity (IEEE 738 steady state) | Ampacity at 100 °C | linerate IEEE738 model 5.0.0 | 977.1 A | 977.3 A | −0.028 % | Green |
| Optimum tower spotting (dynamic programming) | Minimum total tower cost | Exhaustive enumeration of every feasible tower sequence (same constraints) | 233,929 USD | 233,929 USD | +0.000000 USD | Green |
| Optimum tower spotting (dynamic programming) | Minimum total tower cost | Exhaustive enumeration of every feasible tower sequence (same constraints) | 194,067 USD | 194,067 USD | −0.0100 USD | Green |
| Water network solver (Global Gradient Algorithm) | Pressure at the junction with the largest difference (5) | WNTR / EPANET 2.2 toolkit 1.5.0 | 33.80 m | 33.80 m | −0.000347 m | Green |
| Storm sewer routing | Outfall peak flow | PySWMM / EPA SWMM 5 2.2.0 | 860.3 L/s | 862.0 L/s | −0.19 % | Green |
| Mass haul optimisation (transportation problem) | Optimal haul cost | OR-Tools SimpleMinCostFlow 9.15.6755 | 21,148,723 cost units | 21,148,723 cost units | +0.000 % | Green |
| Steam properties (IAPWS-IF97) | Specific enthalpy h | CoolProp (IF97 backend) 8.0.0 | 3,375 kJ/kg | 3,375 kJ/kg | +0.000 % | Green |
| Steam properties (IAPWS-IF97) | Specific enthalpy h | CoolProp (IF97 backend) 8.0.0 | 1,337 kJ/kg | 1,337 kJ/kg | +0.000 % | Green |
| Hydrogen storage density | Density | CoolProp (reference equation of state) 8.0.0 | 24.00 kg/m³ | 23.99 kg/m³ | +0.001 % | Green |
| Steam properties (IAPWS-IF97) | Region 1 specific enthalpy h (3 MPa, 300 K) | IAPWS R7-97(2012) verification values | 115.3 kJ/kg | 115.3 kJ/kg | +0.000 % | Green |
| Steam properties (IAPWS-IF97) | Region 1 specific volume v (3 MPa, 300 K) | IAPWS R7-97(2012) verification values | 0.001002 m³/kg | 0.001002 m³/kg | +0.000 % | Green |
| Steam properties (IAPWS-IF97) | Region 2 specific enthalpy h (0.0035 MPa, 300 K) | IAPWS R7-97(2012) verification values | 2,550 kJ/kg | 2,550 kJ/kg | +0.000 % | Green |
| GeoTIFF reader | Sum of all valid cells | GDAL (reference rasters written by rasterio 1.5 / GDAL 3.12) 3.12 | 197,224 elevation units | 197,224 elevation units | +0.000 % | Green |
| GeoTIFF reader | Sum of all valid cells | GDAL (reference rasters written by rasterio 1.5 / GDAL 3.12) 3.12 | 92,002 elevation units | 92,002 elevation units | +0.000 % | Green |
| GeoTIFF reader | Sum of all valid cells | GDAL (reference rasters written by rasterio 1.5 / GDAL 3.12) 3.12 | 92,002 elevation units | 92,002 elevation units | +0.000 % | Green |
| GeoTIFF reader | Sum of all valid cells | GDAL (reference rasters written by rasterio 1.5 / GDAL 3.12) 3.12 | 1,047,224 elevation units | 1,047,224 elevation units | +0.000 % | Green |
| GeoTIFF reader | Sum of all valid cells | GDAL (reference rasters written by rasterio 1.5 / GDAL 3.12) 3.12 | 92,002 elevation units | 92,002 elevation units | +0.000 % | Green |
| GeoTIFF reader | Sum of all valid cells | GDAL (reference rasters written by rasterio 1.5 / GDAL 3.12) 3.12 | 164,456,000 elevation units | 164,456,000 elevation units | +0.000 % | Green |
| Point-cloud ground filter (SMF) | Ground recall | Known ground truth of the synthetic terrain | 99.98 % | 100.0 % | −0.020 % | Green |
| Wind energy yield (Weibull, synthetic power curve) | Per-turbine gross energy | Published study of a low-wind plain wind farm (anonymised) | 21.15 GWh / year | 20.09 GWh / year | +5.28 % | Amber |
| Project finance model | Project IRR | Published feasibility study (anonymised) | 10.69 % | 10.30 % | +0.3875 % | Green |
| Project finance model | LCOE at 10 % discount | Published feasibility study (anonymised) | 88.00 USD/MWh | 88.06 USD/MWh | −0.066 % | Green |
| Project finance model | LCOE at 5 % discount | Published feasibility study (anonymised) | 70.19 USD/MWh | 70.76 USD/MWh | −0.80 % | Green |
| Run-of-river hydropower | Annual energy (study method) | Feasibility study of a run-of-river scheme (anonymised) | 48.75 GWh | 49.30 GWh | −1.11 % | Green |
| Run-of-river hydropower — parametric BoQ | EPC cost | EPC bill of quantities (anonymised) | 114.8 USD m | 123.3 USD m | −6.86 % | Amber |
| Substation estimator | EPC price per MVA | Awarded public-utility tender (anonymised) | 53,661 USD/MVA | 53,000 USD/MVA | +1.25 % | Green |
| Substation estimator | Turnkey EPC price | Turnkey offer (anonymised) | 19.83 USD m | 17.60 USD m | +12.66 % | Amber |
| Solar PV yield (hourly simulator) | Specific yield | Commercial satellite-data yield assessment (anonymised) | not published | licensed data | — | Green |
| Project document intake (rule-based extraction) | Parameters extracted correctly | Known parameter list of the test report | 31.00 count | 31.00 count | +0.000 % | Green |
Full report with cases, tolerances, sources and dates: validation report (also JSON). A matching cross-check shows that a method is implemented correctly; on its own it does not make a project ready for financing.
Measured calculation time
Real engine operations timed with tools/benchmarks/run_benchmarks.py — 20 repetitions after a warm-up run. These are the only performance figures on this website.
| Operation | Engine | Workload | Median | p95 | Runs | Theoretical series throughput |
|---|---|---|---|---|---|---|
| Sag-tension of one tension section | WaiLineMech.sagTension (JavaScript in Node) | 10 spans 380–420 m, ACSR Cardinal, 6 load cases (EDS, minimum temperature, extreme wind, ice, ice + wind, maximum temperature), initial and final (creep) | 0.04 ms | 0.30 ms | 100 | 81,818,181 tension sections / hour, one process (theoretical) |
| Lattice tower structure check | PyNiteFEA 3D frame through the worker (fem_frame) — model from WaiFEM.latticeTower | Typical square lattice suspension tower: 46 nodes, 178 members, 1 load combinations; displacements, member forces, EN 1993-1-1 style utilisation | 1.92 s | 1.93 s | 5 | 1,875 towers / hour, one process (theoretical) |
| 10 km line section — spotting and mechanics | WaiLineMech.design (JavaScript in Node) | 400 kV, triple ACSR Cardinal, 2 OPGW, one 30° angle point, level profile at 50 m stations: simple spotting, sag-tension per tension section, clearance, tower loads, quantities | 2.1 ms | 4.3 ms | 20 | 1,753,531 10 km sections / hour, one process (theoretical) |
| 10 km line section — optimum tower spotting | WaiLineMech.optimise (JavaScript in Node) | The same 10 km: dynamic programming over candidate stations every 25 m × tower types × extensions, exact weight / wind spans, clearance per tension section (alternatives off) | 259 ms | 299 ms | 10 | 13,908 10 km sections / hour, one process (theoretical) |
| Yearly PV yield (8,760 hours) | pvlib ModelChain through the worker (pv_yield) | 50 MWp fixed tilt, hourly clear-sky year generated in the call, PVWatts DC / AC, SAPM cell temperature, physical AOI | 174 ms | 202 ms | 20 | 20,686 yearly yields / hour, one process (theoretical) |
| Load flow + short circuit of a sample grid | pandapower through the worker (grid_loadflow) | 50 MW plant: 3 MV feeders, main transformer, 10 km HV line, external grid; Newton-Raphson load flow and IEC 60909 | 319 ms | 384 ms | 20 | 11,274 load flows / hour, one process (theoretical) |
| Atlas point sample (all installed layers) | worker atlas.point (rasterio on the atlas COGs) | 17 installed atlas COGs (solar, wind, population, built-up 1975–2030, flood) read at one point, warm file cache | 60 ms | 63 ms | 20 | 60,022 points / hour, one process (theoretical) |
| IFC structure read of the sample model | IfcOpenShell + worker cadbim.ifc_structure | WaiMAP sample IFC 4.3 model (6 KB): open, units, storeys, rooms, element classes, checks | 0.67 ms | 0.81 ms | 20 | 5,349,182 models / hour, one process (theoretical) |
- HardwareIntel(R) Xeon(R) Processor @ 2.80GHz · 2 cores · 7.8 GB RAM · Linux 6.18.44-fc-v114
- Date2026-10-12 23:10 UTC
- Softwarepython 3.13.16 · node v22.22.0 · pvlib 0.16.1 · pandapower 3.5.5 · numpy 2.4.6 · rasterio 1.5.2 · ifcopenshell 0.9.0 · pandas 2.3.3 · PyNiteFEA 3.2.0
- ConditionsBuild machine (container), one process, operations run sequentially; one warm-up run per operation excluded; local files only, no network; browser engines timed in Node (same code as in the browser), Python engines called as functions of the calculation server (no HTTP). sag_tension runs 5 × N times.
- Re-run
WAIMAP_ATLAS_DIR=<atlas folder> python tools/benchmarks/run_benchmarks.py -n 20· raw data: benchmarks.json
Approval status on every report
Approval status
- DraftThe default. Nobody has checked the report yet.
- CheckedNeeds the checker's name, printed on the cover.
- ApprovedNeeds the approver's name and an explicit confirmation; it is the issuing organisation's approval — not a lender's or an independent engineer's.
- Pre-feasibility onlyThe report may only be used for pre-feasibility decisions (the demonstrations use this).
Design status and verification
- Design statusConcept · Preliminary assessment · Feasibility (screening) · Verified design (only with a named reviewer and an explicit mark).
- Report levelScreening, feasibility-grade or bankability readiness by plan — stated on the cover.
- VerificationIssued reports carry a serial; with verification active, a QR code lets the reader check the file's SHA-256 on /verify.
See also Bankability & Data Trust (evidence register, readiness levels) and the savings method.
WaiMAP