From 9490c2af66f15f8d168bc7d2d7a4cbf42aee5794 Mon Sep 17 00:00:00 2001 From: Michael Reed <18372368+chakravala@users.noreply.github.com> Date: Mon, 14 Dec 2020 20:00:22 -0500 Subject: [PATCH] revised EM units and more CGS conversion tests --- Project.toml | 2 +- README.md | 15 +- src/UnitSystems.jl | 36 ++--- src/electromagnetic.jl | 346 +++++++++++++++++++++++++++++++---------- src/kinematic.jl | 141 ++++++++++++++--- src/thermodynamic.jl | 40 ++++- test/runtests.jl | 135 +++++++++++++++- 7 files changed, 581 insertions(+), 134 deletions(-) diff --git a/Project.toml b/Project.toml index 343859a..9c8105d 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "UnitSystems" uuid = "3a241a3c-2137-41aa-af5e-1388e404ca09" authors = ["Michael Reed"] -version = "0.2.1" +version = "0.2.2" [compat] julia = "1" diff --git a/README.md b/README.md index c597d2b..ecd07a6 100644 --- a/README.md +++ b/README.md @@ -46,12 +46,13 @@ Additional reference `UnitSystem` variants: `EMU`, `ESU`, `Gauss`, `LorentzHeavi Unt conversion documentation is at https://geophysics.crucialflow.com/dev/convert -**Unit conversions:** -Kinematic: `time`, `length`, `area`, `volume`, `wavenumber`, `fuelefficiency`, `frequency`, `frequencydrift`, `speed`, `acceleration`, `jerk`, `snap`, and `volumeflow`; -Mechanical: `mass`, `energy`, `power`, `force`, `pressure`, `momentum`, `angularmomentum`, `yank`, `areadensity`, `density`, `specificvolume`, `action`, `specificenergy`, `stiffness`, `irradiance`, `diffusivity`, `viscosity`, `lineardensity`, `massflow`, `radiantflux`, `powerdensity`, `compressibility`, `fluence`, and `rotationalinertia`; -Electromagnetic: `charge`, `current`, `voltage`, `capacitance`, `impedance`, `conductance`, `magneticflux`, `magneticinduction`, `inductance`, `electricinduction`, `chargedensity`, `currentdensity`, `conductivity`, `permittivity`, `permeability`, `electricfield`, `magneticfield`, `exposure`, `resistivity`, `linearchargedensity`, `magneticdipolemoment`, `mobility`, `reluctance`, `vectorpotential`, `magneticmoment`, `rigidity`, `susceptibility`, `electricflux`, and `electricdipolemoment`; -Thermodynamic: `temperature`, `entropy`, `specificentropy`, `thermalconductivity`, `thermalconductance`, `thermalresistance`, `thermalexpansion`, and `lapserate`; -Molar: `molarmass`, `molality`, `mole`, `molarity`, `molarvolume`, `molarentropy`, `molarenergy`, `molarconductivity`, `catalysis`, and `specificity`; -Photometric: `luminousflux`, `luminance`, `luminousenergy`, `luminousexposure`, and `luminousefficacy`. +**Derived Unit conversions:** + +Mechanics: `time`, `length`, `area`, `volume`, `wavenumber`, `fuelefficiency`, `frequency`, `frequencydrift`, `speed`, `acceleration`, `jerk`, `snap`, `volumeflow`, +`mass`, `massflow`, `lineardensity`, `areadensity`, `density`, `specificvolume`, `force`, `stiffness`, `pressure`, `compressibility`, `viscosity`, `diffusivity`, `rotationalinertia`, `momentum`, `angularmomentum`, `yank`, `energy`, `specificenergy`, `action`, `fluence`, `power`, `powerdensity`, `intensity`, `spectralflux`, `soundexposure`, `impedance`, `specificimpedance`, `admittance`, `compliance`, `inertance`; +Electromagnetics: `charge`, `chargedensity`, `linearchargedensity`, `exposure`, `mobility`, `current`, `currentdensity`, `resistance`, `conductance`, `resistivity`, `conductivity`, `capacitance`, `inductance`, `reluctance`, `permeance`, `permittivity`, `permeability`, `susceptibility`, `specificsusceptibility`, `demagnetizingfactor`, `vectorpotential`, `electricpotential`, `magneticpotential`, `electricfield`, `magneticfield`, `electricflux`, `magneticflux`, `electricfluxdensity`, `magneticfluxdensity`, `electricdipolemoment`, `magneticdipolemoment`, `electricpolarizability`, `magneticpolarizability`, `magneticmoment`, `magnetizability`, `magnetization`, `specificmagnetization`, `rigidity`, `polestrength`; +Thermodynamics: `temperature`, `entropy`, `specificentropy`, `volumeheatcapacity`, `thermalconductivity`, `thermalconductance`, `thermalresistance`, `thermalexpansion`, `lapserate`, +`molarmass`, `molality`, `mole`, `molarity`, `molarvolume`, `molarentropy`, `molarenergy`, `molarconductivity`, `molarsusceptibility`, `catalysis`, `specificity`, +`luminousflux`, `luminance`, `luminousenergy`, `luminousexposure`, `luminousefficacy`. Other similar packages include [PhysicalConstants.jl](https://github.com/JuliaPhysics/PhysicalConstants.jl), [MathPhysicalConstants.jl](https://github.com/LaGuer/MathPhysicalConstants.jl), [Unitful.jl](https://github.com/PainterQubits/Unitful.jl.git), [UnitfulSystems.jl](https://github.com/chakravala/UnitfulSystems.jl), [UnitfulUS.jl](https://github.com/PainterQubits/UnitfulUS.jl), [UnitfulAstro.jl](https://github.com/JuliaAstro/UnitfulAstro.jl), [UnitfulAtomic.jl](https://github.com/sostock/UnitfulAtomic.jl), [NaturallyUnitful.jl](https://github.com/MasonProtter/NaturallyUnitful.jl), and [UnitfulMoles.jl](https://github.com/rafaqz/UnitfulMoles.jl). diff --git a/src/UnitSystems.jl b/src/UnitSystems.jl index 75abbdd..19e8a05 100644 --- a/src/UnitSystems.jl +++ b/src/UnitSystems.jl @@ -10,17 +10,18 @@ export slugs, kilograms, lbm, meters, feet, rankine, kelvin, moles, molecules export UnitSystem, US, SI, CGS, CGS2019, CGSm, CGSe, HLU, FFF const Systems = (:Metric,:SI2019,:CODATA,:Conventional,:MTS,:English,:EnglishUS,:IAU,:SI1976,:Mixed,:ESU2019,:EMU2019,:EMU,:ESU,:Gauss,:LorentzHeaviside,:Thomson,:Kennelly,:Planck,:PlanckGauss,:Stoney,:Hartree,:Rydberg,:Schrodinger,:Electronic,:Natural,:NaturalGauss,:QCD,:QCDGauss,:QCDoriginal) -const Constants = (:boltzmann,:planck,:planckreduced,:lightspeed,:permeability,:luminousefficacy,:hyperfine,:lorentz,:rationalization,:molarmass,:electronmass) -const Physics = (:protonmass,:atomicmass,:planckmass,:stefan,:radiationdensity,:einstein,:impedance,:charge,:faraday,:josephson,:klitzing,:hartree,:rydberg,:bohr,:bohrreduced,:electronradius,:conductance,:magneticflux,:magneton,:hyperfine,:ampere,:biotsavart,:coulomb,:permittivity,:universal,:newton,:avogadro) +const Constants = (:hyperfine,:lightspeed,:planck,:planckreduced,:electronmass,:molarmass,:boltzmann,:permeability,:rationalization,:lorentz,:luminousefficacy) +const Physics = (:atomicmass,:protonmass,:planckmass,:newton,:einstein,:hartree,:rydberg,:bohr,:bohrreduced,:electronradius,:avogadro,:universal,:stefan,:radiationdensity,:permittivity,:coulomb,:ampere,:biotsavart,:charge,:faraday,:impedance,:conductance,:klitzing,:josephson,:magneticflux,:magneton) const Kinematic = (:time,:length,:area,:volume,:wavenumber,:fuelefficiency,:frequency,:frequencydrift,:speed,:acceleration,:jerk,:snap,:volumeflow) -const Mechanical = (:mass,:energy,:power,:force,:pressure,:momentum,:angularmomentum,:yank,:areadensity,:density,:specificvolume,:action,:specificenergy,:stiffness,:irradiance,:diffusivity,:viscosity,:lineardensity,:massflow,:radiantflux,:powerdensity,:compressibility,:fluence,:rotationalinertia) -const Molar = (:molarmass,:molality,:mole,:molarity,:molarvolume,:molarentropy,:molarenergy,:molarconductivity,:catalysis,:specificity) -const Electromagnetic = (:charge,:current,:voltage,:capacitance,:impedance,:conductance,:magneticflux,:magneticinduction,:inductance,:electricinduction,:chargedensity,:currentdensity,:conductivity,:permittivity,:permeability,:electricfield,:magneticfield,:exposure,:resistivity,:linearchargedensity,:magneticdipolemoment,:mobility,:reluctance,:vectorpotential,:magneticmoment,:rigidity,:susceptibility,:electricflux,:electricdipolemoment) +const Mechanical = (:mass,:massflow,:lineardensity,:areadensity,:density,:specificvolume,:force,:stiffness,:pressure,:compressibility,:viscosity,:diffusivity,:rotationalinertia,:momentum,:angularmomentum,:yank,:energy,:specificenergy,:action,:fluence,:power,:powerdensity,:intensity,:spectralflux,:soundexposure,:impedance,:specificimpedance,:admittance,:compliance,:inertance) +const Electromagnetic = (:charge,:chargedensity,:linearchargedensity,:exposure,:mobility,:current,:currentdensity,:resistance,:conductance,:resistivity,:conductivity,:capacitance,:inductance,:reluctance,:permeance,:permittivity,:permeability,:susceptibility,:specificsusceptibility,:demagnetizingfactor,:vectorpotential,:electricpotential,:magneticpotential,:electricfield,:magneticfield,:electricflux,:magneticflux,:electricfluxdensity,:magneticfluxdensity,:electricdipolemoment,:magneticdipolemoment,:electricpolarizability,:magneticpolarizability,:magneticmoment,:magnetizability,:magnetization,:specificmagnetization,:rigidity,:polestrength) +const Thermodynamic = (:temperature,:entropy,:specificentropy,:volumeheatcapacity,:thermalconductivity,:thermalconductance,:thermalresistance,:thermalexpansion,:lapserate) +const Molar = (:molarmass,:molality,:mole,:molarity,:molarvolume,:molarentropy,:molarenergy,:molarconductivity,:molarsusceptibility,:catalysis,:specificity) const Photometric = (:luminousflux,:luminance,:luminousenergy,:luminousexposure,:luminousefficacy) -const Thermodynamic = (:temperature,:entropy,:specificentropy,:thermalconductivity,:thermalconductance,:thermalresistance,:thermalexpansion,:lapserate) -const Convert = [Kinematic...,Mechanical...,Molar...,Electromagnetic...,Photometric...,Thermodynamic...] +const Mechanics = [Kinematic...,Mechanical...] +const Convert = [Mechanics...,Electromagnetic...,Thermodynamic...,Molar...,Photometric...] -listext(x) = join(x,"`, `","`, and `") +listext(x) = join(x,"`, `") # unit systems @@ -34,13 +35,12 @@ additional constants `molarmass`, `hyperfine`, `luminousefficacy`, `stefan`, `ra Additional reference `UnitSystem` variants: `EMU`, `ESU`, `Gauss`, `LorentzHeaviside`, `MTS`, `SI2019`, `CODATA`, `Conventional`, `IAU`, `EnglishUS`; and natural atomic units based on gravitational coupling `αG` and the fine structure `1/αinv` constant (`Planck`, `PlanckGauss`, `Stoney`, `Hartree`, `Rydberg`, `Schrodinger`, `Electronic`, `Natural`, `NaturalGauss`, `QCD`, `QCDGauss`, and `QCDoriginal`). -**Unit conversions:** -Kinematic: `$(listext(Kinematic))`; -Mechanical: `$(listext(Mechanical))`; -Electromagnetic: `$(listext(Electromagnetic))`; -Thermodynamic: `$(listext(Thermodynamic))`; -Molar: `$(listext(Molar))`; -Photometric: `$(listext(Photometric))`. +**Derived unit conversions:** + +Mechanics: `$(listext(Kinematic))`, `$(listext(Mechanical))`; +Electromagnetics: `$(listext(Electromagnetic))`; +Thermodynamics: `$(listext(Thermodynamic))`, +`$(listext(Molar))`, `$(listext(Photometric))`. """ #`Rᵤ,mᵤ,σ,ħ,μ₀,ε₀,kₑ,𝘦,𝔉,RK,Z₀,G₀` struct UnitSystem{kB,ħ,𝘤,μ₀,mₑ,λ,αL} end @pure UnitSystem{k,ħ,𝘤,μ,m,λ}() where {k,ħ,𝘤,μ,m,λ} = UnitSystem{k,ħ,𝘤,μ,m,λ,1}() @@ -109,7 +109,7 @@ const kcal = kcalₜₕ; const cal = kcal/1000 # calₜₕ thermal calorie const ΔνCs,Kcd,mP = 9192631770.0,683.002,2.176434e-8 # planck mass (kg) const NA,kB,𝘩,𝘤,𝘦 = 6.02214076e23,1.380649e-23,6.62607015e-34,299792458.,1.602176634e-19 const μₑᵤ,μₚᵤ,αinv,R∞ = 1/1822.888486209,1.007276466621,137.035999084,10973731.5681601 -const μ₀ = 2𝘩/𝘤/αinv/𝘦^2 # ≈ 4π*(1e-7+5.5e-17), exact charge +const αL,μ₀ = 0.01/𝘤,2𝘩/𝘤/αinv/𝘦^2 # ≈ 4π*(1e-7+5.5e-17), exact charge const ħ,δμ₀,μₚₑ,Rᵤ,mₑ = 𝘩/2π,μ₀-4π*1e-7,μₚᵤ/μₑᵤ,NA*kB,electronmass(𝘩) const RK1990,RK2014,KJ1990,KJ2014 = 25812.807,25812.8074555,4.835979e14,4.835978525e14 const ħ1990,ħ2014 = 2/RK1990/KJ1990^2/π,2/RK2014/KJ2014^2/π @@ -234,11 +234,11 @@ const BTUJ = energy(English)*BTUftlb # BTU⋅J⁻¹ # constant aliases const mpe, meu, mpu, ainv, aG = μₚₑ, μₑᵤ, μₚᵤ, αinv, αG -const Mu,Ru,SB,hh,cc,m0,e0,ke,me,mp,mu,ee,FF,Z0,G0,Eh,a0,re,g0,lP,ϵ₀ = Mᵤ,Rᵤ,σ,𝘩,𝘤,μ₀,ε₀,kₑ,mₑ,mₚ,mᵤ,𝘦,𝔉,Z₀,G₀,Eₕ,a₀,rₑ,g₀,ℓP,ε₀ +const Mu,Ru,SB,hh,cc,m0,e0,ke,me,mp,mu,ee,FF,Z0,G0,Eh,a0,re,g0,lP,aL,ϵ₀ = Mᵤ,Rᵤ,σ,𝘩,𝘤,μ₀,ε₀,kₑ,mₑ,mₚ,mᵤ,𝘦,𝔉,Z₀,G₀,Eₕ,a₀,rₑ,g₀,ℓP,αL,ε₀ export κ, GG, NA, kB, Rᵤ, σ, 𝘩, ħ, 𝘤, μ₀, ε₀, kₑ, mₑ, mₚ, mᵤ, 𝘦, 𝔉, Φ₀, Z₀, G₀, Eₕ, R∞, a₀, rₑ, KJ, RK, Ru, SB, hh, cc, m0, e0, ke, me, mp, mu, ee, FF, Z0, G0, Eh, a0, re, μB export αG, αinv, μₚₑ, μₑᵤ, μₚᵤ, mpe, meu, mpu, mP, δμ₀, Mᵤ, Mu, RH, Ry, ΔνCs, Kcd, ainv export cal, kcal, calₜₕ, kcalₜₕ, calᵢₜ, kcalᵢₜ, ℓP, g₀, g0, atm, lbm, BTUJ, BTUftlb, aG -export lP, tP, TP, lS, tS, mS, qS, lA, tA, mA, qA, lQCD, tQCD, mQCD, ϵ₀ +export lP, tP, TP, lS, tS, mS, qS, lA, tA, mA, qA, lQCD, tQCD, mQCD, ϵ₀, αL, aL # engineering unit systems docs diff --git a/src/electromagnetic.jl b/src/electromagnetic.jl index 82bfbff..c8aa360 100644 --- a/src/electromagnetic.jl +++ b/src/electromagnetic.jl @@ -3,7 +3,7 @@ # UnitSystems Copyright (C) 2020 Michael Reed """ -$(convertext(:charge,"sqrt(planck(U,S)*current(U,S)/voltage(U,S))")) +$(convertext(:charge,"sqrt(planck(U,S)*current(U,S)/electricpotential(U,S))")) Electric `charge` quantization (C, A⋅s), unit conversion factor. @@ -11,10 +11,10 @@ Electric `charge` quantization (C, A⋅s), unit conversion factor. julia> charge(EMU,Metric) # C⋅abC⁻¹ $(charge(EMU,Metric)) -julia> charge(EMU,ESU) # statC⋅abC⁻¹ +julia> charge(EMU,ESU) # stC⋅abC⁻¹ $(charge(EMU,ESU)) -julia> charge(ESU,Metric) # C⋅statC⁻¹ +julia> charge(ESU,Metric) # C⋅stC⁻¹ $(charge(ESU,Metric)) julia> charge(Metric,SI2019) # C⋅C⁻¹ @@ -48,66 +48,67 @@ $(current(Metric,SI2019)) @pure current(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/time(U,S)) """ -$(convertext(:voltage,"energy(U,S)/charge(U,S)")) +$(convertext(:electricpotential,"energy(U,S)/charge(U,S)")) -Electric potential difference or `energy` per `charge` (V, J⋅C⁻¹), unit conversion factor. +Voltage or `electricpotential` or `energy` per `charge` (V, J⋅C⁻¹), unit conversion factor. ```Julia -julia> voltage(EMU,Metric) # V⋅abV⁻¹ -$(voltage(EMU,Metric)) +julia> electricpotential(EMU,Metric) # V⋅abV⁻¹ +$(electricpotential(EMU,Metric)) -julia> voltage(EMU,ESU) # statV⋅abV⁻¹ -$(voltage(EMU,ESU)) +julia> electricpotential(EMU,ESU) # statV⋅abV⁻¹ +$(electricpotential(EMU,ESU)) -julia> voltage(ESU,Metric) # V⋅statV⁻¹ -$(voltage(ESU,Metric)) +julia> electricpotential(ESU,Metric) # V⋅statV⁻¹ +$(electricpotential(ESU,Metric)) -julia> voltage(Metric,SI2019) # V⋅V⁻¹ -$(voltage(Metric,SI2019)) +julia> electricpotential(Metric,SI2019) # V⋅V⁻¹ +$(electricpotential(Metric,SI2019)) ``` """ -@pure voltage(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)/charge(U,S)) +@pure electricpotential(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)/charge(U,S)) +const voltage = electricpotential """ -$(convertext(:capacitance,"charge(U,S)/voltage(U,S)")) +$(convertext(:capacitance,"charge(U,S)/electricpotential(U,S)")) -Electrical `capactiance` or `charge` per `voltage` (F, C⋅V⁻¹), unit conversion factor. +Electrical `capactiance` or `charge` per `electricpotential` (F, C⋅V⁻¹), unit conversion factor. ```Julia julia> capacitance(EMU,Metric) # F⋅abF⁻¹ $(capacitance(EMU,Metric)) -julia> capacitance(ESU,Metric) # F⋅statF⁻¹ +julia> capacitance(ESU,Metric) # F⋅cm⁻¹ $(capacitance(ESU,Metric)) julia> capactiance(Metric,SI2019) # F⋅F⁻¹ $(capacitance(Metric,SI2019)) ``` """ -@pure capacitance(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/voltage(U,S)) +@pure capacitance(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/electricpotential(U,S)) """ -$(convertext(:impedance,"voltage(U,S)/current(U,S)")) +$(convertext(:resistance,"electricpotential(U,S)/current(U,S)")) -Electrical `impedance` or `voltage` per `current` (Ω, S⁻¹, V⋅A⁻¹), unit conversion factor. +Electrical `resistance` or `electricpotential` per `current` (Ω, S⁻¹, V⋅A⁻¹), unit conversion factor. ```Julia -julia> impedance(EMU,Metric) # Ω⋅abΩ⁻¹ -$(impedance(EMU,Metric)) +julia> resistance(EMU,Metric) # Ω⋅abΩ⁻¹ +$(resistance(EMU,Metric)) -julia> impedance(ESU,Metric) # Ω⋅statΩ⁻¹ -$(impedance(ESU,Metric)) +julia> resistance(ESU,Metric) # Ω⋅statΩ⁻¹ +$(resistance(ESU,Metric)) -julia> impedance(Metric,SI2019) # Ω⋅Ω⁻¹ -$(impedance(Metric,SI2019)) +julia> resistance(Metric,SI2019) # Ω⋅Ω⁻¹ +$(resistance(Metric,SI2019)) ``` """ -@pure impedance(U::UnitSystem,S::UnitSystem) = unit(voltage(U,S)/current(U,S)) +@pure resistance(U::UnitSystem,S::UnitSystem) = unit(electricpotential(U,S)/current(U,S)) """ -$(convertext(:conductance,"voltage(U,S)/current(U,S)")) +$(convertext(:conductance,"electricpotential(U,S)/current(U,S)")) -Electrical `conductance` or `current` per `voltage` (S, Ω⁻¹, A⋅V⁻¹), unit conversion factor. +Electrical `conductance` or `current` per `electricpotential` (S, Ω⁻¹, A⋅V⁻¹), unit conversion factor. ```Julia julia> conductance(EMU,Metric) # S⋅abS⁻¹ @@ -120,7 +121,7 @@ julia> conductance(Metric,SI2019) # S⋅S⁻¹ $(conductance(Metric,SI2019)) ``` """ -@pure conductance(U::UnitSystem,S::UnitSystem) = unit(current(U,S)/voltage(U,S)) +@pure conductance(U::UnitSystem,S::UnitSystem) = unit(current(U,S)/electricpotential(U,S)) """ $(convertext(:magneticflux,"energy(U,S)/lorentz(U,S)/current(U,S)")) @@ -141,22 +142,22 @@ $(magneticflux(Metric,SI2019)) @pure magneticflux(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)/lorentz(U,S)/current(U,S)) """ -$(convertext(:magneticinduction,"mass(U,S)/lorentz(U,S)/current(U,S)/time(U,S)^2")) +$(convertext(:magneticfluxdensity,"mass(U,S)/lorentz(U,S)/current(U,S)/time(U,S)^2")) -Magnetic `magneticinduction` or `magneticflux` per `area` (T, Wb⋅m⁻²), unit conversion factor. +Magnetic induction or surface `magneticfluxdensity` (T, Wb⋅m⁻²), unit conversion factor. ```Julia -julia> magneticinduction(EMU,Metric) # T⋅G⁻¹ -$(magneticinduction(EMU,Metric)) +julia> magneticfluxdensity(EMU,Metric) # T⋅G⁻¹ +$(magneticfluxdensity(EMU,Metric)) -julia> magneticinduction(EMU,ESU) # statT⋅G⁻¹ -$(magneticinduction(EMU,ESU)) +julia> magneticfluxdensity(EMU,ESU) # statT⋅G⁻¹ +$(magneticfluxdensity(EMU,ESU)) -julia> magneticinduction(Metric,SI2019) # T⋅T⁻¹ -$(magneticinduction(Metric,SI2019)) +julia> magneticfluxdensity(Metric,SI2019) # T⋅T⁻¹ +$(magneticfluxdensity(Metric,SI2019)) ``` """ -@pure magneticinduction(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/lorentz(U,S)/current(U,S)/time(U,S)^2) +@pure magneticfluxdensity(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/lorentz(U,S)/current(U,S)/time(U,S)^2) """ $(convertext(:inductance,"mass(U,S)*area(U,S)/charge(U,S)")) @@ -179,22 +180,22 @@ $(inductance(Metric,SI2019)) # electromagnetics """ -$(convertext(:electricinduction,"charge(U,S)/area(U,S)")) +$(convertext(:electricfluxdensity,"charge(U,S)*rationalization(U,S)/area(U,S)")) -Electric field displacement or `electricinduction` (C⋅m⁻²), unit conversion factor. +Electric field displacement or surface `electricfluxdensity` (C⋅m⁻²), unit conversion factor. ```Julia -julia> electricinduction(EMU,Metric) # C⋅cm²⋅abC⁻¹⋅m⁻² -$(electricinduction(EMU,Metric)) +julia> electricfluxdensity(EMU,Metric) # C⋅cm²⋅abC⁻¹⋅m⁻² +$(electricfluxdensity(EMU,Metric)) -julia> electricinduction(ESU,Metric) # C⋅cm²⋅statC⁻¹⋅m⁼² -$(electricinduction(ESU,Metric)) +julia> electricfluxdensity(ESU,Metric) # C⋅cm²⋅statC⁻¹⋅m⁼² +$(electricfluxdensity(ESU,Metric)) -julia> electricinduction(Metric,SI2019) # C⋅C⁻¹ -$(electricinduction(Metric,SI2019)) +julia> electricfluxdensity(Metric,SI2019) # C⋅C⁻¹ +$(electricfluxdensity(Metric,SI2019)) ``` """ -@pure electricinduction(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)*rationalization(U,S)/area(U,S)) +@pure electricfluxdensity(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)*rationalization(U,S)/area(U,S)) """ $(convertext(:chargedensity,"charge(U,S)/volume(U,S)")) @@ -259,7 +260,7 @@ Absolute `permittivity` or `capacitance` per `length` (F⋅m⁻¹), unit convers julia> permittivity(EMU,Metric) # F⋅cm⋅abF⁻¹⋅m⁻¹ $(permittivity(EMU,Metric)) -julia> permittivity(ESU,Metric) # F⋅cm⋅statF⁻¹⋅m⁼¹ +julia> permittivity(ESU,Metric) # F⋅m⁼¹ $(permittivity(ESU,Metric)) julia> permittivity(Metric,SI2019) # F⋅F⁻¹ @@ -286,9 +287,9 @@ $(permeability(Metric,SI2019)) """ permeability(::UnitSystem,::UnitSystem) """ -$(convertext(:electricfield,"voltage(U,S)/length(U,S)")) +$(convertext(:electricfield,"electricpotential(U,S)/length(U,S)")) -Surface `electricflux` density or `electricfield` (V⋅m⁻¹), unit conversion factor. +The `electricpotential` per `length` or `electricfield` (V⋅m⁻¹), unit conversion factor. ```Julia julia> electricfield(EMU,Metric) # V⋅cm⋅abV⁻¹⋅m⁻¹ @@ -304,7 +305,7 @@ julia> electricfield(Metric,SI2019) # V⋅V⁻¹ $(electricfield(Metric,SI2019)) ``` """ -@pure electricfield(U::UnitSystem,S::UnitSystem) = unit(voltage(U,S)/length(U,S)) +@pure electricfield(U::UnitSystem,S::UnitSystem) = unit(electricpotential(U,S)/length(U,S)) """ $(convertext(:magneticfield,"current(U,S)*rationalization(U,S)*lorentz(U,S)/length(U,S)")) @@ -346,25 +347,24 @@ $(exposure(Metric,SI2019)) @pure exposure(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/mass(U,S)) """ -$(convertext(:resistivity,"impedance(U,S)*length(U,S)")) +$(convertext(:resistivity,"resistance(U,S)*length(U,S)")) -Electrical `resistivity` or `impedance` by `length` (Ω⋅m), unit conversion factor. +Electrical `resistivity` or `resistance` by `length` (Ω⋅m), unit conversion factor. ```Julia -julia> impedance(EMU,Metric) # Ω⋅m⋅abΩ⁻¹⋅cm⁻¹ -$(impedance(EMU,Metric)) +julia> resistance(EMU,Metric) # Ω⋅m⋅abΩ⁻¹⋅cm⁻¹ +$(resistance(EMU,Metric)) -julia> impedance(ESU,Metric) # Ω⋅m⋅statΩ⁻¹⋅cm⁻¹ -$(impedance(ESU,Metric)) +julia> resistance(ESU,Metric) # Ω⋅m⋅statΩ⁻¹⋅cm⁻¹ +$(resistance(ESU,Metric)) -julia> impedance(Metric,SI2019) # Ω⋅Ω⁻¹ -$(impedance(Metric,SI2019)) +julia> resistance(Metric,SI2019) # Ω⋅Ω⁻¹ +$(resistance(Metric,SI2019)) ``` """ -@pure resistivity(U::UnitSystem,S::UnitSystem) = unit(impedance(U,S)*length(U,S)) +@pure resistivity(U::UnitSystem,S::UnitSystem) = unit(resistance(U,S)*length(U,S)) """ - linearchargedensity # C⋅m⁻¹ $(convertext(:linearchargedensity,"charge(U,S)/length(U,S)")) Amount of `linearchargedensity` or `charge` per `length` (C⋅m⁻¹), unit conversion factor. @@ -422,7 +422,7 @@ $(mobility(Metric,SI2019)) @pure mobility(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)*time(U,S)/mass(U,S)) """ -$(convertext(:reluctance,"1/inductance(U,S)")) +$(convertext(:reluctance,"rationalization(U,S)*lorentz(U,S)^2/inductance(U,S)")) Magnetic `reluctance` or magnetic resistance (H⁻¹, Gb⋅Mx⁻¹), unit conversion factor. @@ -437,7 +437,7 @@ julia> reluctance(Metric,SI2019) # H⋅H⁻¹ $(reluctance(Metric,SI2019)) ``` """ # reciprocal: permeance -- different concept from inductace but same units -@pure reluctance(U::UnitSystem,S::UnitSystem) = unit(inductance(S,U)*rationalization(U,S)*lorentz(U,S)^2) +@pure reluctance(U::UnitSystem,S::UnitSystem) = unit(rationalization(U,S)*lorentz(U,S)^2/inductance(U,S)) """ $(convertext(:vectorpotential,"magneticflux(U,S)/length(U,S)")) @@ -476,7 +476,7 @@ $(magneticmoment(Metric,SI2019)) @pure magneticmoment(U::UnitSystem,S::UnitSystem) = unit(magneticflux(U,S)*length(U,S)) """ -$(convertext(:rigidity,"magneticinduction(U,S)*length(U,S)")) +$(convertext(:rigidity,"magneticfluxdensity(U,S)*length(U,S)")) Electromagnetic `rigidity` (T⋅m), unit conversion factor. @@ -491,34 +491,34 @@ julia> rigidity(Metric,SI2019) # T⋅T⁻¹ $(rigidity(Metric,SI2019)) ``` """ -@pure rigidity(U::UnitSystem,S::UnitSystem) = unit(magneticinduction(U,S)*length(U,S)) +@pure rigidity(U::UnitSystem,S::UnitSystem) = unit(magneticfluxdensity(U,S)*length(U,S)) """ -$(convertext(:susceptibility,"1/permeability(U,S)")) +$(convertext(:susceptibility,"1/rationalization(U,S)")) -Magnetic `susceptibility` or `length` per `inductance` (m⋅H⁻¹), unit conversion factor. +Magnetic/electric volume `susceptibility` (dimensionless), unit conversion factor. ```Julia -julia> susceptibility(EMU,Metric) # H⋅cm⋅abH⁻¹⋅m⁻¹ +julia> susceptibility(EMU,Metric) $(susceptibility(EMU,Metric)) -julia> susceptibility(ESU,Metric) # H⋅cm⋅statH⁻¹⋅m⁼¹ +julia> susceptibility(ESU,Metric) $(susceptibility(ESU,Metric)) -julia> susceptibility(Metric,SI2019) # H⋅H⁻¹ +julia> susceptibility(Metric,SI2019) $(susceptibility(Metric,SI2019)) ``` -""" -@pure susceptibility(U::UnitSystem,S::UnitSystem) = permeability(S,U) +""" # magneticdipolemoment(U,S)/magneticfield(U,S)/volume(U,S) +@pure susceptibility(U::UnitSystem,S::UnitSystem) = unit(rationalization(S,U)) -# WARNING unchecked: rigidity, magneticmoment, vectorpotential, mobility, electricflux, linearchargedensity, exposure +# WARNING unchecked: rigidity, magneticmoment, vectorpotential, mobility, linearchargedensity, exposure -# CGS extra: magneticmoment, magneticpolarization, electricpolarization +# CGS extra: polarizability, permeance, magnetic-current? + density, magneticresistance """ -$(convertext(:electricflux,"voltage(U,S)*length(U,S)")) +$(convertext(:electricflux,"electricpotential(U,S)*length(U,S)")) -Amount of `electricflux` or `voltage` by `length` (V⋅m) # wikipedia CGS page has error ? +Amount of `electricflux` or `electricpotential` by `length` (V⋅m), unit conversion factor. ```Julia julia> electricflux(EMU,Metric) # V⋅m⋅abV⁻¹⋅cm⁻¹ @@ -534,7 +534,7 @@ julia> electricflux(Metric,SI2019) # V⋅V⁻¹ $(electricflux(Metric,SI2019)) ``` """ -@pure electricflux(U::UnitSystem,S::UnitSystem) = unit(voltage(U,S)*length(U,S)) +@pure electricflux(U::UnitSystem,S::UnitSystem) = unit(electricpotential(U,S)*length(U,S)) """ $(convertext(:electricdipolemoment,"charge(U,S)*length(U,S)")) @@ -551,8 +551,196 @@ $(electricdipolemoment(ESU,Metric)) julia> electricdipolemoment(Metric,Gauss)/1e-18 # D⋅C⁻¹⋅m⁻¹ $(electricdipolemoment(Metric,Gauss)/1e-18) -julia> electricdipolemoment(Metric,SI2019) # C⋅C⁻¹⋅ +julia> electricdipolemoment(Metric,SI2019) # C⋅C⁻¹ $(electricdipolemoment(Metric,SI2019)) ``` """ @pure electricdipolemoment(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)*length(U,S)) + +""" +$(convertext(:magneticpotential,"magneticflux(U,S)*reluctance(U,S)")) + +Magnetomotive force or `magneticpotential` (A, Gb), unit conversion factor. + +```Julia +julia> magneticpotential(EMU,Metric) # A⋅Gb⁻¹ +$(magneticpotential(EMU,Metric)) + +julia> magneticpotential(Metric,SI2019) # A⋅A⁻¹ +$(magneticpotential(Metric,SI2019)) +``` +""" +@pure magneticpotential(U::UnitSystem,S::UnitSystem) = unit(magneticflux(U,S)*reluctance(U,S)) + +""" +$(convertext(:polestrength,"magneticdipolemoment(U,S)/length(U,S)")) + +Magnetic `polestrength` is analogous to `charge` (A⋅m⁻¹), unit conversion factor. + +```Julia +julia> polestrength(EMU,Metric) # A⋅m⁻¹⋅pole⁻¹ +$(polestrength(EMU,Metric)) + +julia> polestrength(Metric,SI2019) # A⋅A⁻¹⋅ +$(polestrength(Metric,SI2019)) +``` +""" +@pure polestrength(U::UnitSystem,S::UnitSystem) = unit(magneticdipolemoment(U,S)/length(U,S)) + +""" +$(convertext(:permeance,"1/reluctance(U,S)")) + +Magnetic `permeance` or magnetic conductance (H, Mx⋅Gb⁻¹), unit conversion factor. + +```Julia +julia> permeance(EMU,Metric) # abH⋅H⁻¹ +$(permeance(EMU,Metric)) + +julia> permeance(ESU,Metric) # statH⋅H⁻¹ +$(permeance(ESU,Metric)) + +julia> permeance(Metric,SI2019) # H⋅H⁻¹ +$(permeance(Metric,SI2019)) +``` +""" +@pure permeance(U::UnitSystem,S::UnitSystem) = reluctance(S,U) + + +""" +$(convertext(:specificsusceptibility,"susceptibility(U,S)/density(U,S)")) + +Magnetic/electric mass specific `susceptibility` (m³⋅kg⁻¹), unit conversion factor. + +```Julia +julia> specificsusceptibility(EMU,Metric) # m³⋅g⋅kg⁻¹⋅cm⁻³ +$(specificsusceptibility(EMU,Metric)) + +julia> specificsusceptibility(ESU,Metric) # m³⋅g⋅kg⁻¹⋅cm⁻³ +$(specificsusceptibility(ESU,Metric)) + +julia> specificsusceptibility(Metric,SI2019) # m³⋅kg⋅kg⁻¹⋅m⁻³ +$(specificsusceptibility(Metric,SI2019)) +``` +""" +@pure specificsusceptibility(U::UnitSystem,S::UnitSystem) = unit(magneticdipolemoment(U,S)/magneticfield(U,S)/mass(U,S)) + +""" +$(convertext(:magnetizability,"magneticmoment(U,S)/magneticfluxdensity(U,S)")) + +Quantity of `magneticmoment` per `magneticfluxdensity` (m⁻¹), unit conversion factor. + +```Julia +julia> magnetizability(EMU,Metric) # cm⋅m⁻¹ +$(magnetizability(EMU,Metric)) + +julia> magnetizability(ESU,Metric) # cm⋅m⁻¹ +$(magnetizability(ESU,Metric)) + +julia> magnetizability(Metric,SI2019) # m⋅m⁻¹ +$(magnetizability(Metric,SI2019)) +``` +""" +@pure magnetizability(U::UnitSystem,S::UnitSystem) = unit(magneticmoment(U,S)/magneticfluxdensity(U,S)) + +""" +$(convertext(:electricpolarizability,"electricdipolemoment(U,S)/electricfield(U,S)")) + +Polarizability or `electricdipolemoment` per `electricfield` (C⋅m²⋅V⁻¹), unit conversion factor. + +```Julia +julia> electricpolarizability(EMU,Metric) # C⋅m²⋅abV⋅abC⁻¹⋅cm⁻²⋅V⁻¹ +$(electricpolarizability(EMU,Metric)) + +julia> electricpolarizability(ESU,Metric) # C⋅m²⋅statV⋅statC⁻¹⋅cm⁼²⋅V⁻¹ +$(electricpolarizability(ESU,Metric)) + +julia> electricpolarizability(Metric,Gauss) # D⋅cm²⋅V⁻¹⋅C⁻¹⋅m⁻²⋅abV⁻¹ +$(electricpolarizability(Metric,Gauss)) + +julia> electricpolarizability(Metric,SI2019) # C⋅V⋅C⁻¹⋅V⁻¹ +$(electricpolarizability(Metric,SI2019)) +``` +""" +@pure electricpolarizability(U::UnitSystem,S::UnitSystem) = unit(electricdipolemoment(U,S)/electricfield(U,S)) + +""" +$(convertext(:magneticpolarizability,"magneticdipolemoment(U,S)/magneticfield(U,S)")) + +Polarizability or `magneticdipolemoment` per `magneticfield` (m³), unit conversion factor. + +```Julia +julia> electricpolarizability(EMU,Metric) # m³⋅cm⁻³ +$(electricpolarizability(EMU,Metric)) + +julia> electricpolarizability(ESU,Metric) # m³⋅cm⁼³ +$(electricpolarizability(ESU,Metric)) + +julia> electricpolarizability(Metric,Gauss) # cm³⋅m⁻³ +$(electricpolarizability(Metric,Gauss)) + +julia> electricpolarizability(Metric,SI2019) +$(electricpolarizability(Metric,SI2019)) +``` +""" +@pure magneticpolarizability(U::UnitSystem,S::UnitSystem) = unit(magneticdipolemoment(U,S)/magneticfield(U,S)) + +""" +$(convertext(:magnetization,"magneticmoment(U,S)/volume(U,S)")) + +Amount of `magneticmoment` per `volume` (Wb⋅m⁻²), unit conversion factor. + +```Julia +julia> magnetization(EMU,Metric) # Wb⋅cm²⋅Mx⁻¹⋅m⁻² +$(magnetization(EMU,Metric)) + +julia> magnetization(ESU,Metric) # Wb⋅cm²⋅statWb⁻¹⋅m⁻² +$(magnetization(ESU,Metric)) + +julia> magnetization(Metric,SI2019) # Wb⋅Wb⁻¹ +$(magnetization(Metric,SI2019)) +``` +""" +@pure magnetization(U::UnitSystem,S::UnitSystem) = unit(magneticmoment(U,S)/volume(U,S)) + +# specificmagnetization, mass magnetization = 1? +# magneticfluxdensity(Metric,EMU)/density(Metric,EMU) +""" +$(convertext(:specificmagnetization,"magneticmoment(U,S)/mass(U,S)")) + +Amount of `magneticmoment` per `mass` (Wb⋅m⋅kg⁻¹), unit conversion factor. + +```Julia +julia> specificmagnetization(EMU,Metric) # Wb⋅m⋅g⋅Mx⁻¹⋅cm⁻¹⋅kg⁻¹ +$(specificmagnetization(EMU,Metric)) + +julia> specificmagnetization(ESU,Metric) # Wb⋅m⋅g⋅statWb⁻¹⋅cm⁻¹⋅kg⁻¹ +$(specificmagnetization(ESU,Metric)) + +julia> specificmagnetization(Metric,SI2019) # Wb⋅Wb⁻¹ +$(specificmagnetization(Metric,SI2019)) +``` +""" +@pure specificmagnetization(U::UnitSystem,S::UnitSystem) = unit(magneticmoment(S,U)/mass(S,U)) + +""" +$(convertext(:demagnetizingfactor,"1/susceptibility(U,S)")) + +Quantitiy of `demagnetizingfactor` (dimensionless), unit conversion factor. + +```Julia +julia> demagnetizingfactor(EMU,Metric) +$(demagnetizingfactor(EMU,Metric)) + +julia> demagnetizingfactor(ESU,Metric) +$(demagnetizingfactor(ESU,Metric)) + +julia> demagnetizingfactor(Metric,SI2019) +$(demagnetizingfactor(Metric,SI2019)) +``` +""" +@pure demagnetizingfactor(U::UnitSystem,S::UnitSystem) = unit(rationalization(U,S)) + +# Gyrator-capacitor model alternative: +#@pure magneticfluxrate(U::UnitSystem,S::UnitSystem) = unit(magneticflux(U,S)/time(U,S)) +#@pure magneticfluxratedensity(U::UnitSystem,S::UnitSystem) = unit(magneticfluxrate(U,S)/area(U,S)) +#@pure magneticresistance(U::UnitSystem,S::UnitSystem) = unit(magneticpotential(U,S)/magneticfluxrate(U,S)) # not reluctance diff --git a/src/kinematic.jl b/src/kinematic.jl index 24d3a9e..2f844c9 100644 --- a/src/kinematic.jl +++ b/src/kinematic.jl @@ -65,11 +65,6 @@ $unit(v::Real,U::UnitSystem,S::UnitSystem) = v/$unit(U,S) ``` """ -# derived unit conversions - -#@pure heatcapacity(U::UnitSystem,S::UnitSystem) = (boltzmann(S)/boltzmann(U))/volume(U,S) -#@pure acoustic(U::UnitSystem,S::UnitSystem) = (planckreduced(S)^3*electronmass(U)^2*lightspeed(U)^4)/(planckreduced(U)^3*electronmass(S)^2*lightspeed(S)^4) - # spacetime @pure length(U::UnitSystem,S::UnitSystem,l=1) = unit((planckreduced(S)*electronmass(U)*lightspeed(U))/(planckreduced(U)*electronmass(S)*lightspeed(S)),l) @@ -570,7 +565,7 @@ $(action(English,Metric)) @pure action(U::UnitSystem,S::UnitSystem) = unit(momentum(U,S)*length(U,S)) """ -$(convertext(:stiffness,"energy(U,S)/area(U,S)")) +$(convertext(:stiffness,"mass(U,S)/time(U,S)^2")) Amount of `force` per `length` or `stiffness` (N⋅m⁻¹, J⋅m⁻², kg⋅s⁻²), unit conversion factor. @@ -588,22 +583,22 @@ $(stiffness(English,Metric)) @pure stiffness(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)/area(U,S)) """ -$(convertext(:irradiance,"power(U,S)/area(U,S)")) +$(convertext(:intensity,"power(U,S)/area(U,S)")) -Heat flux density or `power` per `area` or `irradiance` (W⋅m⁻², kg⋅s⁻³), unit conversion factor. +Heat flux density or irradiance or `power` per `area` (W⋅m⁻², kg⋅s⁻³), unit conversion factor. ```Julia -julia> irradiance(CGS,Metric) # kg⋅g⁻¹ -$(irradiance(CGS,Metric)) +julia> intensity(CGS,Metric) # kg⋅g⁻¹ +$(intensity(CGS,Metric)) -julia> irradiance(CGS,English) # slug⋅g⁻¹ -$(irradiance(CGS,English)) +julia> intensity(CGS,English) # slug⋅g⁻¹ +$(intensity(CGS,English)) -julia> irradiance(English,Metric) # kg⋅slug⁻¹ -$(irradiance(English,Metric)) +julia> intensity(English,Metric) # kg⋅slug⁻¹ +$(intensity(English,Metric)) ``` """ -@pure irradiance(U::UnitSystem,S::UnitSystem) = unit(power(U,S)/area(U,S)) +@pure intensity(U::UnitSystem,S::UnitSystem) = unit(power(U,S)/area(U,S)) """ $(convertext(:diffusivity,"planck(U,S)/mass(U,S)")) @@ -678,22 +673,22 @@ $(massflow(English,Metric)) @pure massflow(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/time(U,S)) """ -$(convertext(:radiantflux,"power(U,S)/length(U,S)")) +$(convertext(:spectralflux,"power(U,S)/length(U,S)")) -Spectral power or `radiantflux` (W⋅m⁻¹), unit conversion factor. +Spectral power or `radiantflux` per wave `length` (W⋅m⁻¹), unit conversion factor. ```Julia -julia> radiantflux(CGS,Metric) # kg⋅m⋅g⁻¹⋅cm⁻¹ -$(radiantflux(CGS,Metric)) +julia> spectralflux(CGS,Metric) # kg⋅m⋅g⁻¹⋅cm⁻¹ +$(spectralflux(CGS,Metric)) -julia> radiantflux(CGS,English) # slug⋅ft⋅g⁻¹⋅cm⁻¹ -$(radiantflux(CGS,English)) +julia> spectralflux(CGS,English) # slug⋅ft⋅g⁻¹⋅cm⁻¹ +$(spectralflux(CGS,English)) -julia> radiantflux(English,Metric) # kg⋅m⋅slug⁻¹⋅ft⁻¹ -$(radiantflux(English,Metric)) +julia> spectralflux(English,Metric) # kg⋅m⋅slug⁻¹⋅ft⁻¹ +$(spectralflux(English,Metric)) ``` """ -@pure radiantflux(U::UnitSystem,S::UnitSystem) = unit(power(U,S)/length(U,S)) +@pure spectralflux(U::UnitSystem,S::UnitSystem) = unit(power(U,S)/length(U,S)) """ $(convertext(:powerdensity,"power(U,S)/volume(U,S)")) @@ -769,3 +764,101 @@ $(rotationalinertia(English,Metric)) ``` """ @pure rotationalinertia(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)*area(U,S)) + +# acoustic + +""" +$(convertext(:soundexposure,"pressure(U,S)^2*time(U,S)")) + +Square of `pressure` by `time` or `soundexposure` (Pa²⋅s, N²⋅m⁻⁴), unit conversion factor. + +```Julia +julia> soundexposure(CGS,Metric) # Pa²⋅Ba⁻² +$(soundexposure(CGS,Metric)) + +julia> soundexposure(English,Metric) # Pa²⋅ft⁴⋅lb⁻² +$(soundexposure(English,Metric)) +``` +""" +@pure soundexposure(U::UnitSystem,S::UnitSystem) = pressure(U,S)^2/time(U,S) + +""" +$(convertext(:specificimpedance,"pressure(U,S)/speed(U,S)")) + +Characteristic specific acoustic impedance (Rayl, Pa⋅s⋅m⁻¹), unit conversion factor. + +```Julia +julia> specificimpedance(CGS,Metric) # Pa⋅cm⋅m⁻¹⋅Ba⁻¹ +$(specificimpedance(CGS,Metric)) + +julia> specificimpedance(English,Metric) # Pa⋅ft³⋅m⁻¹⋅lb⁻¹ +$(specificimpedance(English,Metric)) +``` +""" +@pure specificimpedance(U::UnitSystem,S::UnitSystem) = unit(pressure(U,S)/speed(U,S)) + +""" +$(convertext(:impedance,"specificimpedance(U,S)/area(U,S)")) + +Acoustic `impedance` (Rayl⋅m⁻², Pa⋅s⋅m⁻³, kg⋅s⁻¹⋅m⁻⁴), unit conversion factor. + +```Julia +julia> impedance(CGS,Metric) # Pa⋅cm³⋅m⁻³⋅Ba⁻¹ +$(impedance(CGS,Metric)) + +julia> impedance(English,Metric) # Pa⋅ft⁵⋅m⁻³⋅lb⁻¹ +$(impedance(English,Metric)) +``` +""" +@pure impedance(U::UnitSystem,S::UnitSystem) = unit(specificimpedance(U,S)/area(U,S)) + +""" +$(convertext(:admittance,"area(U,S)/specificimpedance(U,S)")) + +Acoustic `admittance` (m²⋅Rayl⁻¹, m³⋅s⁻¹⋅Pa⁻¹, m⁴⋅s⋅kg⁻¹), unit conversion factor. + +```Julia +julia> admittance(CGS,Metric) # Ba⋅m³⋅cm⁻³⋅Pa⁻¹ +$(admittance(CGS,Metric)) + +julia> admittance(English,Metric) # lb⋅m³⋅ft⁻⁵⋅Pa⁻¹ +$(admittance(English,Metric)) +``` +""" +@pure admittance(U::UnitSystem,S::UnitSystem) = unit(area(U,S)/specificimpedance(U,S)) + +""" +$(convertext(:compliance,"time(U,S)^2/mass(U,S)")) + +Acoustic `compliance` is reciprocal of `stiffness` (m⋅N⁻¹, m³⋅Pa⁻¹), unit conversion factor. + +```Julia +julia> compliance(CGS,Metric) # kg⋅g⁻¹ +$(compliance(CGS,Metric)) + +julia> compliance(CGS,English) # slug⋅g⁻¹ +$(compliance(CGS,English)) + +julia> compliance(English,Metric) # kg⋅slug⁻¹ +$(compliance(English,Metric)) +``` +""" +@pure compliance(U::UnitSystem,S::UnitSystem) = unit(time(U,S)^2/mass(U,S)) + +""" +$(convertext(:inertance,"mass(U,S)/length(U,S)^4")) + +Acoustic mass or `inertance` (kg⋅m⁴, Pa⋅s²⋅m⁻³), unit conversion factor. + +```Julia +julia> inertance(CGS,Metric) # kg⋅cm⁴⋅g⁻¹⋅m⁻⁴ +$(inertance(CGS,Metric)) + +julia> inertance(CGS,English) # slug⋅cm⁴⋅g⁻¹⋅ft⁻⁴ +$(inertance(CGS,English)) + +julia> inertance(English,Metric) # kg⋅ft⁴⋅slug⁻¹⋅m⁻⁴ +$(inertance(English,Metric)) +``` +""" +@pure inertance(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/length(U,S)^4) diff --git a/src/thermodynamic.jl b/src/thermodynamic.jl index 6fb4bfc..ab69901 100644 --- a/src/thermodynamic.jl +++ b/src/thermodynamic.jl @@ -93,6 +93,27 @@ $(specificentropy(EnglishUS,English)) """ @pure specificentropy(U::UnitSystem,S::UnitSystem) = unit(specificenergy(U,S)/temperature(U,S)) +""" +$(convertext(:volumeheatcapacity,"entropy(U,S)/volume(U,S)")) + +The `entropy` per `volume` or `volumeheatcapacity` (J⋅K⁻¹⋅m⁻³), unit conversion factor. + +```Julia +julia> volumeheatcapacity(Metric,SI2019) # K⋅K⁻¹ +$(volumeheatcapacity(Metric,SI2019)) + +julia> volumeheatcapacity(CGS,Metric) # J⋅cm³⋅erg⁻¹⋅m⁻³ +$(volumeheatcapacity(CGS,Metric)) + +julia> volumeheatcapacity(English,SI2019) # J⋅ft²⋅°R⋅K⁻¹⋅lb⁻¹⋅m⁻³ +$(volumeheatcapacity(English,SI2019)) + +julia> volumeheatcapacity(EnglishUS,English) # ftUS⁵°R⋅°ft⁻⁵⋅°R⁻¹ +$(volumeheatcapacity(EnglishUS,English)) +``` +""" +@pure volumeheatcapacity(U::UnitSystem,S::UnitSystem) = unit(entropy(U,S)/volume(U,S)) + """ $(convertext(:thermalconductivity,"force(U,S)/time(U,S)/temperature(U,S)")) @@ -310,13 +331,28 @@ $(molarconductivity(ESU,Metric)) """ @pure molarconductivity(U::UnitSystem,S::UnitSystem) = unit(conductivity(U,S)*area(U,S)/mole(U,S)) +""" +$(convertext(:molarsusceptibility,"specificsusceptibility(U,S)*molarmass(U,S)")) + +Magnetic/electric molar mass `susceptibility` (m³⋅mol⁻¹), unit conversion factor. + +```Julia +julia> molarsusceptibility(CGS,Metric) # m³⋅cm⁻³ +$(molarsusceptibility(CGS,Metric)) + +julia> molarsusceptibility(Metric,SI2019) # m³⋅mol⋅mol⁻¹⋅cm⁻³ +$(molarsusceptibility(Metric,SI2019)) +``` +""" +@pure molarsusceptibility(U::UnitSystem,S::UnitSystem) = unit(specificsusceptibility(U,S)*molarmass(U,S)) + """ $(convertext(:catalysis,"mole(U,S)/time(U,S)")) -Catalytic activity or `mole` per `time` or `catalysis` (kat, mol⁻¹), unit conversion factor. +Catalytic activity or `mole` per `time` or `catalysis` (kat, mol⋅s⁻¹), unit conversion factor. ```Julia -julia> catalysis(English,Metric) # kat⋅slug-mol +julia> catalysis(English,Metric) # kat⋅s⋅slug-mol⁻¹ $(catalysis(English,Metric)) ``` """ diff --git a/test/runtests.jl b/test/runtests.jl index 00cded1..66ddee4 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,8 +1,5 @@ using UnitSystems, Test -@test molarmass(Natural) == molarmass(CGS) == 1000molarmass(Metric) -@test molarmass(CGS2019) == 1000molarmass(SI2019) - for S ∈ UnitSystems.Systems U = eval(S) S ≠ :IAU && @testset "UnitSystem: $S" begin @@ -245,3 +242,135 @@ for S ∈ UnitSystems.Systems end end end + +@testset "CGS conversions" begin + @test molarmass(Natural) == molarmass(CGS) == 1000molarmass(Metric) + @test molarmass(CGS2019) == 1000molarmass(SI2019) + + C = 100𝘤 + + @test charge(Metric,ESU) ≈ C/10 + @test charge(Metric,EMU) ≈ 1/10 + @test charge(Metric,Gauss) ≈ C/10 + + @test current(Metric,ESU) ≈ C/10 + @test current(Metric,EMU) ≈ 1/10 + @test current(Metric,Gauss) ≈ C/10 + + @test electricpotential(Metric,ESU) ≈ 1e8/C + @test electricpotential(Metric,EMU) ≈ 1e8 + @test electricpotential(Metric,Gauss) ≈ 1e8/C + + @test electricfield(Metric,ESU) ≈ 1e6/C + @test electricfield(Metric,EMU) ≈ 1e6 + @test electricfield(Metric,Gauss) ≈ 1e6/C + + @test electricfluxdensity(Metric,ESU) ≈ 4π*C/1e5 + @test electricfluxdensity(Metric,EMU) ≈ 4π/1e5 + @test electricfluxdensity(Metric,Gauss) ≈ 4π*C/1e5 + + @test electricdipolemoment(Metric,ESU) ≈ 10C + @test electricdipolemoment(Metric,EMU) ≈ 10 + @test electricdipolemoment(Metric,Gauss) ≈ 10C + + @test magneticdipolemoment(Metric,ESU) ≈ 1e3*C + @test magneticdipolemoment(Metric,EMU) ≈ 1e3 + @test magneticdipolemoment(Metric,Gauss) ≈ 1e3 + + @test magneticfield(Metric,ESU) ≈ 4π*C/1e3 + @test magneticfield(Metric,EMU) ≈ 4π/1e3 + @test magneticfield(Metric,Gauss) ≈ 4π/1e3 + + @test magneticfluxdensity(Metric,ESU) ≈ 1e4/C + @test magneticfluxdensity(Metric,EMU) ≈ 1e4 + @test magneticfluxdensity(Metric,Gauss) ≈ 1e4 + + @test magneticflux(Metric,ESU) ≈ 1e8/C + @test magneticflux(Metric,EMU) ≈ 1e8 + @test magneticflux(Metric,Gauss) ≈ 1e8 + + @test resistance(Metric,ESU) ≈ 1e9/C^2 + @test resistance(Metric,EMU) ≈ 1e9 + @test resistance(Metric,Gauss) ≈ 1e9/C^2 + + @test resistivity(Metric,ESU) ≈ 1e11/C^2 + @test resistivity(Metric,EMU) ≈ 1e11 + @test resistivity(Metric,Gauss) ≈ 1e11/C^2 + + @test capacitance(Metric,ESU) ≈ C^2/1e9 + @test capacitance(Metric,EMU) ≈ 1e-9 + @test capacitance(Metric,Gauss) ≈ C^2/1e9 + + @test inductance(Metric,ESU) ≈ 1e9/C^2 + @test inductance(Metric,EMU) ≈ 1e9 + @test inductance(Metric,Gauss) ≈ 1e9/C^2 + + # extra + + @test conductance(Metric,ESU) ≈ C^2/1e9 + @test conductance(Metric,EMU) ≈ 1e-9 + @test conductance(Metric,Gauss) ≈ C^2/1e9 + + @test chargedensity(Metric,ESU) ≈ C/1e7 + @test chargedensity(Metric,EMU) ≈ 1e-7 + @test chargedensity(Metric,Gauss) ≈ C/1e7 + + @test magneticpotential(Metric,ESU) ≈ 4π/10*C + @test magneticpotential(Metric,EMU) ≈ 4π/10 + @test magneticpotential(Metric,Gauss) ≈ 4π/10 + + @test susceptibility(Metric,ESU) ≈ 1/4π + @test susceptibility(Metric,EMU) ≈ 1/4π + @test susceptibility(Metric,Gauss) ≈ 1/4π + + # magnetisation ? + + #@test magneticpolarization(Metric,ESU) ≈ 1e2/4π/𝘤 + #@test magneticpolarization(Metric,EMU) ≈ 1e4/4π + #@test magneticpolarization(Metric,Gauss) ≈ 1e4/4π + + @test polestrength(Metric,ESU) ≈ 10C + @test polestrength(Metric,EMU) ≈ 10 + @test polestrength(Metric,Gauss) ≈ 10 + + #@test reluctance(Metric,ESU) ≈ 4π/1e9 ?N/A? + @test reluctance(Metric,EMU) ≈ 4π/1e9 + @test reluctance(Metric,Gauss) ≈ 4π/1e9 + + # other + + @test currentdensity(Metric,ESU) ≈ C/1e5 + @test currentdensity(Metric,EMU) ≈ 1e-5 + @test currentdensity(Metric,Gauss) ≈ C/1e5 + + @test permittivity(ESU,Metric) ≈ ε₀ + @test permeability(EMU,Metric) ≈ μ₀ + @test permeability(Gauss,Metric) ≈ μ₀ + + @test specificsusceptibility(ESU,Metric) ≈ 4π/1e3 + @test specificsusceptibility(EMU,Metric) ≈ 4π/1e3 + @test specificsusceptibility(Gauss,Metric) ≈ 4π/1e3 + + @test demagnetizingfactor(ESU,Metric) ≈ 1/4π + @test demagnetizingfactor(EMU,Metric) ≈ 1/4π + @test demagnetizingfactor(Gauss,Metric) ≈ 1/4π + + @test electricpolarizability(Metric,EMU) ≈ 1e-5 # ?? + @test electricpolarizability(Metric,ESU) ≈ 1e6/4π/ε₀ + @test electricpolarizability(Metric,Gauss) ≈ 1e6/4π/ε₀ + + @test magneticpolarizability(Metric,ESU) ≈ 1e6/4π + @test magneticpolarizability(Metric,EMU) ≈ 1e6/4π + @test magneticpolarizability(Metric,Gauss) ≈ 1e6/4π + + # uncertain: + @test electricflux(Metric,ESU) ≈ 1e10/C + @test electricflux(Metric,EMU) ≈ 1e10 + @test electricflux(Metric,Gauss) ≈ 1e10/C + @test magneticmoment(Metric,ESU) ≈ 1e10/C # prefer: 10/𝘤 + @test magneticmoment(Metric,EMU) ≈ 1e10 # prefer: 1e3 + @test magneticmoment(Metric,Gauss) ≈ 1e10 # prefer: 1e3 + @test specificmagnetization(ESU,Metric) ≈ 1e7/C # prefer: 1 + @test specificmagnetization(EMU,Metric) ≈ 1e7 # prefer: 1 + @test specificmagnetization(Gauss,Metric) ≈ 1e7 # prefer: 1 +end