Wellbore Genius
Help
Adaptability

"Can it adapt to MY play?"

Engineers landing real jobs ask the same question: "we just won work in Saudi / Oklahoma / Vaca Muerta — is this thing flexible enough?" The honest answer is that the physics core stays the same and the play-specific knobs get layered on top as pure libraries with drift-guard tests. Below are four real asks and exactly what shipped in response, with the file paths so you can verify every claim.

Story 1 · Operator scoping a Saudi / Oman job

"We frac carbonates in the Middle East — not just sandstones. Where's the acid-frac physics?"

The problem

Most public frac simulators model proppant-bearing slickwater in sandstone. Carbonate stimulation is etched-conductivity acid frac — different physics, different design knobs (acid concentration, reaction rate, leakoff diversion).

What we shipped

Shipped a pure acid-frac design lib + UI card on the Builder Fluid Model panel. Acid concentration, reaction rate, leakoff coefficient → etched width, conductivity, live → spent ratio.

  • Per-stage acid concentration and reaction rate inputs
  • Etched-conductivity calc surfaced on the Fluid panel
  • Live ↔ spent ratio chip with severity ladder
📄 src/lib/acidFracDesign.ts·🧪 acidFracDesign.test.ts (5 drift-guard tests)Open Builder · Fluid model
Story 2 · Permitting engineer, mid-continent USA

"Oklahoma regulators want induced-seismicity numbers. Static Mohr-Coulomb isn't enough — they want rate-and-state."

The problem

Mohr slip-tendency tells you IF a fault is critical, not WHETHER slip will run away into a felt event. Rate-and-state friction (Dieterich-Ruina) is what regulators and SMU/USGS workflows use for nucleation length and instability classification.

What we shipped

Shipped a pure Dieterich-Ruina rate-and-state lib alongside the existing Mohr + fault-reactivation cards. Lab-granite defaults, critical stiffness, nucleation length, 3-way stability classifier, optional pore-pressure perturbation for injection ramps.

  • DR friction law with a, b, Dc, and ageing-vs-slip law switch
  • Nucleation length and critical stiffness closed forms
  • Strengthening / conditionally-stable / unstable classifier
📄 src/lib/rateStateFriction.ts·🧪 rateStateFriction.test.ts (10 drift-guard tests)Open Mohr / Fault tools
Story 3 · Production chemist, Permian / Bakken

"Our flowback waters scale out — barite, calcite, iron sulfide. Where's the chemistry?"

The problem

Mineral scaling plugs fracs and tubulars and is the dominant flow-assurance failure mode in produced-water-reuse operations. OLI ScaleChem and French Creek live as standalone desktop apps; nothing modern, nothing inline with your frac deck.

What we shipped

Shipped a pure thermodynamic kinetics lib for the four scales that actually plug things — calcite / barite / FeS / SiO2. Davies-extended Debye-Hückel activity, log10 Ksp at 25 °C, Arrhenius rate constants, TST sign-aware rates, French-Creek severity bands, brine mixer.

  • Saturation index with Davies-extended activity coefficients
  • TST rate r = −k·A·sgn(1−Ω^σ)·|1−Ω^σ|^n (sign-aware)
  • Conservative brine mixer for produced-water-reuse blends
📄 src/lib/scalingKinetics.ts·🧪 scalingKinetics.test.ts (10 drift-guard tests)Open Builder · Water solutes
Story 4 · Unconventional team, South America / Western Canada

"Vaca Muerta and Montney frac horizontally along bedding, not vertically. Most simulators assume one mode."

The problem

When p_treat exceeds σ_v, the fracture flips from vertical to bedding-parallel — different height-growth penalty, different conductivity behavior, different completion design. Treating every play as Bakken-vertical is wrong.

What we shipped

Shipped a two-criterion Mohr-Coulomb mode classifier with a 4-play preset catalog (Vaca Muerta / Utica / Montney / deep Bakken) and a height-growth penalty surfaced as a card at the end of the Fracture Options panel.

  • Vertical / horizontal / mixed classifier with mixed-band psi
  • Height-growth penalty: clamp(0.1 + 0.9·exp(−0.5·n), 0.1, 1)
  • Apply-preset buttons for the four reference plays
📄 src/lib/horizontalFractureBedding.ts·🧪 horizontalFractureBedding.test.ts (8 drift-guard tests)Builder → Fracture options

How extension actually works here

New physics enters as a pure TypeScript lib in src/lib/ with drift-guard tests in src/lib/__tests__/. The lib is jsdom-free, takes plain inputs, returns plain outputs — so it can be called from a server function, a worker, the Builder, or a one-off CSV export. The UI seam is usually a single card or a chip that already exists on a panel; we don't rebuild the deck. That's why a "new" ask like acid-frac or rate-and-state ships in days, not quarters: the simulator core never moves.

Have an ask we haven't shipped? See the methods scoreboard for what's already in the box, then ask. The pattern above scales.