gea-program 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. gea/BENCH_TEST_PROTOCOL.md +97 -0
  2. gea/IMPORT_RECORD.md +61 -0
  3. gea/__init__.py +160 -0
  4. gea/__main__.py +661 -0
  5. gea/acceptance_tests.py +1315 -0
  6. gea/accuracy_statement.py +181 -0
  7. gea/alarm_engine.py +307 -0
  8. gea/bench.py +144 -0
  9. gea/blind_harness.py +108 -0
  10. gea/case_study.py +229 -0
  11. gea/catalog/acex_lomonosov_age_depth_model.provenance.json +23 -0
  12. gea/catalog/acex_lomonosov_age_depth_model.txt +28 -0
  13. gea/catalog/agassiz77_canada_temperature.csv +68 -0
  14. gea/catalog/agassiz77_canada_temperature.provenance.json +17 -0
  15. gea/catalog/barbados_110_consolidation.provenance.json +24 -0
  16. gea/catalog/barbados_110_consolidation.txt +91 -0
  17. gea/catalog/bengal_u1452_grain_size.provenance.json +20 -0
  18. gea/catalog/bengal_u1452_grain_size.txt +252 -0
  19. gea/catalog/blake_164_methane_isotopes.provenance.json +22 -0
  20. gea/catalog/blake_164_methane_isotopes.txt +68 -0
  21. gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +23 -0
  22. gea/catalog/chicxulub_m0077a_pwave_velocity.txt +735 -0
  23. gea/catalog/collingwood_1_28_ks_complete.las +128 -0
  24. gea/catalog/collingwood_1_28_ks_complete.provenance.json +17 -0
  25. gea/catalog/costa_rica_odp_friction_envelope.provenance.json +24 -0
  26. gea/catalog/costa_rica_odp_friction_envelope.txt +57 -0
  27. gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +21 -0
  28. gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +94 -0
  29. gea/catalog/dsdp_504b_physical_properties.provenance.json +24 -0
  30. gea/catalog/dsdp_504b_physical_properties.txt +82 -0
  31. gea/catalog/dsdp_504b_sound_velocity.provenance.json +21 -0
  32. gea/catalog/dsdp_504b_sound_velocity.txt +81 -0
  33. gea/catalog/elgygytgyn_5011_turbidites.provenance.json +20 -0
  34. gea/catalog/elgygytgyn_5011_turbidites.txt +193 -0
  35. gea/catalog/epica_domec_co2_800kyr.provenance.json +21 -0
  36. gea/catalog/epica_domec_co2_800kyr.txt +265 -0
  37. gea/catalog/fram_909_organic_petrography.provenance.json +22 -0
  38. gea/catalog/fram_909_organic_petrography.txt +40 -0
  39. gea/catalog/gbr_325_coral_uth_ages.provenance.json +23 -0
  40. gea/catalog/gbr_325_coral_uth_ages.txt +71 -0
  41. gea/catalog/gisp2_greenland_temperature.csv +599 -0
  42. gea/catalog/gisp2_greenland_temperature.provenance.json +17 -0
  43. gea/catalog/gom_308_t2p_insitu.provenance.json +21 -0
  44. gea/catalog/gom_308_t2p_insitu.txt +40 -0
  45. gea/catalog/guaymas_385_dom_d13c.provenance.json +21 -0
  46. gea/catalog/guaymas_385_dom_d13c.txt +103 -0
  47. gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +26 -0
  48. gea/catalog/hikurangi_u1520_friction_insitu.txt +74 -0
  49. gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +22 -0
  50. gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +60 -0
  51. gea/catalog/iodp_u1324_pore_pressure.provenance.json +22 -0
  52. gea/catalog/iodp_u1324_pore_pressure.txt +42 -0
  53. gea/catalog/jfast_c0019_slow_slip_events.provenance.json +28 -0
  54. gea/catalog/jfast_c0019_slow_slip_events.txt +35 -0
  55. gea/catalog/kennetcook_2_p129_excerpt.las +139 -0
  56. gea/catalog/kennetcook_2_p129_excerpt.provenance.json +17 -0
  57. gea/catalog/ktb_hb_bhgm_density.dat +227 -0
  58. gea/catalog/ktb_hb_bhgm_density.provenance.json +22 -0
  59. gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +20 -0
  60. gea/catalog/ktb_hb_complog_6020_excerpt.txt +72 -0
  61. gea/catalog/ktb_hb_hlog246_temperature.dat +1636 -0
  62. gea/catalog/ktb_hb_hlog246_temperature.provenance.json +22 -0
  63. gea/catalog/ktb_hb_rockmech_compress.dat +33 -0
  64. gea/catalog/ktb_hb_rockmech_compress.provenance.json +22 -0
  65. gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +2817 -0
  66. gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +20 -0
  67. gea/catalog/ktb_vb_rockmech_compress.dat +125 -0
  68. gea/catalog/ktb_vb_rockmech_compress.provenance.json +22 -0
  69. gea/catalog/ktb_vb_vlog251_temperature.dat +1127 -0
  70. gea/catalog/ktb_vb_vlog251_temperature.provenance.json +24 -0
  71. gea/catalog/l06_06_nl_survey.csv +201 -0
  72. gea/catalog/l06_06_nl_survey.provenance.json +17 -0
  73. gea/catalog/l07_01_nl_excerpt.las +90 -0
  74. gea/catalog/l07_01_nl_excerpt.provenance.json +17 -0
  75. gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +21 -0
  76. gea/catalog/mariana_1200_serpentinite_geochem.txt +63 -0
  77. gea/catalog/med_160_sapropels.provenance.json +22 -0
  78. gea/catalog/med_160_sapropels.txt +43 -0
  79. gea/catalog/nankai_megasplay_shear_strength.provenance.json +26 -0
  80. gea/catalog/nankai_megasplay_shear_strength.txt +42 -0
  81. gea/catalog/odp_1027b_thermal_conductivity.provenance.json +21 -0
  82. gea/catalog/odp_1027b_thermal_conductivity.txt +52 -0
  83. gea/catalog/odp_1027c_cork_temperature.provenance.json +20 -0
  84. gea/catalog/odp_1027c_cork_temperature.txt +26 -0
  85. gea/catalog/odp_1165b_thermal_conductivity.provenance.json +22 -0
  86. gea/catalog/odp_1165b_thermal_conductivity.txt +102 -0
  87. gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +27 -0
  88. gea/catalog/odp_1274a_mantle_peridotite_mad.txt +44 -0
  89. gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +27 -0
  90. gea/catalog/odp_504b_dike_elastic_moduli.txt +85 -0
  91. gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +19 -0
  92. gea/catalog/odp_504b_leg137_borehole_fluids.txt +68 -0
  93. gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +28 -0
  94. gea/catalog/odp_735b_gabbro_elastic_moduli.txt +127 -0
  95. gea/catalog/peru_201_sulfate_reduction.provenance.json +22 -0
  96. gea/catalog/peru_201_sulfate_reduction.txt +322 -0
  97. gea/catalog/scorpio_e1_sa_excerpt.las +113 -0
  98. gea/catalog/scorpio_e1_sa_excerpt.provenance.json +17 -0
  99. gea/catalog/sumatra_362_cohesion.provenance.json +21 -0
  100. gea/catalog/sumatra_362_cohesion.txt +38 -0
  101. gea/catalog/university_6_17_no1_tx_excerpt.las +119 -0
  102. gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +17 -0
  103. gea/catalog/ursa_308_xrd_mineralogy.provenance.json +21 -0
  104. gea/catalog/ursa_308_xrd_mineralogy.txt +46 -0
  105. gea/catalog/volve_15_9_19_sr_excerpt.las +183 -0
  106. gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +16 -0
  107. gea/catalog/volve_15_9_19a_core_excerpt.csv +88 -0
  108. gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +18 -0
  109. gea/catalog/volve_f12_f14_production_excerpt.csv +167 -0
  110. gea/catalog/volve_f12_f14_production_excerpt.provenance.json +21 -0
  111. gea/catalog/walvis_208_petm_carbonate.provenance.json +21 -0
  112. gea/catalog/walvis_208_petm_carbonate.txt +268 -0
  113. gea/catalog/woodlark_1109_rock_eval.provenance.json +23 -0
  114. gea/catalog/woodlark_1109_rock_eval.txt +30 -0
  115. gea/cli.py +125 -0
  116. gea/client_reports.py +943 -0
  117. gea/config_versioning.py +133 -0
  118. gea/correlation.py +155 -0
  119. gea/dashboard.py +390 -0
  120. gea/deviation.py +70 -0
  121. gea/downhole_engine.py +395 -0
  122. gea/drift_monitor.py +310 -0
  123. gea/earth_model.py +230 -0
  124. gea/example_register_map.json +14 -0
  125. gea/fat_sat.py +68 -0
  126. gea/follower.py +98 -0
  127. gea/forward_model.py +139 -0
  128. gea/gamma.py +176 -0
  129. gea/gauge_specs.py +112 -0
  130. gea/gravity_reference.py +116 -0
  131. gea/inverse_engine.py +215 -0
  132. gea/matplotlib_demo.py +85 -0
  133. gea/modbus.py +229 -0
  134. gea/model_card.py +248 -0
  135. gea/operator_app.py +442 -0
  136. gea/ports.py +340 -0
  137. gea/profile_catalog.py +773 -0
  138. gea/project.py +213 -0
  139. gea/qt6_downhole_app.py +144 -0
  140. gea/quartz_hpht_extension.py +152 -0
  141. gea/reconciler.py +206 -0
  142. gea/rock_inventory.py +404 -0
  143. gea/sample_record.py +430 -0
  144. gea/sample_well_profile.csv +15 -0
  145. gea/sbom.py +116 -0
  146. gea/segy.py +181 -0
  147. gea/service_life.py +173 -0
  148. gea/shell.py +107 -0
  149. gea/sla_report.py +199 -0
  150. gea/store_forward.py +234 -0
  151. gea/strata_join.py +186 -0
  152. gea/survey_cmd.py +264 -0
  153. gea/survey_view.py +138 -0
  154. gea/telemetry.py +306 -0
  155. gea/tool_library.py +260 -0
  156. gea/well_assembler.py +457 -0
  157. gea/well_test_validation.py +369 -0
  158. gea_program-0.1.0.dist-info/METADATA +138 -0
  159. gea_program-0.1.0.dist-info/RECORD +163 -0
  160. gea_program-0.1.0.dist-info/WHEEL +5 -0
  161. gea_program-0.1.0.dist-info/entry_points.txt +2 -0
  162. gea_program-0.1.0.dist-info/licenses/LICENSE +373 -0
  163. gea_program-0.1.0.dist-info/top_level.txt +1 -0
