From 258a62edcc630088c781054abda1763d93caced6 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Fri, 21 Apr 2023 15:10:02 +0100 Subject: [PATCH] refactor: quantity hiearchy kinds fixed for some quantity definitions --- .../mp_units/systems/iec80000/quantities.h | 4 ++-- .../mp_units/systems/isq/electromagnetism.h | 23 ++++++++++--------- .../include/mp_units/systems/isq/mechanics.h | 11 +++++---- .../mp_units/systems/isq/space_and_time.h | 6 ++--- .../mp_units/systems/isq/thermodynamics.h | 7 +++--- 5 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/systems/iec80000/include/mp_units/systems/iec80000/quantities.h b/src/systems/iec80000/include/mp_units/systems/iec80000/quantities.h index d28b8e85..01c05cf3 100644 --- a/src/systems/iec80000/include/mp_units/systems/iec80000/quantities.h +++ b/src/systems/iec80000/include/mp_units/systems/iec80000/quantities.h @@ -49,10 +49,10 @@ QUANTITY_SPEC(storage_capacity, dimensionless); inline constexpr auto storage_size = storage_capacity; QUANTITY_SPEC(equivalent_binary_storage_capacity, storage_capacity); QUANTITY_SPEC(transfer_rate, storage_capacity / isq::duration); -QUANTITY_SPEC(period_of_data_elements, 1 / transfer_rate); +QUANTITY_SPEC(period_of_data_elements, isq::period, 1 / transfer_rate); QUANTITY_SPEC(binary_digit_rate, transfer_rate); inline constexpr auto bit_rate = binary_digit_rate; -QUANTITY_SPEC(period_of_binary_digits, 1 / binary_digit_rate); +QUANTITY_SPEC(period_of_binary_digits, isq::period, 1 / binary_digit_rate); inline constexpr auto bit_period = period_of_binary_digits; QUANTITY_SPEC(equivalent_binary_digit_rate, binary_digit_rate); inline constexpr auto equivalent_bit_rate = bit_rate; diff --git a/src/systems/isq/include/mp_units/systems/isq/electromagnetism.h b/src/systems/isq/include/mp_units/systems/isq/electromagnetism.h index a9ae5a8f..ababcc66 100644 --- a/src/systems/isq/include/mp_units/systems/isq/electromagnetism.h +++ b/src/systems/isq/include/mp_units/systems/isq/electromagnetism.h @@ -65,12 +65,12 @@ inline constexpr auto light_speed = speed_of_light; QUANTITY_SPEC(electric_constant, 1 / (magnetic_constant * pow<2>(speed_of_light))); inline constexpr auto permittivity_of_vacuum = electric_constant; QUANTITY_SPEC(permittivity, electric_flux_density / electric_field_strength, quantity_character::scalar); -QUANTITY_SPEC(relative_permittivity, permittivity / electric_constant); -QUANTITY_SPEC(electric_susceptibility, electric_polarization / electric_constant / electric_field_strength, - quantity_character::scalar); +QUANTITY_SPEC(relative_permittivity, dimensionless, permittivity / electric_constant); +QUANTITY_SPEC(electric_susceptibility, dimensionless, + electric_polarization / electric_constant / electric_field_strength, quantity_character::scalar); QUANTITY_SPEC(electric_flux, electric_flux_density* area, quantity_character::scalar); QUANTITY_SPEC(displacement_current_density, electric_flux_density / time); // vector -QUANTITY_SPEC(displacement_current, displacement_current_density* area, quantity_character::scalar); +QUANTITY_SPEC(displacement_current, electric_current, displacement_current_density* area, quantity_character::scalar); QUANTITY_SPEC(total_current, electric_current); QUANTITY_SPEC(total_current_density, electric_current_density); // vector QUANTITY_SPEC(magnetic_flux, magnetic_flux_density* area, quantity_character::scalar); @@ -80,8 +80,9 @@ QUANTITY_SPEC(magnetization, magnetic_moment / volume); // vector QUANTITY_SPEC(magnetic_field_strength, magnetization); // vector inline constexpr auto magnetizing_field = magnetic_field_strength; QUANTITY_SPEC(permeability, magnetic_flux_density / magnetic_field_strength, quantity_character::scalar); -QUANTITY_SPEC(relative_permeability, permeability / magnetic_constant); -QUANTITY_SPEC(magnetic_susceptibility, magnetization / magnetic_field_strength, quantity_character::scalar); +QUANTITY_SPEC(relative_permeability, dimensionless, permeability / magnetic_constant); +QUANTITY_SPEC(magnetic_susceptibility, dimensionless, magnetization / magnetic_field_strength, + quantity_character::scalar); QUANTITY_SPEC(magnetic_polarization, magnetic_constant* magnetization); // vector QUANTITY_SPEC(magnetic_dipole_moment, magnetic_constant* magnetic_moment); // vector QUANTITY_SPEC(coercivity, magnetic_field_strength, quantity_character::scalar); @@ -102,8 +103,8 @@ QUANTITY_SPEC(permeance, 1 / reluctance); QUANTITY_SPEC(inductance, linked_flux / electric_current); inline constexpr auto self_inductance = inductance; QUANTITY_SPEC(mutual_inductance, linked_flux / electric_current); -QUANTITY_SPEC(coupling_factor, mutual_inductance / pow<1, 2>(pow<2>(self_inductance))); -QUANTITY_SPEC(leakage_factor, pow<2>(coupling_factor)); +QUANTITY_SPEC(coupling_factor, dimensionless, mutual_inductance / pow<1, 2>(pow<2>(self_inductance))); +QUANTITY_SPEC(leakage_factor, dimensionless, pow<2>(coupling_factor)); QUANTITY_SPEC(conductivity, electric_current_density / electric_field_strength, quantity_character::scalar); QUANTITY_SPEC(resistivity, 1 / conductivity); // QUANTITY_SPEC(power, voltage* electric_current); // TODO conflicts with mechanical power @@ -124,12 +125,12 @@ inline constexpr auto complex_admittance = admittance; QUANTITY_SPEC(conductance_for_alternating_current, admittance); QUANTITY_SPEC(susceptance, admittance); QUANTITY_SPEC(modulus_of_admittance, admittance); -QUANTITY_SPEC(quality_factor, reactance / resistance); -QUANTITY_SPEC(loss_factor, 1 / quality_factor); +QUANTITY_SPEC(quality_factor, dimensionless, reactance / resistance); +QUANTITY_SPEC(loss_factor, dimensionless, 1 / quality_factor); QUANTITY_SPEC(loss_angle, angular_measure); QUANTITY_SPEC(active_power, 1 / period * (instantaneous_power * time)); QUANTITY_SPEC(apparent_power, voltage* electric_current); -QUANTITY_SPEC(power_factor, active_power / apparent_power); +QUANTITY_SPEC(power_factor, dimensionless, active_power / apparent_power); QUANTITY_SPEC(complex_power, voltage_phasor* electric_current_phasor); QUANTITY_SPEC(reactive_power, complex_power); QUANTITY_SPEC(non_active_power, pow<1, 2>(pow<2>(apparent_power))); diff --git a/src/systems/isq/include/mp_units/systems/isq/mechanics.h b/src/systems/isq/include/mp_units/systems/isq/mechanics.h index 4b4e8e4b..f3b11f9b 100644 --- a/src/systems/isq/include/mp_units/systems/isq/mechanics.h +++ b/src/systems/isq/include/mp_units/systems/isq/mechanics.h @@ -61,9 +61,9 @@ QUANTITY_SPEC(normal_stress, pressure, quantity_character::scalar); QUANTITY_SPEC(shear_stress, pressure, quantity_character::scalar); QUANTITY_SPEC(strain, dimensionless, quantity_character::tensor); QUANTITY_SPEC(relative_linear_strain, length / length); -QUANTITY_SPEC(shear_strain, displacement / thickness, quantity_character::scalar); +QUANTITY_SPEC(shear_strain, dimensionless, displacement / thickness, quantity_character::scalar); QUANTITY_SPEC(relative_volume_strain, volume / volume); -QUANTITY_SPEC(Poisson_number, width / length); +QUANTITY_SPEC(Poisson_number, dimensionless, width / length); QUANTITY_SPEC(modulus_of_elasticity, normal_stress / relative_linear_strain); inline constexpr auto Young_modulus = modulus_of_elasticity; QUANTITY_SPEC(modulus_of_rigidity, shear_stress / shear_strain); @@ -74,13 +74,14 @@ QUANTITY_SPEC(compressibility, 1 / volume * (volume / pressure)); 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(section_modulus, second_axial_moment_of_area / radial_distance); -QUANTITY_SPEC(static_friction_coefficient, static_friction_force / force, quantity_character::scalar); +QUANTITY_SPEC(static_friction_coefficient, dimensionless, static_friction_force / force, quantity_character::scalar); inline constexpr auto static_friction_factor = static_friction_coefficient; inline constexpr auto coefficient_of_static_friction = static_friction_coefficient; -QUANTITY_SPEC(kinetic_friction_factor, kinetic_friction_force / force, quantity_character::scalar); +QUANTITY_SPEC(kinetic_friction_factor, dimensionless, kinetic_friction_force / force, quantity_character::scalar); inline constexpr auto dynamic_friction_factor = kinetic_friction_factor; 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, dimensionless, drag_force / (mass_density * pow<2>(speed) * area), + quantity_character::scalar); inline constexpr auto drag_factor = drag_coefficient; QUANTITY_SPEC(dynamic_viscosity, shear_stress* length / velocity); QUANTITY_SPEC(kinematic_viscosity, dynamic_viscosity / mass_density); diff --git a/src/systems/isq/include/mp_units/systems/isq/space_and_time.h b/src/systems/isq/include/mp_units/systems/isq/space_and_time.h index 7b91c7d5..f71077ef 100644 --- a/src/systems/isq/include/mp_units/systems/isq/space_and_time.h +++ b/src/systems/isq/include/mp_units/systems/isq/space_and_time.h @@ -46,7 +46,7 @@ QUANTITY_SPEC(curvature, 1 / radius_of_curvature); QUANTITY_SPEC(area, pow<2>(length)); QUANTITY_SPEC(volume, pow<3>(length)); QUANTITY_SPEC(angular_measure, arc_length / radius); -QUANTITY_SPEC(rotational_displacement, path_length / radius); +QUANTITY_SPEC(rotational_displacement, angular_measure, path_length / radius); inline constexpr auto angular_displacement = rotational_displacement; QUANTITY_SPEC(phase_angle, angular_measure); QUANTITY_SPEC(solid_angular_measure, area / pow<2>(radius)); @@ -60,7 +60,7 @@ QUANTITY_SPEC(angular_acceleration, angular_velocity / duration); QUANTITY_SPEC(period_duration, duration); inline constexpr auto period = period_duration; QUANTITY_SPEC(time_constant, duration); -QUANTITY_SPEC(rotation, rotational_displacement); +QUANTITY_SPEC(rotation, dimensionless); QUANTITY_SPEC(frequency, 1 / period_duration); QUANTITY_SPEC(rotational_frequency, rotation / duration); QUANTITY_SPEC(angular_frequency, phase_angle / duration); @@ -75,7 +75,7 @@ inline constexpr auto phase_speed = phase_velocity; QUANTITY_SPEC(group_velocity, angular_frequency / angular_repetency); inline constexpr auto group_speed = group_velocity; QUANTITY_SPEC(damping_coefficient, 1 / time_constant); -QUANTITY_SPEC(logarithmic_decrement, damping_coefficient* period_duration); +QUANTITY_SPEC(logarithmic_decrement, dimensionless, damping_coefficient* period_duration); QUANTITY_SPEC(attenuation, 1 / distance); inline constexpr auto extinction = attenuation; QUANTITY_SPEC(phase_coefficient, phase_angle / path_length); diff --git a/src/systems/isq/include/mp_units/systems/isq/thermodynamics.h b/src/systems/isq/include/mp_units/systems/isq/thermodynamics.h index 4dd3abd5..56b1a796 100644 --- a/src/systems/isq/include/mp_units/systems/isq/thermodynamics.h +++ b/src/systems/isq/include/mp_units/systems/isq/thermodynamics.h @@ -55,9 +55,10 @@ QUANTITY_SPEC(specific_heat_capacity_at_constant_pressure, specific_heat_capacit QUANTITY_SPEC(specific_heat_capacity_at_constant_volume, specific_heat_capacity); QUANTITY_SPEC(specific_heat_capacity_at_saturated_vapour_pressure, specific_heat_capacity); QUANTITY_SPEC(thermal_diffusivity, thermal_conductivity / (mass_density * specific_heat_capacity_at_constant_pressure)); -QUANTITY_SPEC(ratio_of_specific_heat_capacities, +QUANTITY_SPEC(ratio_of_specific_heat_capacities, dimensionless, specific_heat_capacity_at_constant_pressure / specific_heat_capacity_at_constant_volume); -QUANTITY_SPEC(isentropic_exponent, volume / pressure * (pressure / volume)); // TODO how to handle "negative" part +QUANTITY_SPEC(isentropic_exponent, + volume / pressure * (pressure / volume)); // TODO how to handle "negative" part inline constexpr auto isentropic_expansion_factor = isentropic_exponent; QUANTITY_SPEC(entropy, kinetic_energy / thermodynamic_temperature); QUANTITY_SPEC(specific_entropy, entropy / mass); @@ -79,7 +80,7 @@ inline constexpr auto specific_Gibbs_function = specific_Gibbs_energy; QUANTITY_SPEC(Massieu_function, Helmholtz_energy / thermodynamic_temperature); // TODO how to handle "negative" part QUANTITY_SPEC(Planck_function, Gibbs_energy / thermodynamic_temperature); // TODO how to handle "negative" part QUANTITY_SPEC(Joule_Thomson_coefficient, thermodynamic_temperature / pressure); -QUANTITY_SPEC(efficiency_thermodynamics, work / heat); +QUANTITY_SPEC(efficiency_thermodynamics, dimensionless, work / heat); QUANTITY_SPEC(maximum_efficiency, thermodynamic_temperature / thermodynamic_temperature); QUANTITY_SPEC(specific_gas_constant, entropy / mass); QUANTITY_SPEC(mass_concentration_of_water, mass / volume);