use-physics 0.0.2

Composable facade crate for RustUse physics helpers
Documentation
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
#[cfg(feature = "density")]
pub use crate::{DensityError, density_of, mass_from_density, volume};

#[cfg(feature = "elasticity")]
pub use crate::{
    ElasticBar, ElasticMaterial, axial_deformation, axial_stiffness, bulk_modulus,
    bulk_modulus_from_youngs_and_poisson, change_in_length, change_in_volume,
    elastic_energy_density, elastic_energy_from_force_deformation,
    elastic_energy_from_spring_constant, final_length, force_from_axial_deformation,
    force_from_stress, is_common_poisson_ratio, normal_strain, normal_stress, poisson_ratio,
    pressure_change_from_bulk_modulus, shear_modulus, shear_modulus_from_youngs_and_poisson,
    shear_strain, shear_strain_from_modulus, shear_stress, shear_stress_from_modulus,
    strain_from_youngs_modulus, stress_from_youngs_modulus, transverse_strain_from_poisson_ratio,
    volume_strain, youngs_modulus, youngs_modulus_from_shear_and_poisson,
};

#[cfg(feature = "energy")]
pub use crate::{kinetic_energy, potential_energy, work};

#[cfg(all(feature = "collision", not(feature = "energy")))]
pub use crate::{
    Collision1D, CollisionBody1D, coefficient_of_restitution, collision_energy_loss_1d,
    collision_energy_loss_fraction_1d, collision_final_velocities_1d, collision_impulse_on_a,
    collision_impulse_on_b, collision_impulses_1d, elastic_collision_final_velocities_1d,
    is_perfectly_elastic, is_perfectly_inelastic, is_valid_restitution, kinetic_energy,
    kinetic_energy_loss, kinetic_energy_loss_fraction,
    perfectly_inelastic_collision_final_velocities_1d, perfectly_inelastic_collision_velocity_1d,
    relative_speed, relative_velocity, separation_speed_from_restitution, total_kinetic_energy_1d,
};

#[cfg(all(feature = "collision", feature = "energy"))]
pub use crate::{
    Collision1D, CollisionBody1D, coefficient_of_restitution, collision_energy_loss_1d,
    collision_energy_loss_fraction_1d, collision_final_velocities_1d, collision_impulse_on_a,
    collision_impulse_on_b, collision_impulses_1d, collision_kinetic_energy,
    elastic_collision_final_velocities_1d, is_perfectly_elastic, is_perfectly_inelastic,
    is_valid_restitution, kinetic_energy_loss, kinetic_energy_loss_fraction,
    perfectly_inelastic_collision_final_velocities_1d, perfectly_inelastic_collision_velocity_1d,
    relative_speed, relative_velocity, separation_speed_from_restitution, total_kinetic_energy_1d,
};

#[cfg(all(feature = "fluid", not(feature = "pressure")))]
pub use crate::{
    Fluid, PipeFlow, absolute_pressure, bernoulli_pressure, buoyant_force, continuity_area,
    continuity_velocity, displaced_volume_from_buoyant_force, drag_force, dynamic_pressure,
    dynamic_viscosity, hydrostatic_pressure, kinematic_viscosity, mass_flow_rate, reynolds_number,
    velocity_from_flow_rate, volumetric_flow_rate,
};

#[cfg(all(feature = "fluid", feature = "pressure"))]
pub use crate::{
    Fluid, PipeFlow, absolute_pressure, bernoulli_pressure, buoyant_force, continuity_area,
    continuity_velocity, displaced_volume_from_buoyant_force, drag_force, dynamic_pressure,
    dynamic_viscosity, fluid_hydrostatic_pressure, kinematic_viscosity, mass_flow_rate,
    reynolds_number, velocity_from_flow_rate, volumetric_flow_rate,
};

