use crate::gridder::{Conformity, SolveOpts};
use crate::model::draw::RealizationDraw;
use crate::model::pipeline::PropertyReport;
use crate::wireframe::HorizonRole;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PopulationMode {
Priors,
Logs,
}
#[derive(Debug, Clone, PartialEq)]
pub enum BuildWarning {
UnusedHorizon {
name: String,
role: HorizonRole,
reason: String,
},
ThinColumnsRepaired {
columns: usize,
worst_m: f64,
},
LayersTruncated {
cells: usize,
},
CellsCollapsed {
cells: usize,
},
LayerCountCapped {
nk: usize,
},
}
#[derive(Debug, Clone, PartialEq)]
pub struct ZoneProvenance {
pub name: String,
pub top_horizon: String,
pub base_horizon: String,
pub conformity: Conformity,
pub nk: usize,
pub k_start: usize,
pub truncated_cells: usize,
}
#[derive(Debug, Clone, PartialEq)]
pub struct InterfaceRepair {
pub interface: usize,
pub columns: usize,
pub worst_m: f64,
}
#[derive(Debug, Clone, PartialEq)]
pub struct StackProvenance {
pub horizons: Vec<String>,
pub zones: Vec<ZoneProvenance>,
pub interface_repairs: Vec<InterfaceRepair>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct HorizonTieResidual {
pub horizon: String,
pub measured_depth_m: f64,
pub model_depth_m: f64,
pub residual_m: f64,
}
#[derive(Debug, Clone, PartialEq)]
pub struct WellTieRecord {
pub id: String,
pub x: f64,
pub y: f64,
pub ip: usize,
pub jp: usize,
pub residuals: Vec<HorizonTieResidual>,
}
#[derive(Debug, Clone)]
pub struct Provenance {
pub inputs_ref: String,
pub solve_opts: SolveOpts,
pub conformity: Conformity,
pub nk: usize,
pub population: PopulationMode,
pub realization: Option<RealizationDraw>,
pub warnings: Vec<BuildWarning>,
pub property_reports: Vec<PropertyReport>,
pub stack: Option<StackProvenance>,
pub well_ties: Vec<WellTieRecord>,
pub sugar_cube: bool,
}