capra/lib.rs
1//! Dive planning library
2//! # Quick example
3//! A quick example showing how to use this library:
4//! ```
5//! use capra::modes::open_circuit::OpenCircuitParams;
6//! use capra_core::{common, deco};
7//! use time::Duration;
8//! use capra::modes::OpenCircuit;
9//! use capra::DivePlan;
10//! use capra_core::deco::zhl16::tissue_constants::TissueConstants;
11//! use capra_core::deco::zhl16::variant::Variant::B;
12//! let air = common::Gas::new(21, 0, 79).unwrap();
13//!
14//! // Make a new ZHL16 decompression model
15//! let zhl16 = deco::zhl16::ZHL16::new(
16//! deco::Tissue::default(),
17//! TissueConstants::new_by_variant(B),
18//! 50,
19//! 70,
20//! );
21//!
22//! // Make a dive segment
23//! let dive_segment = common::DiveSegment::new(
24//! common::SegmentType::DiveSegment,
25//! 45,
26//! 45,
27//! Duration::minutes(60),
28//! -10,
29//! 20,
30//! )
31//! .unwrap();
32//!
33//! let deco_gases = vec![(air, None)];
34//! let segments = vec![(dive_segment, air)];
35//! let parameters = OpenCircuitParams {
36//! ascent_rate: -10,
37//! descent_rate: 20,
38//! metres_per_bar: 10000.0 / common::DENSITY_SALTWATER,
39//! sac_bottom: 20,
40//! sac_deco: 15
41//! };
42//! let open_circuit = OpenCircuit::new(
43//! zhl16,
44//! &deco_gases,
45//! &segments,
46//! parameters
47//! );
48//!
49//! let results = open_circuit.plan();
50//!
51//! for (segment, gas) in results.total_segments() {
52//! println!("{:?}, {:?}", segment, gas);
53//! }
54//!
55//! for (gas, qty) in results.gas_used() {
56//! println!("{:?}: {}", gas, qty);
57//! }
58//! ```
59
60pub mod modes;
61pub mod parameters;
62pub mod plan;
63pub mod result;
64
65pub use plan::DivePlan;
66pub use result::DiveResult;
67
68/// A default, placeholder minimum ppO2.
69pub const PPO2_MINIMUM: f64 = 0.18;
70
71/// A default, placeholder maximum ppO2 for use during bottom segments.
72pub const PPO2_MAXIMUM_DIVE: f64 = 1.4;
73
74/// A default, placeholder maximum ppO2 for use during decompression stops.
75pub const PPO2_MAXIMUM_DECO: f64 = 1.6;