#[cfg(feature = "work")]
pub use crate::{
    ConstantForceWork, displacement_from_work, final_kinetic_energy_from_work, force_from_work,
    initial_kinetic_energy_from_work, net_work, spring_potential_energy, spring_work,
    work_against_gravity, work_at_angle, work_at_angle_degrees, work_by_friction, work_by_gravity,
    work_from_force_samples, work_from_kinetic_energy_change,
};

#[cfg(feature = "electricity")]
pub use crate::{
    COULOMB_CONSTANT, ElectricalLoad, charge_from_current_time, conductance, coulomb_force,
    current, current_from_charge_time, energy_from_power_time, energy_from_voltage_charge,
    parallel_resistance, power_from_current_resistance, power_from_voltage_current,
    power_from_voltage_resistance, resistance, resistance_from_conductance, series_resistance,
    voltage,
};

#[cfg(feature = "magnetism")]
pub use crate::{
    MagneticField, VACUUM_PERMEABILITY, magnetic_energy_density,
    magnetic_field_around_long_straight_wire, magnetic_field_at_center_of_loop,
    magnetic_field_inside_solenoid, magnetic_flux, magnetic_flux_degrees,
    magnetic_flux_density_from_flux, magnetic_force_magnitude_on_charge, magnetic_force_on_charge,
    magnetic_force_on_charge_degrees, magnetic_force_on_wire, magnetic_force_on_wire_degrees,
    magnetic_pressure,
};

#[cfg(feature = "electromagnetism")]
pub use crate::{
    ElectromagneticField, VACUUM_PERMITTIVITY, cyclotron_angular_frequency, cyclotron_frequency,
    cyclotron_radius, electric_field_energy_density, electric_field_for_velocity_selector,
    electric_field_from_magnetic_flux_density_in_vacuum, electric_force_on_charge,
    electromagnetic_energy_density, lorentz_force_magnitude_perpendicular, lorentz_force_scalar,
    lorentz_force_scalar_degrees, magnetic_field_energy_density,
    magnetic_flux_density_for_velocity_selector,
    magnetic_flux_density_from_electric_field_in_vacuum, magnetic_force_on_moving_charge,
    magnetic_force_on_moving_charge_degrees, poynting_magnitude,
    speed_from_permittivity_permeability, velocity_selector_speed,
};

#[cfg(all(feature = "electromagnetism", not(feature = "magnetism")))]
pub use crate::VACUUM_PERMEABILITY;

#[cfg(all(feature = "electromagnetism", feature = "magnetism"))]
pub use crate::ELECTROMAGNETISM_VACUUM_PERMEABILITY;

#[cfg(all(feature = "electromagnetism", not(feature = "nuclear")))]
pub use crate::SPEED_OF_LIGHT;

#[cfg(all(feature = "electromagnetism", feature = "nuclear"))]
pub use crate::ELECTROMAGNETISM_SPEED_OF_LIGHT;

#[cfg(all(
    feature = "relativity",
    not(feature = "electromagnetism"),
    not(feature = "nuclear")
))]
pub use crate::SPEED_OF_LIGHT;

#[cfg(all(
    feature = "relativity",
    any(feature = "electromagnetism", feature = "nuclear")
))]
pub use crate::RELATIVITY_SPEED_OF_LIGHT;

#[cfg(feature = "quantum")]
pub use crate::{
    BOHR_RADIUS, ELECTRON_MASS, ELEMENTARY_CHARGE, MatterWave, PLANCK_CONSTANT, Photon,
    QuantumNumbers, REDUCED_PLANCK_CONSTANT, RYDBERG_ENERGY_EV, angular_frequency_from_energy,
    bohr_orbit_radius, de_broglie_wavelength, de_broglie_wavelength_from_mass_velocity,
    electron_volts_to_joules, energy_from_angular_frequency, frequency_from_photon_energy,
    hydrogen_energy_level_ev, hydrogen_transition_energy_ev, hydrogen_transition_wavelength,
    is_valid_azimuthal_quantum_number, is_valid_magnetic_quantum_number,
    is_valid_principal_quantum_number, is_valid_quantum_numbers, is_valid_spin_twice,
    joules_to_electron_volts, minimum_energy_uncertainty, minimum_momentum_uncertainty,
    minimum_position_uncertainty, minimum_time_uncertainty, momentum_from_de_broglie_wavelength,
    photon_energy_from_frequency, photon_energy_from_wavelength, photon_momentum_from_energy,
    photon_momentum_from_wavelength, wavelength_from_photon_energy,
};

