KJLabs Simulators · CompliSpec

Grain dust moves through ducts. We model where it goes.

Engineering simulation and code-compliance tools for grain handling and dust-collection systems. Bring in the CAD and the duct layout and get a stress or airflow answer with its source attached. Where the inputs run out, the tools stop and say so.

Built by a working mechanical engineer and a software architect, and tested against the engineer's own field jobs.

ProjectKJLabs Simulators + CompliSpec
DisciplineMechanical · Air handling
DomainGrain & feed facilities
UnitsCFM · FPM · in. w.g.
SolversOpen source, headless
Engineering leadKevin J. Lund
ArchitectureWilliam B. Lund
StatusIn active development · pilot in use
A

Why it exists

Dust collection in grain handling is a safety system. Most of the sizing still happens in spreadsheets and rules of thumb.

The hazard

Grain dust still explodes

In 2025 the U.S. still had 7 grain dust explosions, killing 4 people and injuring 10 (Purdue University), including one each in Minnesota and Nebraska.

The rulebook

Codes differ by place

OSHA 29 CFR 1910.272 sets the federal baseline for grain handling. State air, fire and licensure rules sit on top of it and change from one state to the next.

The gap

The math and the paperwork live apart

Duct sizing, structural checks and code requirements are usually separate tasks. These tools keep them in one place and connect each result to its source.

B

Detail views

Real screens from the working app. Sample geometry only; no customer data.

VIEW B13D duct designer: cyclone collector, duct run through an isolation valve and an elbow into an exhaust fan, with airflow particlesOpen full view →

Interactive 3D duct designer

Lay out a dust-collection run from the filter outlet: straights, elbows with editable centerline radius, reducers, wyes, isolation valves and fans in 3D. The full view plays the airflow through the run. Each branch is sized for transport velocity, and fitting losses come from cited ACGIH tables. The family tree shows CFM, FPM and velocity pressure for every duct.

VIEW B2Finite element stress contour on an L-shaped bracket with a gusset, deformed shape over the grey undeformed outlineOpen full view →

CAD to stress, headless

A STEP or Onshape part is meshed in Gmsh and solved in CalculiX, then rendered as a von Mises plot. The deformed shape is drawn over the undeformed one so you can see how the part moves.

VIEW B3CAD face picker: a 3D view of a rectangular part with colored faces and an axis gizmoOpen full view →

Pick the faces, not a guess

Inspect a model's real CAD faces, then click to set fixed and loaded faces, or place round load patches. The app shows the node counts before you solve.

VIEW B4Duct airflow simulator with inputs for flow rate, static head and duct size, results for velocity pressure and friction loss, and a particle flow visualization with a transport-velocity warningOpen full view →

Airflow and loss simulator

Enter flow rate, duct size and run length to get velocity, velocity pressure and friction loss, plus a warning when grain dust would drop out of the airstream. An OpenFOAM run backs it up.

VIEW B5Filter flame vent visualizer, plan view of a round filter with a vented fireball cone and keep-clear circleOpen full view →

Explosion-vent planning view

For a site walk: see where a filter's explosion vent points relative to buildings and egress, with an estimated fireball and keep-clear zone. It is labelled as illustrative and is not a stamped design.

C

What the ecosystem does

Two products on one engineering core.

KJLabs · Ducts

Dust-collection design

3D duct layout, branch sizing at transport velocity, pickup airflow worksheets, fitting losses from cited tables, and layouts saved and reloaded with every branch kept.

KJLabs · FEA

Structural checks from CAD

STEP, STL or Onshape in, mesh and solve, then a rendered stress plot. Materials range from steel and aluminum to 3D-print plastics for fixtures and prototypes.

KJLabs · CFD

Fan and cyclone quick-look

A same-day screening run for "will this fan or cyclone do the job", built on local OpenFOAM and kept separate from full studies.

KJLabs · Grain

Bin aeration duty point

Published university grain-resistance data crossed with a fan curve to find the operating point, with the source cited next to the answer.

CompliSpec

Requirements as code

