1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//! **Well placement, surface picks, and trajectories** — turning a structural
//! picture into wells: seeded locations, a surface top at each well (plus a
//! residual mispick), and a survey trajectory.
//!
//! **World frame is the default posture.** Every input here is a *world*
//! coordinate — the extent / polygon a well is placed in, the `lattice` a top is
//! sampled from, the `wellhead_xy` a bore starts at — so the outputs land in the
//! world too. A fictional world origin (431000/6521000-style) is built with
//! [`Georef`](crate::synth::Georef); there is no separate local frame.
//!
//! - [`place_wells`] / [`place_wells_in_polygon`] — seeded uniform-random well
//! heads inside a rectangular extent or an arbitrary polygon (rejection
//! sampling).
//! - [`tops_from_surface`] — bilinear-sample a surface at each well and add a
//! drawn residual (a [`Sampler`](crate::sampling::Sampler) — a `±10 m` uniform,
//! a normal mispick, …).
//! - [`synth_trajectory`] — a **vertical** well survey (constant `xy`, `MD == TVD`,
//! `INCL = AZIM = 0`), the unchanged default.
//! - [`synth_trajectory_profile`] — a **directional** well survey following a
//! believable [`WellProfile`] (`Vertical` | [`BuildHold`] | [`BuildHoldDrop`]):
//! kick off at a depth, build to a hold inclination at a believable rate, hold
//! (and optionally drop back) on a target azimuth. Stations are placed by the
//! **minimum-curvature** relation between adjacent angle pairs, so a deviated
//! bore sweeps real world `x/y` and crosses many areal columns at reservoir
//! depth.
//!
//! This is trajectory **synthesis** (we author the analytic inclination/azimuth
//! schedule, then place stations consistent with it) — *not* survey
//! interpretation (reconstructing a path from a measured, noisy survey), which is
//! petekIO's job. The two share the minimum-curvature geometry; only synthesis
//! lives here.
//!
//! No third-party code was consulted.
pub use ;
pub use tops_from_surface;
pub use ;