#[cfg(all(
    feature = "quantum",
    not(feature = "electromagnetism"),
    not(feature = "nuclear"),
    not(feature = "relativity")
))]
pub use crate::SPEED_OF_LIGHT;

#[cfg(all(
    feature = "quantum",
    any(
        feature = "electromagnetism",
        feature = "nuclear",
        feature = "relativity"
    )
))]
pub use crate::QUANTUM_SPEED_OF_LIGHT;

#[cfg(feature = "plasma")]
pub use crate::{
    BOLTZMANN_CONSTANT, ElectronPlasma, PROTON_MASS, PlasmaSpecies, alfven_speed, charge_density,
    debye_length, debye_number, debye_sphere_volume, electron_gyrofrequency, electron_gyroradius,
    electron_plasma_angular_frequency, electron_plasma_frequency, electron_thermal_speed,
    gyro_angular_frequency, gyrofrequency, gyroradius, ion_plasma_angular_frequency,
    is_quasi_neutral, is_valid_coulomb_logarithm, particle_thermal_speed, plasma_beta,
    plasma_pressure, total_plasma_pressure,
};

#[cfg(all(feature = "plasma", not(feature = "quantum")))]
pub use crate::{ELECTRON_MASS, ELEMENTARY_CHARGE};

#[cfg(all(feature = "plasma", feature = "quantum"))]
pub use crate::{PLASMA_ELECTRON_MASS, PLASMA_ELEMENTARY_CHARGE};

#[cfg(all(feature = "plasma", not(feature = "electromagnetism")))]
pub use crate::VACUUM_PERMITTIVITY;

#[cfg(all(feature = "plasma", feature = "electromagnetism"))]
pub use crate::PLASMA_VACUUM_PERMITTIVITY;

#[cfg(all(
    feature = "plasma",
    not(feature = "magnetism"),
    not(feature = "electromagnetism")
))]
pub use crate::VACUUM_PERMEABILITY;

#[cfg(all(
    feature = "plasma",
    any(feature = "magnetism", feature = "electromagnetism")
))]
pub use crate::PLASMA_VACUUM_PERMEABILITY;

#[cfg(all(feature = "plasma", not(feature = "magnetism")))]
pub use crate::magnetic_pressure;

#[cfg(all(feature = "plasma", feature = "magnetism"))]
pub use crate::plasma_magnetic_pressure;

#[cfg(feature = "force")]
pub use crate::{STANDARD_GRAVITY, earth_weight, force, impulse, weight};

#[cfg(feature = "torque")]
pub use crate::{
    LeverForce, TorqueSystem, angular_acceleration_from_torque, balancing_force,
    balancing_lever_arm, force_from_torque, is_rotational_equilibrium, lever_arm_from_torque,
    moment_arm, moment_arm_degrees, net_torque, net_torque_from_force_lever_pairs,
    perpendicular_force_component, perpendicular_force_component_degrees,
    point_mass_moment_of_inertia, rod_moment_of_inertia_about_center,
    rod_moment_of_inertia_about_end, torque, torque_at_angle, torque_at_angle_degrees,
    torques_from_force_lever_pairs,
};

#[cfg(all(feature = "statics", not(feature = "torque")))]
pub use crate::{
    CantileverReaction, Force2D, PointForce2D, StaticSystem2D, can_static_friction_hold,
    cantilever_end_point_load_reaction, downslope_force_incline, force_angle_radians,
    force_magnitude, is_rotational_equilibrium, is_static_equilibrium_2d,
    is_translational_equilibrium_1d, is_translational_equilibrium_2d, maximum_static_friction,
    minimum_static_friction_coefficient_for_incline, moment_2d, moment_from_force_and_arm,
    net_force_1d, net_force_2d, net_moment, net_moment_2d, normal_force_horizontal_surface,
    normal_force_incline, required_static_friction, simply_supported_point_load_reactions,
    simply_supported_uniform_load_reactions,
};