Each jurisdiction's rules are stored as structured requirements. Minnesota's snow-load rule reaches a real pass/fail against a structural solve. Nebraska's elevator inspection rule renders as a checklist.

CompliSpec

Regulatory registers

Sourced registers of workplace-safety, air-permit, fire-code and engineer-licensure rules for California, Oregon, Arizona, U.S. federal, international and the PE pathway. Each entry is marked verified or still under research.

Training

Training film & demo book

A click-by-click flip book of real captured screens, short clips, and live flowcharts. It doubles as the operating manual and the customer demo.

AI-assisted

Chat to 3D model

Turn an AI design chat or a script into a 3D model, then send it straight into a stress solve. The AI drafts the model and the solver computes the stresses.

CalculiX · FEACode_Aster · FEAElmer · FEAFreeFEM · FEAOpenFOAM · CFDCode_Saturne · CFDGmsh · meshOnshape · CAD

Every solver above was run on a known reference case and checked against the expected answer before it was listed.

D

How it works

Process flowcharts, simplified from the app's own training charts.

Start Engineer action Decision Result Refuses to guess

D1 · The ecosystem

Full view & walkthrough →
flowchart LR
  subgraph IN[Inputs]
    CAD([CAD: Onshape, STEP, STL]):::start
    FIELD([Field markups and site notes]):::start
    CHAT([AI design chat]):::start
  end
  subgraph KJ[KJLabs Simulators]
    FEA[FEA pipeline]:::act
    DUCT[3D duct designer]:::act
    AIR[Airflow and loss simulator]:::act
    FEAS[Fan and cyclone quick-look]:::act
  end
  subgraph SOLVE[Open-source solvers]
    S1[CalculiX, Code_Aster, Elmer, FreeFEM]:::res
    S2[OpenFOAM, Code_Saturne]:::res
  end
  subgraph CS[CompliSpec]
    REQ[Requirements as code]:::act
    CHK{Can the rule be checked?}:::dec
  end
  CAD --> FEA
  CHAT --> FEA
  FIELD --> DUCT
  FEA --> S1
  AIR --> S2
  FEAS --> S2
  DUCT --> AIR
  S1 --> REQ
  DUCT --> REQ
  REQ --> CHK
  CHK -->|yes| PF[Pass or fail with source]:::res
  CHK -->|procedural| CL[Inspection checklist]:::res
  CHK -->|inputs missing| NC[Not computable: says what is missing]:::warn
  classDef start fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#1e1b4b
  classDef act fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#0f172a
  classDef dec fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#422006
  classDef res fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#052e16
  classDef warn fill:#fee2e2,stroke:#dc2626,stroke-width:2px,color:#450a0a

D2 · Design a dust-collection run

