refactor: ISQ system refactored to benefit from the latest changes

This commit is contained in:
Mateusz Pusz
2023-02-13 18:55:54 +01:00
parent 4e3daf3f02
commit 3c2e6d06bb
4 changed files with 23 additions and 30 deletions

View File

@@ -22,10 +22,10 @@
#pragma once #pragma once
#include <mp_units/quantity_spec.h>
#include <mp_units/systems/isq/base_quantities.h> #include <mp_units/systems/isq/base_quantities.h>
#include <mp_units/systems/isq/mechanics.h> #include <mp_units/systems/isq/mechanics.h>
#include <mp_units/systems/isq/space_and_time.h> #include <mp_units/systems/isq/space_and_time.h>
#include <mp_units/quantity_spec.h>
namespace mp_units::isq { namespace mp_units::isq {

View File

@@ -22,9 +22,9 @@
#pragma once #pragma once
#include <mp_units/quantity_spec.h>
#include <mp_units/systems/isq/base_quantities.h> #include <mp_units/systems/isq/base_quantities.h>
#include <mp_units/systems/isq/space_and_time.h> #include <mp_units/systems/isq/space_and_time.h>
#include <mp_units/quantity_spec.h>
namespace mp_units::isq { namespace mp_units::isq {
@@ -39,7 +39,7 @@ QUANTITY_SPEC(linear_mass_density, mass / length);
inline constexpr auto linear_density = linear_mass_density; inline constexpr auto linear_density = linear_mass_density;
QUANTITY_SPEC(momentum, mass* velocity); // vector QUANTITY_SPEC(momentum, mass* velocity); // vector
QUANTITY_SPEC(force, mass* acceleration); // vector // TODO what is a correct equation here? QUANTITY_SPEC(force, mass* acceleration); // vector // TODO what is a correct equation here?
QUANTITY_SPEC(weight, force); // vector // TODO g? QUANTITY_SPEC(weight, force, mass* acceleration_of_free_fall); // vector // differs from ISO 80000
QUANTITY_SPEC(static_friction_force, force); // vector QUANTITY_SPEC(static_friction_force, force); // vector
inline constexpr auto static_friction = static_friction_force; inline constexpr auto static_friction = static_friction_force;
QUANTITY_SPEC(kinetic_friction_force, force); // vector QUANTITY_SPEC(kinetic_friction_force, force); // vector
@@ -69,10 +69,8 @@ inline constexpr auto Young_modulus = modulus_of_elasticity;
QUANTITY_SPEC(modulus_of_rigidity, shear_stress / shear_strain); QUANTITY_SPEC(modulus_of_rigidity, shear_stress / shear_strain);
inline constexpr auto shear_modulus = modulus_of_rigidity; inline constexpr auto shear_modulus = modulus_of_rigidity;
QUANTITY_SPEC(modulus_of_compression, pressure / relative_volume_strain); QUANTITY_SPEC(modulus_of_compression, pressure / relative_volume_strain);
// QUANTITY_SPEC(modulus_of_compression, -pressure / relative_volume_strain); // TODO how to handle "negative" part
inline constexpr auto bulk_modulus = modulus_of_compression; inline constexpr auto bulk_modulus = modulus_of_compression;
QUANTITY_SPEC(compressibility, 1 / volume * (volume / pressure)); QUANTITY_SPEC(compressibility, 1 / volume * (volume / pressure));
// QUANTITY_SPEC(compressibility, -1 / volume * (volume / pressure)); // TODO how to handle "negative" part
QUANTITY_SPEC(second_axial_moment_of_area, pow<2>(radial_distance) * area); QUANTITY_SPEC(second_axial_moment_of_area, pow<2>(radial_distance) * area);
QUANTITY_SPEC(second_polar_moment_of_area, pow<2>(radial_distance) * area); QUANTITY_SPEC(second_polar_moment_of_area, pow<2>(radial_distance) * area);
QUANTITY_SPEC(section_modulus, second_axial_moment_of_area / radial_distance); QUANTITY_SPEC(section_modulus, second_axial_moment_of_area / radial_distance);
@@ -83,20 +81,15 @@ QUANTITY_SPEC(kinetic_friction_factor, kinetic_friction_force / force, quantity_
inline constexpr auto dynamic_friction_factor = kinetic_friction_factor; inline constexpr auto dynamic_friction_factor = kinetic_friction_factor;
QUANTITY_SPEC(rolling_resistance_factor, force / force, quantity_character::scalar); QUANTITY_SPEC(rolling_resistance_factor, force / force, quantity_character::scalar);
QUANTITY_SPEC(drag_coefficient, drag_force / (mass_density * pow<2>(speed) * area), quantity_character::scalar); QUANTITY_SPEC(drag_coefficient, drag_force / (mass_density * pow<2>(speed) * area), quantity_character::scalar);
// QUANTITY_SPEC(drag_coefficient, mag<2>* drag_force / (mass_density * pow<2>(speed) * area),
// quantity_character::scalar); // TODO should we support that?
inline constexpr auto drag_factor = drag_coefficient; inline constexpr auto drag_factor = drag_coefficient;
QUANTITY_SPEC(dynamic_viscosity, shear_stress* length / velocity); QUANTITY_SPEC(dynamic_viscosity, shear_stress* length / velocity);
QUANTITY_SPEC(kinematic_viscosity, dynamic_viscosity / mass_density); QUANTITY_SPEC(kinematic_viscosity, dynamic_viscosity / mass_density);
QUANTITY_SPEC(surface_tension, force / length, quantity_character::scalar); // TODO what is a correct equation here? QUANTITY_SPEC(surface_tension, force / length, quantity_character::scalar); // TODO what is a correct equation here?
QUANTITY_SPEC(power, force* velocity, quantity_character::scalar); QUANTITY_SPEC(power, force* velocity, quantity_character::scalar);
// QUANTITY_SPEC(energy, force* length); QUANTITY_SPEC(energy, mass* pow<2>(length) / pow<2>(time)); // ISO 80000 defines this in thermodynamics
QUANTITY_SPEC(potential_energy, mass* pow<2>(length) / pow<2>(time)); // TODO what is a correct equation here? QUANTITY_SPEC(mechanical_energy, energy); // differs from ISO 80000
QUANTITY_SPEC(kinetic_energy, mass* pow<2>(speed)); QUANTITY_SPEC(potential_energy, mechanical_energy); // differs from ISO 80000
// QUANTITY_SPEC(kinetic_energy, mag<1, 2>* mass* pow<2>(speed)); // TODO should we support that? QUANTITY_SPEC(kinetic_energy, mechanical_energy, mass* pow<2>(speed)); // differs from ISO 80000
// TODO how to implement that?
// QUANTITY_SPEC(mechanical_energy, potential_energy + kinetic_energy);
QUANTITY_SPEC(mechanical_energy, potential_energy);
QUANTITY_SPEC(mechanical_work, force* displacement, quantity_character::scalar); QUANTITY_SPEC(mechanical_work, force* displacement, quantity_character::scalar);
inline constexpr auto work = mechanical_work; inline constexpr auto work = mechanical_work;
QUANTITY_SPEC(efficiency_mechanics, power / power); QUANTITY_SPEC(efficiency_mechanics, power / power);
@@ -104,6 +97,6 @@ QUANTITY_SPEC(mass_flow, mass_density* velocity); // vector
QUANTITY_SPEC(mass_flow_rate, mass_flow* area, quantity_character::scalar); QUANTITY_SPEC(mass_flow_rate, mass_flow* area, quantity_character::scalar);
QUANTITY_SPEC(mass_change_rate, mass / time); QUANTITY_SPEC(mass_change_rate, mass / time);
QUANTITY_SPEC(volume_flow_rate, velocity* area, quantity_character::scalar); QUANTITY_SPEC(volume_flow_rate, velocity* area, quantity_character::scalar);
QUANTITY_SPEC(action, mechanical_energy* time); QUANTITY_SPEC(action, energy* time);
} // namespace mp_units::isq } // namespace mp_units::isq

View File

@@ -22,8 +22,8 @@
#pragma once #pragma once
#include <mp_units/systems/isq/base_quantities.h>
#include <mp_units/quantity_spec.h> #include <mp_units/quantity_spec.h>
#include <mp_units/systems/isq/base_quantities.h>
namespace mp_units::isq { namespace mp_units::isq {
@@ -34,8 +34,7 @@ inline constexpr auto depth = height;
inline constexpr auto altitude = height; inline constexpr auto altitude = height;
QUANTITY_SPEC(thickness, width); QUANTITY_SPEC(thickness, width);
QUANTITY_SPEC(diameter, width); QUANTITY_SPEC(diameter, width);
// QUANTITY_SPEC(radius, mag<ratio{1, 2}> * diameter); // TODO should we support that? QUANTITY_SPEC(radius, width); // differs from ISO 80000
QUANTITY_SPEC(radius, width);
QUANTITY_SPEC(path_length, length); QUANTITY_SPEC(path_length, length);
inline constexpr auto arc_length = path_length; inline constexpr auto arc_length = path_length;
QUANTITY_SPEC(distance, path_length); QUANTITY_SPEC(distance, path_length);
@@ -52,9 +51,10 @@ inline constexpr auto angular_displacement = rotational_displacement;
QUANTITY_SPEC(phase_angle, angular_measure); QUANTITY_SPEC(phase_angle, angular_measure);
QUANTITY_SPEC(solid_angular_measure, area / pow<2>(radius)); QUANTITY_SPEC(solid_angular_measure, area / pow<2>(radius));
inline constexpr auto duration = time; inline constexpr auto duration = time;
QUANTITY_SPEC(velocity, position_vector / duration); // vector QUANTITY_SPEC(speed, length / time); // differs from ISO 80000
QUANTITY_SPEC(speed, distance / duration); // TODO length, path_length? QUANTITY_SPEC(velocity, speed, position_vector / duration); // vector // differs from ISO 80000
QUANTITY_SPEC(acceleration, velocity / duration); // vector QUANTITY_SPEC(acceleration, velocity / duration); // vector
QUANTITY_SPEC(acceleration_of_free_fall, acceleration); // not in ISO 80000
QUANTITY_SPEC(angular_velocity, angular_displacement / duration, quantity_character::vector); QUANTITY_SPEC(angular_velocity, angular_displacement / duration, quantity_character::vector);
QUANTITY_SPEC(angular_acceleration, angular_velocity / duration); QUANTITY_SPEC(angular_acceleration, angular_velocity / duration);
QUANTITY_SPEC(period_duration, duration); QUANTITY_SPEC(period_duration, duration);

View File

@@ -36,8 +36,8 @@ QUANTITY_SPEC(relative_pressure_coefficient, 1 / pressure * (pressure / thermody
QUANTITY_SPEC(pressure_coefficient, pressure / thermodynamic_temperature); QUANTITY_SPEC(pressure_coefficient, pressure / thermodynamic_temperature);
QUANTITY_SPEC(isothermal_compressibility, 1 / volume * (volume / pressure)); // TODO how to handle "negative" part QUANTITY_SPEC(isothermal_compressibility, 1 / volume * (volume / pressure)); // TODO how to handle "negative" part
QUANTITY_SPEC(isentropic_compressibility, 1 / volume * (volume / pressure)); // TODO how to handle "negative" part QUANTITY_SPEC(isentropic_compressibility, 1 / volume * (volume / pressure)); // TODO how to handle "negative" part
QUANTITY_SPEC(energy, mass* pow<2>(length) / pow<2>(time)); // energy definition moved to mechanics
QUANTITY_SPEC(heat, energy); // TODO what is a correct equation here? QUANTITY_SPEC(heat, mass* pow<2>(length) / pow<2>(time)); // TODO what is a correct equation here?
inline constexpr auto amount_of_heat = heat; inline constexpr auto amount_of_heat = heat;
QUANTITY_SPEC(latent_heat, heat); // TODO what is a correct equation here? QUANTITY_SPEC(latent_heat, heat); // TODO what is a correct equation here?
QUANTITY_SPEC(heat_flow_rate, heat / time); QUANTITY_SPEC(heat_flow_rate, heat / time);
@@ -61,12 +61,12 @@ QUANTITY_SPEC(isentropic_exponent, volume / pressure * (pressure / volume)); //
inline constexpr auto isentropic_expansion_factor = isentropic_exponent; inline constexpr auto isentropic_expansion_factor = isentropic_exponent;
QUANTITY_SPEC(entropy, kinetic_energy / thermodynamic_temperature); QUANTITY_SPEC(entropy, kinetic_energy / thermodynamic_temperature);
QUANTITY_SPEC(specific_entropy, entropy / mass); QUANTITY_SPEC(specific_entropy, entropy / mass);
QUANTITY_SPEC(internal_energy, energy); QUANTITY_SPEC(enthalpy, energy); // differs from ISO 80000
QUANTITY_SPEC(internal_energy, enthalpy); // differs from ISO 80000
inline constexpr auto thermodynamic_energy = internal_energy; inline constexpr auto thermodynamic_energy = internal_energy;
QUANTITY_SPEC(enthalpy, energy); QUANTITY_SPEC(Helmholtz_energy, internal_energy);
QUANTITY_SPEC(Helmholtz_energy, energy);
inline constexpr auto Helmholtz_function = Helmholtz_energy; inline constexpr auto Helmholtz_function = Helmholtz_energy;
QUANTITY_SPEC(Gibbs_energy, energy); QUANTITY_SPEC(Gibbs_energy, enthalpy);
inline constexpr auto Gibbs_function = Gibbs_energy; inline constexpr auto Gibbs_function = Gibbs_energy;
QUANTITY_SPEC(specific_energy, energy / mass); QUANTITY_SPEC(specific_energy, energy / mass);
QUANTITY_SPEC(specific_internal_energy, internal_energy / mass); QUANTITY_SPEC(specific_internal_energy, internal_energy / mass);