#[cfg(all(feature = "statics", feature = "torque"))]
pub use crate::{
    CantileverReaction, Force2D, PointForce2D, StaticSystem2D, can_static_friction_hold,
    cantilever_end_point_load_reaction, downslope_force_incline, force_angle_radians,
    force_magnitude, is_static_equilibrium_2d, is_translational_equilibrium_1d,
    is_translational_equilibrium_2d, maximum_static_friction,
    minimum_static_friction_coefficient_for_incline, moment_2d, moment_from_force_and_arm,
    net_force_1d, net_force_2d, net_moment, net_moment_2d, normal_force_horizontal_surface,
    normal_force_incline, required_static_friction, simply_supported_point_load_reactions,
    simply_supported_uniform_load_reactions, statics_is_rotational_equilibrium,
};

#[cfg(feature = "gravity")]
pub use crate::{
    GRAVITATIONAL_CONSTANT, GravityBody, circular_orbital_period, circular_orbital_velocity,
    escape_velocity, gravitational_acceleration, gravitational_force,
    gravitational_potential_energy, near_surface_potential_energy, standard_weight,
};

#[cfg(all(feature = "gravity", not(feature = "force")))]
pub use crate::{STANDARD_GRAVITY, weight};

#[cfg(all(feature = "gravity", feature = "force"))]
pub use crate::gravity_weight;

#[cfg(feature = "orbit")]
pub use crate::{
    CentralBody, EllipticalOrbit, altitude_from_orbital_radius,
    apoapsis_from_semi_major_axis_eccentricity, apoapsis_speed, circular_orbital_speed,
    eccentricity_from_apsides, elliptical_orbital_period, escape_speed, gravitational_parameter,
    hohmann_delta_v_1, hohmann_delta_v_2, hohmann_total_delta_v, hohmann_transfer_semi_major_axis,
    hohmann_transfer_time, orbital_radius_from_altitude, orbital_radius_from_circular_speed,
    orbital_radius_from_period, periapsis_from_semi_major_axis_eccentricity, periapsis_speed,
    semi_major_axis_from_apsides, semi_major_axis_from_specific_energy,
    source_mass_from_gravitational_parameter, specific_orbital_energy, vis_viva_speed,
};

#[cfg(all(feature = "momentum", not(feature = "force")))]
pub use crate::{
    MovingMass, average_force_from_impulse, impulse, impulse_from_momentum_change,
    mass_from_momentum, momentum, recoil_velocity, total_momentum, two_body_total_momentum,
    velocity_from_momentum,
};

#[cfg(all(feature = "momentum", feature = "force"))]
pub use crate::{
    MovingMass, average_force_from_impulse, impulse_from_momentum_change, mass_from_momentum,
    momentum, momentum_impulse, recoil_velocity, total_momentum, two_body_total_momentum,
    velocity_from_momentum,
};

#[cfg(feature = "relativity")]
pub use crate::{
    RelativisticBody, beta, beta_from_rapidity, contracted_length, dilated_time,
    doppler_factor_longitudinal_from_beta, energy_momentum_relation, is_subluminal_speed,
    lorentz_factor, lorentz_factor_from_beta, mass_from_rest_energy,
    observed_frequency_longitudinal, proper_length, proper_time, rapidity_from_beta,
    relativistic_kinetic_energy, relativistic_momentum, rest_energy, rest_mass_from_momentum_speed,
    speed_from_beta, speed_from_rapidity, total_energy, velocity_addition,
};

#[cfg(feature = "motion")]
pub use crate::{MotionError, average_speed, displacement, distance, final_velocity};