gea/blind_harness.py ADDED
@@ -0,0 +1,108 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
+ """blind_harness - Part 5 of the subsurface surveying tool: THE
5
+ BLIND-VALIDATION HARNESS (v1.82.0) - the standing accuracy report that makes
6
+ the tool credible, not just built.
7
+
8
+ METHOD (leave-one-out, no self-grading):
9
+ For every supported property pair in the library (the strata-join joint
10
+ tables plus the KTB site-native pairs), each co-located observation is
11
+ HELD OUT in turn; the target is predicted from the REMAINING
12
+ observations by the same k-nearest conditional the inverse engine uses;
13
+ the held-out truth scores the prediction. Per pair we report:
14
+
15
+ n - held-out trials
16
+ mae - mean absolute error, in the property's own units
17
+ mae_pct - MAE as a percentage of the truth's mean
18
+ coverage - fraction of trials where the truth fell inside the
19
+ prediction's own +/- 1-sigma spread (an HONESTY metric:
20
+ a well-calibrated ~68 percent is the target; near-100
21
+ means the spreads are too timid, near-0 too bold)
22
+
23
+ Pairs below MIN_TRIALS refuse. Nothing is tuned to this harness; it
24
+ grades the same machinery clients get, on the same library.
25
+
26
+ DOCTRINE: this report is regenerated live - by the gate, by acceptance, and
27
+ by the PAPER_2258-lineage dispatches - so the accuracy table can never be a
28
+ stale marketing snapshot. Misses appear next to hits, forever.
29
+ """
30
+
31
+ from __future__ import annotations
32
+
33
+ import statistics
34
+ from typing import Dict, List
35
+
36
+ from . import strata_join as SJ
37
+ from .inverse_engine import _site_native_pairs, _conditional_from_pairs
38
+
39
+ MIN_TRIALS = 10
40
+
41
+
42
+ def _loo_pairs(pairs: List[tuple], k: int = 7) -> Dict:
43
+ """Leave-one-out over raw (given, target) pairs."""
44
+ n = len(pairs)
45
+ if n < MIN_TRIALS:
46
+ return {'status': 'REFUSED_THIN_DATA', 'n': n, 'min_n': MIN_TRIALS}
47
+ errs, hits, truths = [], 0, []
48
+ for i in range(n):
49
+ rest = pairs[:i] + pairs[i + 1:]
50
+ g, t = pairs[i]
51
+ c = _conditional_from_pairs(rest, g, k)
52
+ if c['status'] != 'OK':
53
+ continue
54
+ err = abs(c['estimate'] - t)
55
+ errs.append(err)
56
+ truths.append(abs(t))
57
+ if c['std'] > 0 and err <= c['std']:
58
+ hits += 1
59
+ if len(errs) < MIN_TRIALS:
60
+ return {'status': 'REFUSED_THIN_DATA', 'n': len(errs),
61
+ 'min_n': MIN_TRIALS}
62
+ mae = statistics.mean(errs)
63
+ tmean = statistics.mean(truths)
64
+ return {'status': 'OK', 'n': len(errs), 'mae': mae,
65
+ 'mae_pct': (mae / tmean * 100.0 if tmean else float('nan')),
66
+ 'coverage': hits / len(errs)}
67
+
68
+
69
+ def accuracy_report() -> Dict:
70
+ """The standing table: every supported pair in the library, blind-scored.
71
+
72
+ Sources: (1) strata-join joint tables (bin-level pairs, no archive
73
+ interpolation), (2) the KTB site-native station pairs (entry 52,
74
+ washouts excluded as disclosed there)."""
75
+ rows = []
76
+ # 1) strata-join joint tables
77
+ for well, (_, props) in SJ.WELL_GROUPS.items():
78
+ names = sorted(props)
79
+ for i, a in enumerate(names):
80
+ for b in names[i + 1:]:
81
+ pairs, _bin = SJ._colocated(well, a, b, None)
82
+ res = _loo_pairs(pairs)
83
+ res.update({'source': 'strata_join', 'well': well,
84
+ 'given': a, 'target': b})
85
+ rows.append(res)
86
+ # 2) KTB site-native pairs (rho -> Vp)
87
+ try:
88
+ pairs, washouts = _site_native_pairs('ktb_hb_complog_6020_excerpt')
89
+ res = _loo_pairs(pairs)
90
+ res.update({'source': 'site_pairs', 'well': 'ktb_complog',
91
+ 'given': 'rho (g/cc)', 'target': 'Vp (m/s)',
92
+ 'washouts_excluded': washouts})
93
+ rows.append(res)
94
+ except KeyError:
95
+ pass
96
+ ok = [r for r in rows if r['status'] == 'OK']
97
+ refused = [r for r in rows if r['status'] != 'OK']
98
+ ok.sort(key=lambda r: r['mae_pct'])
99
+ cov = [r['coverage'] for r in ok]
100
+ return {'ok': ok, 'refused': refused, 'n_ok': len(ok),
101
+ 'n_refused': len(refused),
102
+ 'best_mae_pct': (ok[0]['mae_pct'] if ok else None),
103
+ 'worst_mae_pct': (ok[-1]['mae_pct'] if ok else None),
104
+ 'median_coverage': (statistics.median(cov) if cov else None),
105
+ 'doctrine': ('leave-one-out over the same machinery clients get; '
106
+ 'coverage targets ~0.68 (honest 1-sigma); refusals '
107
+ 'listed, never hidden; regenerated live so the '
108
+ 'accuracy table can never be a stale snapshot')}
gea/case_study.py ADDED
@@ -0,0 +1,229 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
+ """case_study — depth-sweep case-study mode (v1.4.0 extension).
5
+
6
+ Sweeps a well from top to TD and reports, at every depth, both drift legs
7
+ (conventional vs GEA-stabilized), the separation in psi/yr, and the
8
+ service-life arithmetic — then identifies WHERE the GEA advantage is
9
+ largest (the deep hot interval past the stress knees, which is exactly where
10
+ permanent-gauge drift matters most and gauges are hardest to replace).
11
+
12
+ `write_markdown()` renders the sweep as the one-page case a customer would
13
+ read: well summary, depth table, headline numbers, the bench-test claim, and
14
+ the honest DERIVED_HYBRID classification note. Also runnable as a CLI:
15
+
16
+ python -m gea.case_study --td 25000 --out case.md
17
+
18
+ Headless-safe: numpy only, no display imports.
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ from dataclasses import dataclass
24
+ from datetime import date
25
+ from pathlib import Path
26
+ from typing import List, Optional
27
+
28
+ import numpy as np
29
+
30
+ from .downhole_engine import WellProfile, load_well_profile_csv, DEFAULT_TD_FT
31
+ from .quartz_hpht_extension import (
32
+ calculate_quartz_transducer_hpht_program,
33
+ canonical_suppression,
34
+ conventional_drift,
35
+ )
36
+
37
+
38
+ @dataclass
39
+ class CaseStudyConfig:
40
+ td_ft: float = DEFAULT_TD_FT
41
+ n_depth_points: int = 12
42
+ start_ft: float = 1000.0
43
+ surface_temp_F: float = 75.0 # anchor: surface ambient (template)
44
+ surface_pressure_psi: float = 14.7 # anchor: 1 atm
45
+ temp_gradient_F_per_ft: float = 0.018 # anchor: geothermal gradient (template)
46
+ pressure_gradient_psi_per_ft: float = 0.465 # anchor: hydrostatic gradient (industry)
47
+ profile: Optional[WellProfile] = None # real well profile overrides gradients
48
+ full_scale_psi: float = 30000.0 # anchor: HPHT quartz-gauge FS class
49
+ error_budget_pct_fs: float = 0.5 # anchor: typical spec total-error budget
50
+ horizon_years: float = 5.0
51
+ k_structural_trim: float = 1.0
52
+ phi_coupling_trim: float = 1.0
53
+ gauge_spec: object = None # GaugeSpec (v1.5.0); None = template anchors
54
+ deviation: object = None # DeviationSurvey (v1.6.0): sweep depths are MD, physics at TVD
55
+ well_name: str = "case-study well"
56
+
57
+
58
+ def depth_sweep(cfg: CaseStudyConfig | None = None) -> List[dict]:
59
+ """Per-depth twin-leg drift table from surface interval to TD."""
60
+ cfg = cfg or CaseStudyConfig()
61
+ fs = float(cfg.gauge_spec.full_scale_psi) if cfg.gauge_spec is not None else cfg.full_scale_psi
62
+ knee_C = float(cfg.gauge_spec.thermal_knee_C) if cfg.gauge_spec is not None else 150.0
63
+ knee_psi = float(cfg.gauge_spec.pressure_knee_psi) if cfg.gauge_spec is not None else 15000.0
64
+ depths = np.linspace(cfg.start_ft, cfg.td_ft * 0.985, cfg.n_depth_points)
65
+ rows = []
66
+ for d in depths:
67
+ d = float(d) # keep every reported number a plain float; d is MD
68
+ tvd = float(cfg.deviation.tvd_of(d)) if cfg.deviation is not None else d
69
+ if cfg.profile is not None:
70
+ p_psi, t_F = cfg.profile.interp(tvd) # profiles are TVD-indexed
71
+ else:
72
+ p_psi = cfg.surface_pressure_psi + tvd * cfg.pressure_gradient_psi_per_ft
73
+ t_F = cfg.surface_temp_F + tvd * cfg.temp_gradient_F_per_ft
74
+ t_C = (t_F - 32.0) * 5.0 / 9.0
75
+ r = calculate_quartz_transducer_hpht_program(
76
+ depth_m=float(d) / 3.28084, temp_c=t_C, pressure_psi=p_psi,
77
+ k_structural_trim=cfg.k_structural_trim,
78
+ phi_coupling_trim=cfg.phi_coupling_trim,
79
+ spec=cfg.gauge_spec)
80
+ uq = r["value"]["drift_pct"]
81
+ cv = conventional_drift(t_C, p_psi, spec=cfg.gauge_spec)
82
+ sep = cv - uq
83
+ rows.append({
84
+ 'depth_ft': round(float(d), 0),
85
+ 'tvd_ft': round(tvd, 0),
86
+ 'temp_F': round(t_F, 1),
87
+ 'temp_C': round(t_C, 1),
88
+ 'pressure_psi': round(p_psi, 0),
89
+ 'past_thermal_knee': bool(t_C > knee_C),
90
+ 'past_pressure_knee': bool(p_psi > knee_psi),
91
+ 'conv_drift_pct_fs_yr': round(cv, 4),
92
+ 'drift_pct_fs_yr': round(uq, 4),
93
+ 'separation_pct_fs_yr': round(sep, 5),
94
+ 'separation_psi_yr': round(sep * fs / 100.0, 2),
95
+ 'horizon_separation_psi': round(sep * fs / 100.0 * cfg.horizon_years, 1),
96
+ 'extra_service_life_yr': round(
97
+ cfg.error_budget_pct_fs / uq - cfg.error_budget_pct_fs / cv, 3) if uq > 0 else None,
98
+ })
99
+ return rows
100
+
101
+
102
+ def case_study(cfg: CaseStudyConfig | None = None) -> dict:
103
+ """The sweep plus headline metrics: where the advantage is largest."""
104
+ cfg = cfg or CaseStudyConfig()
105
+ rows = depth_sweep(cfg)
106
+ best = max(rows, key=lambda r: r['separation_psi_yr'])
107
+ knee_rows = [r for r in rows if r['past_thermal_knee'] or r['past_pressure_knee']]
108
+ return {
109
+ 'config': {
110
+ 'well_name': cfg.well_name,
111
+ 'td_ft': cfg.td_ft,
112
+ 'profile': cfg.profile.name if cfg.profile else 'linear gradients',
113
+ 'full_scale_psi': (float(cfg.gauge_spec.full_scale_psi)
114
+ if cfg.gauge_spec is not None else cfg.full_scale_psi),
115
+ 'gauge_spec': cfg.gauge_spec.name if cfg.gauge_spec is not None else 'template_generic (default)',
116
+ 'gauge_spec_source': cfg.gauge_spec.source if cfg.gauge_spec is not None else '22Aug2026 template anchors',
117
+ 'horizon_years': cfg.horizon_years,
118
+ },
119
+ 'canonical_suppression': round(canonical_suppression(
120
+ cfg.k_structural_trim, cfg.phi_coupling_trim), 4),
121
+ 'rows': rows,
122
+ 'headline': {
123
+ 'best_depth_ft': best['depth_ft'],
124
+ 'best_separation_psi_yr': best['separation_psi_yr'],
125
+ 'best_horizon_separation_psi': best['horizon_separation_psi'],
126
+ 'td_conv_drift_pct_fs_yr': rows[-1]['conv_drift_pct_fs_yr'],
127
+ 'td_program_drift_pct_fs_yr': rows[-1]['drift_pct_fs_yr'],
128
+ 'hpht_interval_top_ft': knee_rows[0]['depth_ft'] if knee_rows else None,
129
+ 'advantage_grows_with_depth': bool(
130
+ rows[-1]['separation_psi_yr'] >= rows[0]['separation_psi_yr']),
131
+ },
132
+ }
133
+
134
+
135
+ def write_markdown(result: dict | None = None, path: str | None = None,
136
+ cfg: CaseStudyConfig | None = None) -> Path:
137
+ """Render the one-page customer-facing case study as markdown."""
138
+ if result is None:
139
+ result = case_study(cfg)
140
+ if path is None:
141
+ path = "downhole_case_study.md"
142
+ c = result['config']
143
+ h = result['headline']
144
+ sup = result['canonical_suppression']
145
+ lines = [
146
+ f"# GEA Downhole Drift Case Study — {c['well_name']}",
147
+ "",
148
+ f"*Generated {date.today().isoformat()} by gea "
149
+ f"(gea-program). Basis: {c['profile']}; TD {c['td_ft']:,.0f} ft; "
150
+ f"full scale {c['full_scale_psi']:,.0f} psi; horizon {c['horizon_years']:g} yr.*",
151
+ "",
152
+ f"*Gauge spec: **{c['gauge_spec']}** — {c['gauge_spec_source']}*",
153
+ "",
154
+ "## The claim",
155
+ "",
156
+ f"Quartz-gauge drift ({c['gauge_spec']} baseline) divided by the GEA",
157
+ f"canonical suppression composition = **{sup}** at the locked primitives",
158
+ "(F_TRZ = 0.1, K_MEX = 25/12, Phi_res = 0.84) — drift **below** the",
159
+ "conventional gauge at every depth, with the largest advantage in the",
160
+ "deep hot interval where gauges are hardest to replace.",
161
+ "",
162
+ "## Depth sweep",
163
+ "",
164
+ "| Depth (ft) | T (degF) | P (psi) | HPHT | Conv (%FS/yr) | GEA (%FS/yr) | Sep (psi/yr) | Extra life (yr) |",
165
+ "|---:|---:|---:|:--:|---:|---:|---:|---:|",
166
+ ]
167
+ for r in result['rows']:
168
+ knee = "YES" if (r['past_thermal_knee'] or r['past_pressure_knee']) else "-"
169
+ lines.append(
170
+ f"| {r['depth_ft']:,.0f} | {r['temp_F']} | {r['pressure_psi']:,.0f} | {knee} "
171
+ f"| {r['conv_drift_pct_fs_yr']} | {r['drift_pct_fs_yr']} "
172
+ f"| {r['separation_psi_yr']} | {r['extra_service_life_yr']} |")
173
+ lines += [
174
+ "",
175
+ "## Headlines",
176
+ "",
177
+ f"- Largest advantage at **{h['best_depth_ft']:,.0f} ft**: "
178
+ f"**{h['best_separation_psi_yr']} psi/yr** separation, "
179
+ f"**{h['best_horizon_separation_psi']} psi** over the {c['horizon_years']:g}-yr horizon.",
180
+ f"- At TD: conventional {h['td_conv_drift_pct_fs_yr']} vs GEA "
181
+ f"{h['td_program_drift_pct_fs_yr']} %FS/yr.",
182
+ (f"- HPHT interval (past the 150 degC / 15,000 psi knees) begins near "
183
+ f"**{h['hpht_interval_top_ft']:,.0f} ft** — the advantage compounds there."
184
+ if h['hpht_interval_top_ft'] else
185
+ "- This well stays below the HPHT stress knees; the advantage is the flat suppression ratio."),
186
+ "- The advantage " + ("**grows with depth**." if h['advantage_grows_with_depth']
187
+ else "is approximately flat across depth."),
188
+ "",
189
+ "## How to test it",
190
+ "",
191
+ "Twin-gauge bench test (PAPER_2250 LABORATORY tier / PAPER_2256 sec 5): one",
192
+ "conventional quartz gauge, one under GEA SCm-resonance conditioning, at",
193
+ f"matched T/P. Predicted drift ratio: **{sup}**. The simulator's comparison",
194
+ "mode and service-life divergence curves supply the reference data streams.",
195
+ "",
196
+ "## Classification (honest basis)",
197
+ "",
198
+ "DERIVED_HYBRID (PAPER_2149): industry-observed anchors (0.215 %FS/yr",
199
+ "baseline; 150 degC / 15,000 psi stress knees; gradients; FS class; spec",
200
+ "budget) x canonical-GEA suppression from locked primitives. The dressing",
201
+ "coefficients are the template's engineering fit, disclosed — not claimed as",
202
+ "derivations. Record: PAPER_2256. (c) Daniel T. Murphy / GEA Research",
203
+ "Program, AGPL-3.0 + Commercial.",
204
+ "",
205
+ ]
206
+ p = Path(path)
207
+ p.write_text("\n".join(lines), encoding="utf-8")
208
+ return p
209
+
210
+
211
+ def _main() -> None:
212
+ import argparse
213
+ ap = argparse.ArgumentParser(description="GEA downhole depth-sweep case study")
214
+ ap.add_argument("--td", type=float, default=DEFAULT_TD_FT, help="total depth, ft")
215
+ ap.add_argument("--points", type=int, default=12, help="depth points in the sweep")
216
+ ap.add_argument("--profile", type=str, default=None, help="well profile CSV (depth_ft,pressure_psi,temp_F)")
217
+ ap.add_argument("--name", type=str, default="case-study well")
218
+ ap.add_argument("--horizon", type=float, default=5.0, help="service horizon, years")
219
+ ap.add_argument("--out", type=str, default="downhole_case_study.md")
220
+ a = ap.parse_args()
221
+ prof = load_well_profile_csv(a.profile) if a.profile else None
222
+ cfg = CaseStudyConfig(td_ft=a.td, n_depth_points=a.points, profile=prof,
223
+ well_name=a.name, horizon_years=a.horizon)
224
+ out = write_markdown(case_study(cfg), a.out)
225
+ print(f"case study written: {out}")
226
+
227
+
228
+ if __name__ == "__main__":
229
+ _main()
@@ -0,0 +1,23 @@
1
+ {
2
+ "entry": "acex_lomonosov_age_depth_model",
3
+ "kind": "REAL_AGE_DEPTH_MODEL",
4
+ "well": "IODP Exp 302 Composite Site (ACEX), LOMONOSOV RIDGE, CENTRAL ARCTIC OCEAN (87.8900 N, 137.6500 E - 235 km from the North Pole, the closest any scientific drilling data comes to it; water depth -1,251 m) - Arctic Coring Expedition (2004), drilled from the icebreaker Vidar Viking with two escort icebreakers managing the moving sea ice; the composite record splices Holes M0002A/M0003A/M0004A/M0004C into one virtual core",
5
+ "operator_on_log": "Backman, Jakobsson, Frank, O'Regan, Moran et al. (14 authors) - the canonical ACEX age model, Paleoceanography 23 PA1S03 (doi:10.1029/2007PA001476); control points from 10Be profiles, biostratigraphy (P. clithridium, Azolla, A. augustum) and magnetostratigraphy (chron C25n)",
6
+ "source_database": "PANGAEA, dataset doi:10.1594/PANGAEA.705517 ('(Table 1) Age-Depth control points and sedimentation rates of IODP Exp302 sediments')",
7
+ "source_url": "https://doi.pangaea.de/10.1594/PANGAEA.705517?format=textfile",
8
+ "license": "Creative Commons Attribution 3.0 Unported (CC-BY-3.0), declared IN the file's own header. Attribution: Backman et al. / PANGAEA / IODP",
9
+ "fetch_date": "2026-08-26",
10
+ "fetch_method": "read-only HTTPS fetch of the PANGAEA textfile export - COMPLETE dataset (38 data points = every non-empty cell across the 5 counted parameters on 10 rows; depth is GEOCODE) in one fetch",
11
+ "coverage": "COMPLETE DATASET: the age-depth backbone of the first-ever scientific drilling of the central Arctic Ocean - 10 control points (A-G plus hiatus bounds), 0-399.63 mcd spanning 0-55,904 ka (56 million years of Arctic history), with per-interval sedimentation rates 0.80-2.43 cm/ka.",
12
+ "curves": [
13
+ "Depth sed [mcd] (index)",
14
+ "Age model [ka]",
15
+ "SR sedimentation rate [cm/ka]",
16
+ "Sample comment = control-point letters A-G (quality)",
17
+ "Comm + Interval comm (verbatim in file: 10Be, biostratigraphy and chron C25n tie-point descriptions)"
18
+ ],
19
+ "hiatuses_in_the_data": "BOTH ACEX hiatuses are encoded in the table's structure: (1) the 26.2-Myr mid-Cenozoic hiatus appears as a DUPLICATE-DEPTH PAIR - 198.70 m carries two ages, 18,200 and 44,400 ka: the same centimetre of seafloor is both early Miocene and middle Eocene; (2) the 2.2-Myr middle-late Miocene hiatus sits between 135.49 m (9,360 ka) and 140.44 m (11,560 ka).",
20
+ "source_anomaly_disclosure": "The source header's own Comment field is TRUNCATED IN THE ARCHIVE - it ends mid-sentence at 'Paleogene: (404.8-198.7) m/(56.2-44.4) Ma. Average sedimentation' with the Paleogene average rate cut off (re-derivable: 206.1 m / 11.8 Ma = 17.5 m/Myr). Preserved verbatim, including the cut. Note also the header's 404.8 m full-section base vs the table's 399.63 m deepest control point (chron C25n) - consistent, not contradictory.",
21
+ "purpose": "thirtieth catalogue entry - a MILESTONE ENTRY: the CENTRAL ARCTIC OCEAN joins as region EIGHTEEN at 87.89 N (235 km from the North Pole - the catalogue now literally reaches from pole to pole through 30 entries), first icebreaker-drilled data, first composite virtual core, and AGE-DEPTH GEOCHRONOLOGY is kind NINETEEN - the catalogue's first time axis: every earlier entry measures the state of the subsurface, this one dates it",
22
+ "verified": "10 rows / 38 counted cells against the header Size declaration; ALL six sedimentation rates re-derived live from the control points (five interval rates as delta-depth/delta-age between the correct hiatus-aware bounds + the 135.49 m rate from the surface); header-average identity 198.7/16.0 = 12.4 m/Myr re-derived; duplicate-depth hiatus pair pinned; endpoints; gate-pinned; source URL serves the identical dataset"
23
+ }
@@ -0,0 +1,28 @@
1
+ /* DATA DESCRIPTION:
2
+ Citation: Backman, Jan; Jakobsson, Martin; Frank, Martin; Sangiorgi, Francesca; Brinkhuis, Henk; Stickley, Catherine E; O'Regan, Matthew; Lovlie, Reidar; Palike, Heiko; Spofforth, David J A; Gattacceca, Jerome; Moran, Kathryn; King, John W; Heil, Chip (2008): (Table 1) Age-Depth control points and sedimentation rates of IODP Exp302 sediments [dataset]. PANGAEA, https://doi.org/10.1594/PANGAEA.705517,
3
+ In supplement to: Backman, J et al. (2008): Age model and core-seismic integration for the Cenozoic Arctic Coring Expedition sediments from the Lomonosov Ridge. Paleoceanography, 23(1), PA1S03, https://doi.org/10.1029/2007PA001476
4
+ Project(s): Integrated Ocean Drilling Program / International Ocean Discovery Program (IODP) (URI: https://www.iodp.org/)
5
+ Coverage: LATITUDE: 87.890000 * LONGITUDE: 137.650000
6
+ MINIMUM DEPTH, sediment/rock: 0.00 m * MAXIMUM DEPTH, sediment/rock: 399.63 m
7
+ Event(s): 302-CompSite (ACEX) * LATITUDE: 87.890000 * LONGITUDE: 137.650000 * ELEVATION: -1251.0 m * CAMPAIGN: Exp302 (Arctic Coring Expedition, ACEX) * BASIS: CCGS Captain Molly Kool (Vidar Viking) (URI: https://en.wikipedia.org/wiki/CCGS_Captain_Molly_Kool) * METHOD/DEVICE: Composite Core (COMPCORE) * COMMENT: Virtual core composed of spliced cores from Holes M0002A, M0003A, M0004A and M0004C. Virtual position and water depth is calculated as the mean of all Exp302 sites.
8
+ Comment: Depth is given in meter composite depth (mcd) ! Neogene: 198.7 m/(18.2-2.2) Ma; total time interval minus 2.2 Ma long hiatus. Average sedimentation rate: 12.4 m/MA; Paleogene: (404.8-198.7) m/(56.2-44.4) Ma. Average sedimentation
9
+ Parameter(s): DEPTH, sediment/rock [m] (Depth sed) * GEOCODE
10
+ Age model [ka] (Age model) * PI: Backman, Jan (backman@geo.su.se) * METHOD/DEVICE: Age model, composite
11
+ Sample comment (Sample comment) * PI: Backman, Jan (backman@geo.su.se) * COMMENT: Depth control points
12
+ Age, comment (Comm) * PI: Backman, Jan (backman@geo.su.se)
13
+ Interval comments (Interval comm) * PI: Backman, Jan (backman@geo.su.se) * COMMENT: Interval between depth control points
14
+ Sedimentation rate [cm/ka] (SR) * PI: Backman, Jan (backman@geo.su.se) * METHOD/DEVICE: Calculated, see reference(s)
15
+ License: Creative Commons Attribution 3.0 Unported (CC-BY-3.0) (URI: https://creativecommons.org/licenses/by/3.0/)
16
+ Size: 38 data points
17
+ */
18
+ Depth sed [m] Age model [ka] Sample comment Comm Interval comm SR [cm/ka]
19
+ 0.00 0 A top of section
20
+ 135.49 9360 deepest 10Be sample above middle-late Miocene hiatus 1.45
21
+ 140.44 11560 next deeper 10Be sample, middle-late Miocene hiatus
22
+ 151.28 12310 B deepest 10Be sample A-B 1.45
23
+ 198.70 18200 C midpoint Burdigalian stage equals young end of Cenozoic hiatus B-C 0.80
24
+ 198.70 44400 extrapolate up from D, to old end of Cenozoic hiatus
25
+ 202.95 44600 D last abundant occurrence of P. clithridium D-E 2.43
26
+ 299.95 48600 E last occurrence of Azolla spp. E-F 1.27
27
+ 381.42 55000 F last occurrence of A. augustum F-G 2.01
28
+ 399.63 55904 G top chron C25n
@@ -0,0 +1,68 @@
1
+ d,t
2
+ 10.91, -24.16
3
+ 15.91, -24.35
4
+ 20.91, -24.33
5
+ 25.91, -24.19
6
+ 30.91, -24.19
7
+ 35.91, -24.08
8
+ 40.91, -24.03
9
+ 45.91, -23.92
10
+ 50.91, -23.85
11
+ 55.91, -23.80
12
+ 60.91, -23.72
13
+ 65.91, -23.68
14
+ 70.91, -23.61
15
+ 75.91, -23.54
16
+ 80.91, -23.47
17
+ 85.91, -23.39
18
+ 90.91, -23.32
19
+ 95.91, -23.23
20
+ 100.91, -23.14
21
+ 105.91, -23.05
22
+ 110.91, -22.97
23
+ 115.91, -22.85
24
+ 120.91, -22.76
25
+ 125.91, -22.68
26
+ 130.91, -22.56
27
+ 135.91, -22.44
28
+ 140.91, -22.33
29
+ 145.91, -22.24
30
+ 150.91, -22.11
31
+ 155.91, -21.98
32
+ 160.91, -21.86
33
+ 165.91, -21.76
34
+ 170.91, -21.61
35
+ 175.91, -21.49
36
+ 180.91, -21.35
37
+ 185.91, -21.22
38
+ 190.91, -21.09
39
+ 195.91, -20.95
40
+ 200.91, -20.83
41
+ 205.91, -20.69
42
+ 210.91, -20.55
43
+ 215.91, -20.42
44
+ 220.91, -20.27
45
+ 225.91, -20.13
46
+ 230.91, -19.99
47
+ 235.91, -19.82
48
+ 240.91, -19.69
49
+ 245.91, -19.55
50
+ 250.91, -19.39
51
+ 255.91, -19.24
52
+ 260.91, -19.09
53
+ 265.91, -18.94
54
+ 270.91, -18.80
55
+ 275.91, -18.64
56
+ 280.91, -18.50
57
+ 285.91, -18.42
58
+ 290.91, -18.17
59
+ 295.91, -17.90
60
+ 300.91, -17.84
61
+ 305.91, -17.69
62
+ 310.91, -17.54
63
+ 315.91, -17.37
64
+ 320.91, -17.22
65
+ 325.91, -17.06
66
+ 330.91, -16.92
67
+ 335.91, -16.83
68
+ 340.91, -16.74
@@ -0,0 +1,17 @@
1
+ {
2
+ "entry": "agassiz77_canada_temperature",
3
+ "kind": "REAL_TEMPERATURE_PROFILE_COMPLETE",
4
+ "well": "Agassiz77 borehole, Agassiz Ice Cap, Ellesmere Island, Canadian Arctic North (approx 80.7 N, -73.1 E per database metadata); drilled/measured 1977",
5
+ "operator_on_log": "Canadian ice-core program lineage (Fisher/Clarke/Waddington; Zdanowicz-provided data per database metadata)",
6
+ "source_database": "Greenland and Canadian Arctic ice temperature profiles database (GEUS): Lokkegaard et al. 2023, The Cryosphere 17, 3829-3845, doi:10.5194/tc-17-3829-2023; data DOI 10.22008/FK2/3BVF9V (GEUS Dataverse); science lineage: Clarke, Fisher & Waddington 1987 (IAHS vol. 170, 169-180); redistributed in the public GEUS GitHub repository (boreholes/Agassiz77/data.csv)",
7
+ "source_url": "https://raw.githubusercontent.com/GEUS-Glaciology-and-Climate/greenland_ice_borehole_temperature_profiles/main/boreholes/Agassiz77/data.csv",
8
+ "license": "open science database (The Cryosphere CC-BY publication; GEUS Dataverse); attribution to Lokkegaard et al. 2023 and the Canadian Agassiz program lineage",
9
+ "fetch_date": "2026-08-24",
10
+ "fetch_method": "read-only HTTPS fetch (text/plain) - COMPLETE file",
11
+ "coverage": "COMPLETE FILE: all 67 stations, 10.91-340.91 m at 5 m spacing, verbatim (database-stated coverage 97% of the 341 m thickness). Database metadata notes: ice thickness in data does not match Vinther (2008) and the location is approximate - carried honestly as the database's own caveat.",
12
+ "curves": ["d (depth, m)", "t (temperature, degC) - MEASURED TEMPERATURE, 5 m stations"],
13
+ "temperature_data": "Second continuous MEASURED temperature profile: 67 stations, -24.16 degC near surface warming monotonically below ~16 m to -16.74 degC at 340.91 m - a classic High Arctic ice-cap thermal profile (no deep glacial minimum: the cap is thin relative to GISP2).",
14
+ "dialect_notes": "GEUS d,t CSV with space-after-comma values (parser handles); the catalogue's second temperature-CSV entry.",
15
+ "purpose": "seventh catalogue entry - SEVENTH region (CANADA, Ellesmere Island); second MEASURED_CURVES-tier well; 1977 vintage (the catalogue's oldest measurement)",
16
+ "verified": "67 stations; endpoints verbatim; MEASURED_CURVES derivation; gate-pinned"
17
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "entry": "barbados_110_consolidation",
3
+ "kind": "REAL_CONSOLIDATION_GEOTECHNICS",
4
+ "well": "ODP Holes 110-671A/B/C/D (the historic first-ever drilling THROUGH an active decollement, 691.2 m penetration), 110-672A (incoming-plate reference), 110-673A/B and 110-676A - BARBADOS RIDGE accretionary complex, Lesser Antilles, North Atlantic (15.52-15.54 N, 58.64-58.81 W; seafloors -4,678 to -5,070 m, the catalogue's deepest Atlantic water); ODP Leg 110 (1986), samples 4.40-496.70 mbsf reaching the sediments immediately above the incipient decollement",
5
+ "operator_on_log": "Taylor & Leonard laboratory consolidation testing (oedometer + triaxial, vertical AND horizontal orientations) on whole-round core samples; drilling by JOIDES Resolution - the leg that founded modern decollement science and led directly to the first subduction-zone CORKs (Leg 156)",
6
+ "source_database": "PANGAEA, dataset doi:10.1594/PANGAEA.747753 ('Geotechnical and physical properties from whole-round consolidation samples of ODP Leg 110 holes (Table 1)'); supplement to Taylor & Leonard 1990, Proc. ODP Sci. Results 110, 289-308 (doi:10.2973/odp.proc.sr.110.152.1990); full paper abstract preserved in the file's own header",
7
+ "source_url": "https://doi.pangaea.de/10.1594/PANGAEA.747753?format=textfile",
8
+ "license": "Creative Commons Attribution 3.0 Unported (CC-BY-3.0), declared IN the file's own header. Attribution: Taylor/Leonard / PANGAEA / ODP",
9
+ "fetch_date": "2026-08-27",
10
+ "fetch_method": "read-only HTTPS fetch of the PANGAEA textfile export - COMPLETE dataset (874 data points per the header's own Size declaration, re-counted at gate time as non-empty body cells excluding Event + geocode columns, EXACT) in one fetch",
11
+ "coverage": "COMPLETE DATASET: 41 consolidation-test rows across 8 holes and 4 sites - wet-bulk/grain density, water content, porosity, void ratio, effective overburden stress 20-3,808 kPa, preconsolidation pressure (max/min), the Pc-Po state columns, permeability at Pc (1.2e-8 to 7.6e-4 cm/s), compression index, vane shear strength, grain-size fractions, shipboard CaCO3, and full Atterberg limits; test orientations (vertical/horizontal/triaxial) ride verbatim in three comment columns",
12
+ "curves": [
13
+ "Depth sed [m] 4.40-496.70 (GEOCODE)",
14
+ "WBD, grain density, water content, porosity, void ratio",
15
+ "Overb press [kPa] 20-3,808 + Pc max/min [kPa]",
16
+ "Pc/Po (max)/(min) - ACTUALLY Pc MINUS Po in kPa, see anomaly disclosure",
17
+ "Coeff of permeability at Pc [cm/s] + compression index Cc + vane shear [kPa]",
18
+ "Sand/Silt/<2um fractions + CaCO3 + Atterberg (LL/PL/PI)",
19
+ "Event rides as per-row quality; lithology/epoch/orientation comments verbatim"
20
+ ],
21
+ "source_anomaly_disclosure": "SIX source quirks preserved verbatim, each proven by arithmetic where provable: (1) the two columns LABELED 'Overconsolidation ratio (Pc/Po)' actually hold the DIFFERENCE Pc - Po in kPa - re-derived on all 66 populated pairs, 65 close within 1 kPa (including 3000 - 3808 = -808 at the deepest sample) and the single violator (672A-2H-3 horizontal min: 100 - 37 = 63 vs archived 43) is a genuine 20-kPa arithmetic slip in the source table, carried unchanged; (2) sample 671C-1X-1 archives a permeability of literally 0.000000000 cm/s - a value that underflowed the table's 9-decimal format (physically nonzero, numerically zero in the archive); (3) all TEN 672A rows with Atterberg data have the Plastic-limit column DUPLICATING the Liquid limit (e.g. 87.4/87.4 with PI 56), breaking PI = LL - PL exactly where every other site closes it (worst deviation 3.6 on 23 non-672A rows); (4) epoch 'early Plocene' typo (672A-11H-3); (5) sample label '110-673A2H-3-2' missing its hyphen; (6) 'Water content, wet mass' exceeds 100% on five rows (103-120%) - impossible on a wet-mass basis, so those values are dry-mass water contents under a wet-mass label",
22
+ "purpose": "thirty-sixth catalogue entry - the BARBADOS RIDGE / LESSER ANTILLES joins as region TWENTY-FOUR (the birthplace of decollement drilling and of the CORK) and consolidation geotechnics is kind TWENTY-FIVE: preconsolidation state, permeability, compressibility and plasticity - the quantities that turn the catalogue's measured pore pressures (U1324) and strengths into a MECHANISM; the paper's 'lubricated subduction' headline is re-derived by the gate on every run: every sample at or below 90 mbsf is UNDERCONSOLIDATED (Pc - Po < 0, reaching -916 kPa), the pore fluid carrying what the grain framework cannot - and at the deepest sample above the decollement Pc/Po = 3000/3808 = 0.79, the excess-pressure state approaching overburden that lets an ocean plate slide",
23
+ "verified": "41 rows / 874 counted cells against the header's own Size declaration (EXACT); the Pc-Po difference identity re-derived on all 66 populated pairs (65 within 1 kPa, the single 20-kPa source slip disclosed and pinned); ALL 13 samples >= 90 mbsf underconsolidated with minimum Pc-Po = -916 kPa; 672A PL==LL duplication pinned on all 10 rows vs PI=LL-PL closing within 3.6 on all 23 other-site rows; the zero-permeability underflow cell pinned; epoch typo + missing-hyphen label pinned; gate-pinned; source URL serves the identical dataset"
24
+ }
@@ -0,0 +1,91 @@
1
+ /* DATA DESCRIPTION:
2
+ Citation: Taylor, Elliott; Leonard, John (1990): Geotechnical and physical properties from whole-round consolidations samples of ODP Leg 110 holes (Table 1) [dataset]. PANGAEA, https://doi.org/10.1594/PANGAEA.747753,
3
+ Supplement to: Taylor, E; Leonard, J (1990): Sediment consolidation and permeability at the Barbados Forearc. In: Moore, JC; Mascle, A; et al. (eds.), Proceedings of the Ocean Drilling Program, Scientific Results, College Station, TX (Ocean Drilling Program), 110, 289-308, https://doi.org/10.2973/odp.proc.sr.110.152.1990
4
+ Abstract: Sediments cored from the Barbados Ridge accretionary complex at ODP Sites 671, 672, and 676 are progressively underconsolidated with depth. Very low measured intergranular permeabilities contribute substantially to the probable excess pore-water pressures that account for the underconsolidated behavior. The estimated pore pressures immediately overlying the incipient decollement at the reference site are nearly equal to the overburden stress. Data show that the pore fluids within the fine-grained sediments of the complex are absorbing the tectonic shock of underthrusting as they are accreted, effectively leading to "lubricated subduction" of the underthrust Oligocene and older sediments. Lateral compression and dewatering by fracture permeability is taking place in the accreted section despite apparent underconsolidation, resulting in limited pore-volume reduction and sediment strengthening from east to west on the ridge.
5
+ Project(s): Ocean Drilling Program (ODP) (URI: https://www-odp.tamu.edu:443/)
6
+ Coverage: MEDIAN LATITUDE: 15.529850 * MEDIAN LONGITUDE: -58.715613 * SOUTH-BOUND LATITUDE: 15.524700 * WEST-BOUND LONGITUDE: -58.810000 * NORTH-BOUND LATITUDE: 15.540000 * EAST-BOUND LONGITUDE: -58.641000
7
+ DATE/TIME START: 1986-06-27T08:15:00 * DATE/TIME END: 1986-08-14T00:30:00
8
+ MINIMUM DEPTH, sediment/rock: 4.40 m * MAXIMUM DEPTH, sediment/rock: 496.70 m
9
+ Event(s): 110-671A * LATITUDE: 15.525800 * LONGITUDE: -58.732500 * DATE/TIME START: 1986-06-27T08:15:00 * DATE/TIME END: 1986-06-28T12:45:00 * ELEVATION: -4942.0 m * PENETRATION: 5 m * RECOVERY: 5.02 m * LOCATION: North Atlantic Ocean * CAMPAIGN: Leg110 * BASIS: Joides Resolution (URI: https://www-odp.tamu.edu:443/resolutn.html) * METHOD/DEVICE: Drilling/drill rig (DRILL) * COMMENT: 1 core; 5 m cored; 0 m drilled; 100.4 % recovery
10
+ 110-671B * LATITUDE: 15.525800 * LONGITUDE: -58.732500 * DATE/TIME START: 1986-06-28T12:45:00 * DATE/TIME END: 1986-07-10T23:15:00 * ELEVATION: -4942.0 m * PENETRATION: 691.2 m * RECOVERY: 553.13 m * LOCATION: North Atlantic Ocean * CAMPAIGN: Leg110 * BASIS: Joides Resolution (URI: https://www-odp.tamu.edu:443/resolutn.html) * METHOD/DEVICE: Drilling/drill rig (DRILL) * COMMENT: 74 cores; 691.2 m cored; 0 m drilled; 80 % recovery
11
+ 110-671C * LATITUDE: 15.528000 * LONGITUDE: -58.732800 * DATE/TIME START: 1986-07-10T23:15:00 * DATE/TIME END: 1986-07-15T07:30:00 * ELEVATION: -4947.0 m * PENETRATION: 514.7 m * RECOVERY: 16.66 m * LOCATION: North Atlantic Ocean * CAMPAIGN: Leg110 * BASIS: Joides Resolution (URI: https://www-odp.tamu.edu:443/resolutn.html) * METHOD/DEVICE: Drilling/drill rig (DRILL) * COMMENT: 2 cores; 19 m cored; 0 m drilled; 87.7 % recovery
12
+ 110-671D * LATITUDE: 15.524700 * LONGITUDE: -58.731300 * DATE/TIME START: 1986-08-06T23:30:00 * DATE/TIME END: 1986-08-10T07:15:00 * ELEVATION: -4953.0 m * PENETRATION: 461 m * LOCATION: North Atlantic Ocean * CAMPAIGN: Leg110 * BASIS: Joides Resolution (URI: https://www-odp.tamu.edu:443/resolutn.html) * METHOD/DEVICE: Drilling/drill rig (DRILL) * COMMENT: 1 core; 9 m cored; 0 m drilled; 0 % recovery
13
+ 110-672A * LATITUDE: 15.540000 * LONGITUDE: -58.641000 * DATE/TIME START: 1986-07-15T11:10:00 * DATE/TIME END: 1986-07-22T12:15:00 * ELEVATION: -4984.0 m * PENETRATION: 493.8 m * RECOVERY: 382.62 m * LOCATION: North Atlantic Ocean * CAMPAIGN: Leg110 * BASIS: Joides Resolution (URI: https://www-odp.tamu.edu:443/resolutn.html) * METHOD/DEVICE: Drilling/drill rig (DRILL) * COMMENT: 53 cores; 493.8 m cored; 0 m drilled; 77.5 % recovery
14
+ 110-673A * LATITUDE: 15.531700 * LONGITUDE: -58.810000 * DATE/TIME START: 1986-07-22T18:30:00 * DATE/TIME END: 1986-07-23T23:00:00 * ELEVATION: -4678.0 m * PENETRATION: 36.4 m * RECOVERY: 33.33 m * LOCATION: North Atlantic Ocean * CAMPAIGN: Leg110 * BASIS: Joides Resolution (URI: https://www-odp.tamu.edu:443/resolutn.html) * METHOD/DEVICE: Drilling/drill rig (DRILL) * COMMENT: 4 cores; 36.4 m cored; 0 m drilled; 91.6 % recovery
15
+ 110-673B * LATITUDE: 15.532000 * LONGITUDE: -58.641500 * DATE/TIME START: 1986-07-23T23:00:00 * DATE/TIME END: 1986-07-28T12:00:00 * ELEVATION: -4689.0 m * PENETRATION: 330.6 m * RECOVERY: 247.05 m * LOCATION: North Atlantic Ocean * CAMPAIGN: Leg110 * BASIS: Joides Resolution (URI: https://www-odp.tamu.edu:443/resolutn.html) * METHOD/DEVICE: Drilling/drill rig (DRILL) * COMMENT: 35 cores; 330.6 m cored; 0 m drilled; 74.7 % recovery
16
+ 110-676A * LATITUDE: 15.530800 * LONGITUDE: -58.703300 * DATE/TIME START: 1986-08-10T11:15:00 * DATE/TIME END: 1986-08-14T00:30:00 * ELEVATION: -5070.0 m * PENETRATION: 310.2 m * RECOVERY: 262.09 m * LOCATION: North Atlantic Ocean * CAMPAIGN: Leg110 * BASIS: Joides Resolution (URI: https://www-odp.tamu.edu:443/resolutn.html) * METHOD/DEVICE: Drilling/drill rig (DRILL) * COMMENT: 33 cores; 310.2 m cored; 0 m drilled; 84.5 % recovery
17
+ Parameter(s): Event label (Event)
18
+ Sample code/label (Sample label) * PI: Taylor, Elliott * METHOD/DEVICE: DSDP/ODP/IODP sample designation (URI: hdl:10013/epic.27914.d001)
19
+ Sample comment (Sample comment) * PI: Taylor, Elliott
20
+ DEPTH, sediment/rock [m] (Depth sed) * GEOCODE
21
+ Lithology/composition/facies (Lithology) * PI: Taylor, Elliott
22
+ Epoch (Epoch) * PI: Taylor, Elliott
23
+ Density, wet bulk [g/cm**3] (WBD) * PI: Taylor, Elliott
24
+ Water content, wet mass [%] (Water wm) * PI: Taylor, Elliott
25
+ Density, grain [g/cm**3] (Density grain) * PI: Taylor, Elliott
26
+ Porosity [% vol] (Poros) * PI: Taylor, Elliott
27
+ Void Ratio description (Void Ratio) * PI: Taylor, Elliott * COMMENT: initial
28
+ Overburden pressure [kPa] (Overb press) * PI: Taylor, Elliott * COMMENT: effective overburden stress
29
+ Preconsolidation pressure [kPa] (Pc) * PI: Taylor, Elliott * COMMENT: max
30
+ Preconsolidation pressure [kPa] (Pc) * PI: Taylor, Elliott * COMMENT: min
31
+ Comment (Comment) * PI: Taylor, Elliott * COMMENT: PC max/min
32
+ Overconsolidation ratio (Pc/Po) * PI: Taylor, Elliott * COMMENT: max
33
+ Comment 2 (continued) (Comm 2) * PI: Taylor, Elliott * COMMENT: OCD max
34
+ Overconsolidation ratio (Pc/Po) * PI: Taylor, Elliott * COMMENT: min
35
+ Comment 3 (continued) (Comm 3) * PI: Taylor, Elliott * COMMENT: OCD min
36
+ Coefficient (Coeff) * PI: Taylor, Elliott * COMMENT: of permeability at Pc (cm/s)
37
+ Compression index (Cc) * PI: Taylor, Elliott
38
+ Comment 4 (continued) (Comm 4) * PI: Taylor, Elliott * COMMENT: Cc index
39
+ Shear strength, primary [kPa] (Shear str) * PI: Taylor, Elliott * COMMENT: vane
40
+ Sand [%] (Sand) * PI: Taylor, Elliott
41
+ Silt [%] (Silt) * PI: Taylor, Elliott
42
+ Size fraction < 0.002 mm, clay [%] (<2 µm) * PI: Taylor, Elliott
43
+ Calcium carbonate [%] (CaCO3) * PI: Taylor, Elliott * COMMENT: ship
44
+ Liquid limit (Liq limit) * PI: Taylor, Elliott * COMMENT: Atterberg limits
45
+ Plastic limit (Plastic limit) * PI: Taylor, Elliott * COMMENT: Atterberg limits
46
+ Plastic index (Plastic index) * PI: Taylor, Elliott * COMMENT: Atterberg limits
47
+ License: Creative Commons Attribution 3.0 Unported (CC-BY-3.0) (URI: https://creativecommons.org/licenses/by/3.0/)
48
+ Size: 874 data points
49
+ */
50
+ Event Sample label Sample comment Depth sed [m] Lithology Epoch WBD [g/cm**3] Water wm [%] Density grain [g/cm**3] Poros [% vol] Void Ratio (initial) Overb press [kPa] (effective overburden stress) Pc [kPa] (max) Pc [kPa] (min) Comment (PC max/min) Pc/Po (max) Comm 2 (OCD max) Pc/Po (min) Comm 3 (OCD min) Coeff (of permeability at Pc (cm/s)) Cc Comm 4 (Cc index) Shear str [kPa] (vane) Sand [%] Silt [%] <2 µm [%] CaCO3 [%] (ship) Liq limit (Atterberg limits) Plastic limit (Atterberg limits) Plastic index (Atterberg limits)
51
+ 110-671A 110-671A-1H-3 4.40 marl/chalk/Ls early Pleistocene 1.50 111.0 2.75 74.0 2.85 20 45 35 25 15 0.000001060 0.75 21.50 6.6 32.2 61.2 10.00 128.0 42.1 86.0
52
+ 110-671B 110-671B-3H-3 triaxial 20.95 calcareous mudstone early Pleistocene 1.52 83.0 2.88 66.8 2.39 105 140 35 0.000000828 38.70 155.0 74.0 81.0
53
+ 110-671B 110-671B-3H-3 21.30 calcareous mudstone early Pleistocene 1.66 66.9 2.66 62.4 1.66 107 160 125 53 18 0.000000336 0.62 34.00 5.7 47.3 47.0 38.70 84.0 30.1 54.0
54
+ 110-671B 110-671B-3H-4 22.90 calcareous mudstone early Pleistocene 1.59 81.8 2.91 70.2 2.32 115 50 40 -65 -75 28.82 38.70
55
+ 110-671B 110-671B-7H-3 triaxial 59.36 marl late Pliocene 1.73 48.0 2.94 58.9 1.42 346 166 -180 187.00 43.80 78.0 37.0 41.0
56
+ 110-671B 110-671B-7H-4 triaxial 60.83 marl late Pliocene 1.70 53.0 2.93 61.9 1.55 357 166 -191 30.00 88.0 39.0 49.0
57
+ 110-671B 110-671B-9H-2 vertical 76.80 marl early Pliocene 1.77 52.9 2.81 58.5 1.41 468 400 350 vertical -68 vertical -118 0.000000086 0.50 vertical 65.00 6.6 17.6 75.5 29.70 86.8 31.2 52.0
58
+ 110-671B 110-671B-9H-2 horizontal 76.90 marl early Pliocene 1.77 52.9 2.81 58.5 1.41 469 750 720 horizontal 281 horizontal 251 0.000000467 0.54 horizontal 65.00 6.6 17.6 75.5 29.70 86.8 31.2 52.0
59
+ 110-671B 110-671B-10H-3 triaxial 87.79 marl early Pliocene 1.72 49.0 2.86 61.4 1.4 547 240 -307 290.00 41.30 101.0 49.0 52.0
60
+ 110-671B 110-671B-10H-4 triaxial 89.33 marl early Pliocene 1.71 54.0 2.85 58.8 1.26 558 240 -318 195.00 40.80 85.0 35.0 50.0
61
+ 110-671B 110-671B-15X-4 135.50 mudstone/ash early Pleistocene 1.58 66.3 2.84 69.5 2.05 850 280 120 -570 -730 0.000000042 0.60 14.30
62
+ 110-671B 110-671B-17X-2 151.50 calcareous mudstone early Pleistocene 1.67 67.0 2.72 62.4 1.66 1003 600 530 -403 -473 0.000000095 0.72 44.00 3.3 42.8 53.7 1.00 175.0 40.9 134.0
63
+ 110-671B 110-671B-22X-2 199.10 calcareous mudstone early Pleistocene 1.84 47.8 2.65 53.2 1.14 1365 520 480 -845 -885 0.000000012 0.31 72.00 0.7 29.1 70.2 19.90 135.0 32.2 103.0
64
+ 110-671D 110-671D-NAC-1 452.70 claystone late Miocene? 1.65 69.3 2.52 60.9 1.56 3472 117.00 0.0 30.6 69.4 0.20 128.0 46.1 82.6
65
+ 110-671D 110-671D-NAC-2 454.10 claystone late Miocene? 1.75 58.9 2.67 58.4 1.41 3483 108.00 0.0 19.8 80.2 0.30 123.0 52.4 71.0
66
+ 110-671C 110-671C-1X-1 496.70 claystone late Miocene? 1.58 69.8 2.92 58.4 2.04 3808 3000 -808 0.000000000 0.30
67
+ 110-672A 110-672A-2H-3 vertical 7.70 calcareous mudstone early Pleistocene 1.60 90.3 2.96 69.8 2.32 36 200 175 vertical 164 vertical 139 vertical 0.000002650 0.85 vertical 19.50 20.1 34.9 43.5 35.00 87.4 87.4 56.0
68
+ 110-672A 110-672A-2H-3 horizontal 7.80 calcareous mudstone early Pleistocene 1.60 90.3 2.96 69.8 2.32 37 130 100 horizontal 93 horizontal 43 horizontal 0.000762000 0.47 horizontal 19.50 20.1 34.9 43.5 35.00 87.4 87.4 56.0
69
+ 110-672A 110-672A-5H-3 triaxial 36.24 calcareous mudstone late Pliocene 1.44 106.0 2.81 69.0 2.98 183 196 triaxial 13 0.000000037 134.00 48.60 142.0 142.0 100.0
70
+ 110-672A 110-672A-7H-3 55.20 calcareous mudstone late Pliocene 1.61 77.9 2.74 67.1 2.04 300 310 200 10 -100 0.000008920 0.85 43.00 21.3 53.2 24.9 27.60 116.0 116.0 81.0
71
+ 110-672A 110-672A-11H-3 93.50 calcareous mudstone early Plocene 1.24 56.6 2.65 69.8 2.31 540 340 300 -200 -240 0.000000093 0.62 93.00 3.4 28.2 68.3 41.50 113.0 113.0 80.0
72
+ 110-672A 110-672A-11H-4 triaxial 94.74 calcareous mudstone early Pliocene 1.53 80.0 68.0 548 460 triaxial -88 31.70 132.0 132.0 72.0
73
+ 110-672A 110-672A-13H-3 112.30 calcareous mudstone late Miocene 1.68 66.9 2.64 62.7 1.68 669 380 260 -289 -409 0.000000107 0.54 87.60 0.8 21.5 77.8 7.80 141.0 141.0 99.0
74
+ 110-672A 110-672A-19X-3 vertical 165.80 calcareous mudstone late Miocene? 1.48 120.0 2.65 74.5 2.92 982 66 53 vertical -916 vertical -929 vertical 0.000000250 0.65 vertical 0.4 32.6 67.0 0.00 165.0 165.0 97.0
75
+ 110-672A 110-672A-19X-3 vertical 165.90 calcareous mudstone late Miocene? 1.60 103.0 2.96 72.9 2.69 983 175 140 horizontal -808 vertical -843 vertical 0.000000057 1.03 vertical 0.4 32.6 67.0 0.00 165.0 165.0 97.0
76
+ 110-672A 110-672A-24X-3 213.30 claystone late Oligocene 1.72 60.9 2.70 59.8 1.49 1231 405 340 -826 -891 0.000008860 0.50 108.00 0.0 12.6 87.4 0.15 150.0 150.0 115.0
77
+ 110-673A 110-673A-2H-3-1 vertical 12.40 claystone Pleistocene/Miocene? 1.67 81.9 2.62 63.5 1.74 76 240 228 vertical 164 vertical 152 vertical 0.000000428 0.44 vertical 41.50 1.7 45.1 53.2 0.00 142.0 57.1 85.0
78
+ 110-673A 110-673A2H-3-2 vertical 12.50 claystone Pleistocene/Miocene? 1.67 81.9 2.62 63.5 1.74 77 300 260 vertical 223 vertical 183 vertical 0.000000647 0.67 vertical 41.50 1.7 45.1 53.2 0.00 142.0 57.1 85.0
79
+ 110-673B 110-673B-2H-3 12.00 claystone early Pleistocene 1.57 80.7 2.67 68.6 2.19 75 300 250 225 175 0.000000035 0.78 41.50 0.8 29.9 69.4 0.70 142.0 40.1 102.0
80
+ 110-676A 110-676A-2H-3 triaxial 10.64 calcareous mudstone early Pleistocene 1.45 109.0 2.95 72.9 3.23 51 20 triaxial -31 0.000000032
81
+ 110-676A 110-676A-3H-3 vertical 20.10 calcareous mudstone early Pleistocene 1.62 73.4 2.85 67.4 2.04 107 25 12 vertical -82 vertical -95 vertical 72.00 30.10 131.0 43.0 88.0
82
+ 110-676A 110-676A-3H-3 horizontal 20.20 calcareous mudstone early Pleistocene 1.63 73.4 2.90 67.8 2.08 108 108 70 horizontal 0 -38 horizontal 48.98 19.20
83
+ 110-676A 110-676A-5H-3 triaxial 39.12 calcareous mudstone early Pleistocene 1.54 83.0 2.86 74.6 2.36 248 33 triaxial -215 0.000000106 48.98 19.20
84
+ 110-676A 110-676A-6H-3 vertical 48.70 calcareous mudstone early Pleistocene 1.56 72.3 2.53 64.4 1.79 265 30 15 vertical -235 vertical -250 vertical 211.00 18.60 126.0 46.0 80.0
85
+ 110-676A 110-676A-6H-3 horizontal 48.80 calcareous mudstone early Pleistocene 1.56 72.3 2.51 64.2 1.77 266 30 20 horizontal -236 horizontal -246 horizontal 57.64 18.60
86
+ 110-676A 110-676A-8H-3 triaxial 67.65 calcareous mudstone late Pliocene 1.68 57.0 2.84 60.5 1.62 390 52 triaxial -338 0.000000014 57.64 18.60
87
+ 110-676A 110-676A-9H-3 vertical 77.20 calcareous mudstone late Pliocene 1.76 54.6 2.64 57.4 1.35 448 320 285 vertical -128 vertical -163 vertical 0.000000201 0.40 vertical 205.00 48.00 84.0 33.0 51.0
88
+ 110-676A 110-676A-9H-3 horizontal 77.25 calcareous mudstone late Pliocene 1.76 54.6 2.64 57.4 1.35 449 310 250 horizontal -139 horizontal -199 horizontal 0.000000152 0.54 horizontal 108.63 13.3 43.7 43.1 38.01 132.0 31.1 101.0
89
+ 110-676A 110-676A-11H-4 triaxial 97.63 calcareous mudstone late Pliocene 1.74 48.0 57.5 592 400 triaxial -192 108.63 13.3 43.7 43.1 36.01 132.0 31.1 101.0
90
+ 110-676A 110-676A-12X-3 vertical 105.60 calcareous mudstone late Pliocene 1.78 48.2 2.70 55.4 1.24 647 420 350 vertical -227 vertical -297 vertical 0.000000156 0.50 vertical 30.90 77.0 13.0 64.0
91
+ 110-676A 110-676A-12X-3 horizontal 105.70 calcareous mudstone late Pliocene 1.78 48.2 2.70 55.4 1.24 648 360 300 horizontal -288 horizontal -348 horizontal 0.000000061 0.44 horizontal 123.22 2.2 22.7 75.1 22.23 98.5 29.8 68.7