Full view & walkthrough →
flowchart TD
  S([Start at the filter or cyclone outlet]):::start --> A[Append straights, elbows, reducers]:::act
  A --> W{Need a branch?}:::dec
  W -->|yes| WY[Drop in a wye and pick its side and angle]:::act
  WY --> SZ[Size the branch for transport velocity]:::act
  SZ --> P[Attach pickups at each hood]:::act
  W -->|no| P
  P --> Q{Is each pickup's airflow known?}:::dec
  Q -->|yes| FAM[Family tree totals CFM, FPM and velocity pressure per duct]:::res
  Q -->|no| HELP[Airflow worksheet: displacement, entrainment, hood capture]:::act
  HELP --> Q
  FAM --> L{Is the fitting in a cited loss table?}:::dec
  L -->|yes| LOSS[System loss with table reference]:::res
  L -->|no| NC[Loss left unresolved and flagged]:::warn
  LOSS --> SAVE[Save the layout or export geometry for CFD]:::res
  classDef start fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#1e1b4b
  classDef act fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#0f172a
  classDef dec fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#422006
  classDef res fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#052e16
  classDef warn fill:#fee2e2,stroke:#dc2626,stroke-width:2px,color:#450a0a

Checked against a real job: within 3% on a redacted real two-pickup dust system (smooth-elbow method; per-component losses still differ).

D3 · From CAD part to stress plot

Full view & walkthrough →
flowchart LR
  S([Part from Onshape, STEP or STL]):::start --> M[Choose material]:::act
  M --> F{How are supports and loads placed?}:::dec
  F -->|quick| AX[Axis band: min end fixed, max end loaded]:::act
  F -->|precise| PK[Click real CAD faces or place round load patches]:::act
  AX --> PV[Preview node counts]:::act
  PK --> PV
  PV --> MS[Mesh with Gmsh]:::act
  MS --> SV[Solve with CalculiX]:::act
  SV --> LOG{Did the solver log converge?}:::dec
  LOG -->|yes| PNG[Rendered stress plot and saved example]:::res
  LOG -->|no| FIX[Read the log, fix supports, mesh or material]:::warn
  FIX --> MS
  classDef start fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#1e1b4b
  classDef act fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#0f172a
  classDef dec fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#422006
  classDef res fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#052e16
  classDef warn fill:#fee2e2,stroke:#dc2626,stroke-width:2px,color:#450a0a

D4 · How a release ships

Full view & walkthrough →
flowchart LR
  K([Engineer's markup or field request]):::start --> C[Change the design tool]:::act
  C --> T[Automated tests check real geometry and node graph]:::act
  T --> TC[Truth checks: every public number has a source]:::act
  TC --> G{All green?}:::dec
  G -->|no| C
  G -->|yes| LIVE[Walk it live the way the engineer clicks]:::act
  LIVE --> MK{Matches the original markup?}:::dec
  MK -->|no| C
  MK -->|yes| REL[Release with changelog]:::res
  classDef start fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#1e1b4b
  classDef act fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#0f172a
  classDef dec fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#422006
  classDef res fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#052e16
E

Design engineering in practice

The work behind this project, sorted by the skills a mechanical design engineer uses every day.

SkillWhere it shows up here
Fact-based concept evaluationEvery number is tied to a cited table, a solver log or a validation case. When an input is missing, the tool reports "not computable" instead of guessing.
3D CAD and modelsSTEP, STL and Onshape geometry feed meshing and FEA directly. The duct designer builds its own 3D geometry and exports it for CFD.
Engineering calculationsVelocity pressure, Darcy-Weisbach friction, ACGIH fitting losses, branch balance, pickup airflow, fan duty points, explosion-vent planning estimates.
Prototype and validateSolvers are checked against textbook and reference cases. Duct losses are compared with a real installed system, and 3D-printed test fixtures are modeled before printing.
Standards and specificationsOSHA 29 CFR 1910.272, ACGIH ventilation practice, NFPA combustible-dust standards, state rules stored as code, and sourced regulatory registers.
Grain systems and material handlingDust collection at transfer points, bucket elevator and conveyor pickups, cyclones and filters, bin aeration.
Technical documentationA training film, a demo book, live flowcharts and step-by-step guides, all checked against the real screens.
Working with customersField markups, texts and voice notes feed a review queue. Each release is checked against the engineer's original markup, not a summary of it.
Continuous improvementVersioned releases with a public changelog, automated regression tests, and an audit cycle that rechecks status claims.
F

Who is behind it

Manufacturing Engineer · engineering lead & product owner

Kevin J. Lund

Sets the engineering requirements from real grain-handling and dust-collection work. He marks up each release, reviews the physics, and supplied the field job used to validate duct losses. The tools are built around the way he designs.

Email
kjlund95@gmail.com
Phone
904-250-4010
Lead designer · architect · Wabble LLC

William B. Lund

Designs the software, the solver orchestration and the compliance data model. He runs the build process, in which AI coding agents drive open-source solvers under strict evidence rules.

Email
wblund@wabblellc.com
Phone
904-537-9549

Never fabricate

AI agents generate input decks and read solver logs. They never invent a stress, a velocity or a convergence result.

Cite or flag

A value without a source is either removed or labelled as an estimate that still needs checking.

Redact real jobs

Customer jobs appear only in redacted form, with no company, people, site or order identifiers.