#[cfg(feature = "oscillation")]
pub use crate::{
    SimpleHarmonicOscillator, SpringOscillator, acceleration, acceleration_from_displacement,
    angular_frequency_from_frequency, angular_frequency_from_period, critical_damping_coefficient,
    damped_angular_frequency, damping_ratio, damping_ratio_from_quality_factor,
    frequency_from_angular_frequency, frequency_from_period, is_critically_damped, is_overdamped,
    is_underdamped, kinetic_energy_from_total_and_potential, mass_from_spring_period,
    max_acceleration, max_speed, oscillation_displacement, oscillation_spring_potential_energy,
    oscillator_total_energy, pendulum_length_from_period, period_from_angular_frequency,
    period_from_frequency, quality_factor_from_damping_ratio, resonance_angular_frequency_natural,
    simple_pendulum_angular_frequency, simple_pendulum_frequency, simple_pendulum_period,
    spring_angular_frequency, spring_constant_from_period, spring_frequency, spring_period,
    velocity,
};

#[cfg(all(feature = "rotation", not(feature = "torque")))]
pub use crate::{
    AngularState, RotatingBody, angular_acceleration, angular_acceleration_from_torque,
    angular_displacement, angular_momentum, angular_velocity,
    angular_velocity_from_angular_momentum, angular_velocity_from_rotational_kinetic_energy,
    angular_velocity_from_tangential_speed, centripetal_acceleration_from_angular_velocity,
    centripetal_acceleration_from_tangential_speed, degrees_from_radians, final_angular_velocity,
    final_angular_velocity_from_displacement, final_angular_velocity_squared,
    hollow_sphere_moment_of_inertia, point_mass_moment_of_inertia, radians_from_degrees,
    radians_from_revolutions, revolutions_from_radians, rod_moment_of_inertia_about_center,
    rod_moment_of_inertia_about_end, rotational_kinetic_energy, solid_disk_moment_of_inertia,
    solid_sphere_moment_of_inertia, tangential_acceleration, tangential_speed,
    thin_ring_moment_of_inertia,
};

#[cfg(all(feature = "rotation", feature = "torque"))]
pub use crate::{
    AngularState, RotatingBody, angular_acceleration, angular_displacement, angular_momentum,
    angular_velocity, angular_velocity_from_angular_momentum,
    angular_velocity_from_rotational_kinetic_energy, angular_velocity_from_tangential_speed,
    centripetal_acceleration_from_angular_velocity, centripetal_acceleration_from_tangential_speed,
    degrees_from_radians, final_angular_velocity, final_angular_velocity_from_displacement,
    final_angular_velocity_squared, hollow_sphere_moment_of_inertia, radians_from_degrees,
    radians_from_revolutions, revolutions_from_radians, rotation_angular_acceleration_from_torque,
    rotation_point_mass_moment_of_inertia, rotation_rod_moment_of_inertia_about_center,
    rotation_rod_moment_of_inertia_about_end, rotational_kinetic_energy,
    solid_disk_moment_of_inertia, solid_sphere_moment_of_inertia, tangential_acceleration,
    tangential_speed, thin_ring_moment_of_inertia,
};

#[cfg(feature = "rigidbody")]
pub use crate::{
    MassProperties, RigidBody1D, angular_impulse_from_angular_velocity_change,
    angular_velocity_after_angular_impulse, center_moment_from_parallel_axis, center_of_mass_1d,
    combined_mass, impulse_from_velocity_change, linear_kinetic_energy, linear_momentum,
    parallel_axis_moment_of_inertia, reduced_mass, total_kinetic_energy, velocity_after_impulse,
};

#[cfg(all(
    feature = "rigidbody",
    not(feature = "rotation"),
    not(feature = "torque")
))]
pub use crate::{
    angular_momentum, hollow_sphere_moment_of_inertia, point_mass_moment_of_inertia,
    rod_moment_of_inertia_about_center, rod_moment_of_inertia_about_end, rotational_kinetic_energy,
    solid_disk_moment_of_inertia, solid_sphere_moment_of_inertia, thin_ring_moment_of_inertia,
};

