diff --git a/docs/blog/posts/isq-part-6-challenges.md b/docs/blog/posts/isq-part-6-challenges.md index 45674e30..f658813e 100644 --- a/docs/blog/posts/isq-part-6-challenges.md +++ b/docs/blog/posts/isq-part-6-challenges.md @@ -401,8 +401,8 @@ Some quantities are more complicated than others. For example, _power_ has: - var (e.g., _reactive power_), - complex quantities expressed in VA (volt-ampere) (e.g., _complex power_). -How should we model this? Maybe those should be two independent trees of quantities, each having -a different unit? +How should we model this? Maybe those should be two or three independent trees of quantities, each +having its own unit? ```mermaid flowchart TD @@ -411,14 +411,50 @@ flowchart TD power --- electromagnetism_power["electromagnetism_power | instantaneous_power
(instantaneous_voltage * instantaneous_electric_current)"] power --- active_power["active_power
(1 / period * instantaneous_power * time)
(re(complex_power))
"] - apparent_power["apparent_power
(voltage * electric_current)
(mod(complex_power))

[VA]"] + nonactive_power["nonactive_power
(mass * length2 / time3)
[VA]"] + nonactive_power --- reactive_power["reactive_power
(im(complex_power))
[var]"] + + complex_power["complex_power
{complex}
(voltage_phasor * electric_current_phasor)
(active_power + j * reactive_power)

[VA]"] + complex_power --- apparent_power["apparent_power
(voltage * electric_current)
(mod(complex_power))
"] +``` + +This will mean that we will not be able to add or compare _active power_, _reactive power_, and +_apparent power_, which probably makes a lot of sense. However, it also means that the following +will fail to compile: + +```cpp +quantity apparent = isq::apparent_power(100 * VA); +quantity active = isq::active_power(60 * W); +quantity q = sqrt(pow<2>(apparent) - pow<2>(active)); // Compile-time error +``` + +Also the following will not work: + +```cpp +quantity active = isq::active_power(60 * W); +quantity reactive = isq::reactive_power(40 * var); +quantity q = sqrt(pow<2>(active) + pow<2>(reactive)); // Compile-time error +``` + +If we want the above to work maybe we need to implement the tree as follows? + +```mermaid +flowchart TD + power["power
(mass * length2 / time3)
[W]"] + power --- mechanical_power["mechanical_power
(scalar_product(force, velocity))"] + power --- electromagnetism_power["electromagnetism_power | instantaneous_power
(instantaneous_voltage * instantaneous_electric_current)"] + power --- apparent_power["apparent_power
(voltage * electric_current)
(mod(complex_power))

[VA]"] + apparent_power --- active_power["active_power
(1 / period * instantaneous_power * time)
(re(complex_power))
"] apparent_power --- nonactive_power["nonactive_power
(sqrt(apparent_power2 - active_power2))
"] nonactive_power --- reactive_power["reactive_power
(im(complex_power))
[var]"] apparent_power --- complex_power["complex_power
{complex}
(voltage_phasor * electric_current_phasor)
(active_power + j * reactive_power)
"] ``` -This will mean that we will not be able to add or compare _active power_ with _apparent power_, -which probably makes a lot of sense. Again, ISQ does not provide a direct answer here. +However, the above allows direct addition and comparison of _active power_ and _nonactive power_, +and also will not complain if someone will try to use watt (W) as a unit of _apparent power_ or +_reactive power_. + +Again, ISQ does not provide a direct answer here. ## More base quantities?