#[cfg(all(feature = "rigidbody", not(feature = "rotation"), feature = "torque"))]
pub use crate::{
    angular_momentum, hollow_sphere_moment_of_inertia, rigidbody_point_mass_moment_of_inertia,
    rigidbody_rod_moment_of_inertia_about_center, rigidbody_rod_moment_of_inertia_about_end,
    rotational_kinetic_energy, solid_disk_moment_of_inertia, solid_sphere_moment_of_inertia,
    thin_ring_moment_of_inertia,
};

#[cfg(all(feature = "rigidbody", feature = "rotation"))]
pub use crate::{
    rigidbody_angular_momentum, rigidbody_hollow_sphere_moment_of_inertia,
    rigidbody_point_mass_moment_of_inertia, rigidbody_rod_moment_of_inertia_about_center,
    rigidbody_rod_moment_of_inertia_about_end, rigidbody_rotational_kinetic_energy,
    rigidbody_solid_disk_moment_of_inertia, rigidbody_solid_sphere_moment_of_inertia,
    rigidbody_thin_ring_moment_of_inertia,
};

#[cfg(feature = "particle")]
pub use crate::{
    ElementaryCharge, Particle, ParticleFamily, ParticleKind, ParticleStatistics, Spin,
    antiparticle, charge, charge_in_elementary_units, charge_thirds, family, has_rest_mass,
    is_antiparticle, is_baryon, is_boson, is_fermion, is_lepton, is_meson, is_quark,
    is_self_antiparticle, rest_mass_mev_c2, spin, statistics,
};

#[cfg(feature = "nuclear")]
pub use crate::{
    ATOMIC_MASS_UNIT_MEV_C2, DecayLaw, JOULES_PER_MEV, LN_2, NuclideNumbers, SPEED_OF_LIGHT,
    activity, binding_energy_mev_from_mass_defect_u, binding_energy_per_nucleon,
    decay_constant_from_half_life, decayed_fraction_from_decay_constant,
    decayed_quantity_from_decay_constant, elapsed_time_from_remaining_fraction,
    energy_from_mass_defect_kg, half_life_from_decay_constant, is_valid_nuclide_numbers,
    joules_to_mev, mass_defect_kg_from_energy, mean_lifetime, mev_to_joules, neutron_count,
    nuclei_from_activity, nucleon_count, remaining_fraction_from_decay_constant,
    remaining_fraction_from_half_life, remaining_quantity_from_decay_constant,
    remaining_quantity_from_half_life, specific_activity,
};

#[cfg(feature = "radiation")]
pub use crate::{
    Dose, RADIATION_JOULES_PER_MEV, RADIATION_SPEED_OF_LIGHT, RadiationBeam, RadiationKind, Shield,
    absorbed_dose, absorbed_energy_from_dose, accumulated_dose, attenuated_intensity,
    default_radiation_weighting_factor, dose_rate, effective_dose, energy_fluence, equivalent_dose,
    fluence, fluence_rate, half_value_layer, intensity, inverse_square_intensity, is_ionizing,
    is_particle_radiation, is_photon_radiation, isotropic_intensity,
    linear_attenuation_from_mass_attenuation, mass_attenuation_from_linear_attenuation,
    photon_flux_density, photon_flux_from_power, required_shield_thickness, tenth_value_layer,
    total_effective_dose, transmitted_fraction,
};

#[cfg(feature = "power")]
pub use crate::{PowerError, average_power, electrical_power, mechanical_power};

#[cfg(feature = "pressure")]
pub use crate::{PressureError, gauge_pressure, hydrostatic_pressure, pressure};

#[cfg(feature = "thermodynamics")]
pub use crate::{
    IDEAL_GAS_CONSTANT, ThermodynamicsError, celsius_to_kelvin, heat_energy, ideal_gas_pressure,
};