diff --git a/Kernel/systems.wl b/Kernel/systems.wl index 82c4aec..26bee61 100644 --- a/Kernel/systems.wl +++ b/Kernel/systems.wl @@ -190,11 +190,11 @@ DimensionRules["ISQEM", x_] := DimensionRules["MetricEngineering", x] /. {"F" -> DimensionRules["EMU", x_] := x /. "Q" -> Sqrt["L" "M"] DimensionRules["ESU", x_] := x /. "Q" -> Sqrt["L"^3 "M"]/"T" DimensionRules["Gauss", x_] := x /. "Q" -> Sqrt["L"^3 "M"]/"T" -DimensionRules["Stoney",x_] := x //. {"\[CapitalTheta]" -> "M" "L"^2/"T"^2, "T" -> "L"} +DimensionRules["Stoney",x_] := x //. {"\[CapitalTheta]" -> "M", "N" -> "M", "T" -> "L"} DimensionRules["Electronic",x_] := DimensionRules["Stoney", x] /. "M" -> 1 DimensionRules["PlanckGauss",x_] := DimensionRules["Stoney", x] /. "L" -> 1/"M" DimensionRules["Planck",x_] := DimensionRules["PlanckGauss", x] /. "Q" -> "M" -DimensionRules["QCDoriginal",x_] := DimensionRules["PlanckGauss", x] /. "Q" -> 1 +(*DimensionRules["QCDoriginal",x_] := DimensionRules["PlanckGauss", x] /. "Q" -> 1*) DimensionRules["NaturalGauss",x_] := DimensionRules["PlanckGauss", x] /. "M" -> 1 DimensionRules["Rydberg",x_] := x //. {"\[CapitalTheta]" -> "M" "L"^2/"T"^2, "T" -> "L"^2 "M"} DimensionRules["Hartree",x_] := DimensionRules["Rydberg", x] /. "M" -> 1 @@ -214,7 +214,8 @@ DimensionSystem["Stoney"] := DimensionRules["Stoney","ISQEM"] DimensionSystem["Electronic"] := DimensionRules["Electronic","Stoney"] DimensionSystem["PlanckGauss"] := DimensionRules["PlanckGauss","Stoney"] DimensionSystem["Planck"] := DimensionRules["Planck","PlanckGauss"] -DimensionSystem["QCDoriginal"] := DimensionRules["QCDoriginal","PlanckGauss"] +(*DimensionSystem["QCDoriginal"] := DimensionRules["QCDoriginal","PlanckGauss"]*) +DimensionSystem["QCDoriginal"] := DimensionSystem["PlanckGauss"] DimensionSystem["Natural"] := AbstractUnitSystem["Natural"] DimensionSystem["NaturalGauss"] := DimensionRules["NaturalGauss","PlanckGauss"] DimensionSystem["Rydberg"] := DimensionRules["Rydberg","ISQEM"] diff --git a/Project.toml b/Project.toml index 8fc2ac4..347af7a 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "UnitSystems" uuid = "3a241a3c-2137-41aa-af5e-1388e404ca09" authors = ["Michael Reed"] -version = "0.3.6" +version = "0.3.7" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" diff --git a/README.md b/README.md index a97246c..be3da2d 100644 --- a/README.md +++ b/README.md @@ -59,11 +59,11 @@ Unit conversion documentation is at https://geophysics.crucialflow.com/dev/conve **Derived Unit conversions:** -Mechanics: `angle`, `solidangle`, `time`, `length`, `area`, `volume`, `wavenumber`, `angularwavenumber`, `fuelefficiency`, `numberdensity`, `frequency`, `angularfrequency`, `frequencydrift`, `speed`, `acceleration`, `jerk`, `snap`, `crackle`, `pop`, `volumeflow`, +Mechanics: `angle`, `solidangle`, `time`, `angulartime`, `length`, `angularlength`, `area`, `angulararea`, `volume`, `wavenumber`, `angularwavenumber`, `fuelefficiency`, `numberdensity`, `frequency`, `angularfrequency`, `frequencydrift`, `stagnance`, `speed`, `acceleration`, `jerk`, `snap`, `crackle`, `pop`, `volumeflow`, `etendue`, `photonintensity`, `photonirradiance`, `photonradiance`, `inertia`, `mass`, `massflow`, `lineardensity`, `areadensity`, `density`, `specificweight`, `specificvolume`, `force`, `specificforce`, `gravityforce`, `pressure`, `compressibility`, `viscosity`, `diffusivity`, `rotationalinertia`, `impulse`, `momentum`, `angularmomentum`, `yank`, `energy`, `specificenergy`, `action`, `fluence`, `power`, `powerdensity`, `irradiance`, `radiance`, `radiantintensity`, `spectralflux`, `spectralexposure`, `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`, `specificmagnetization`, `polestrength`; +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`, `electricdisplacement`, `magneticfluxdensity`, `electricdipolemoment`, `magneticdipolemoment`, `electricpolarizability`, `magneticpolarizability`, `magneticmoment`, `specificmagnetization`, `polestrength`; Thermodynamics: `temperature`, `entropy`, `specificentropy`, `volumeheatcapacity`, `thermalconductivity`, `thermalconductance`, `thermalresistivity`, `thermalresistance`, `thermalexpansion`, `lapserate`, -`molarmass`, `molality`, `mole`, `molarity`, `molarvolume`, `molarentropy`, `molarenergy`, `molarconductivity`, `molarsusceptibility`, `catalysis`, `specificity`, +`molarmass`, `molality`, `mole`, `molarity`, `molarvolume`, `molarentropy`, `molarenergy`, `molarconductivity`, `molarsusceptibility`, `catalysis`, `specificity`, `diffusionflux`, `luminousflux`, `luminousintensity`, `luminance`, `illuminance`, `luminousenergy`, `luminousexposure`, `luminousefficacy`. **Generalized dimensionless `Coupling`:** diff --git a/src/UnitSystems.jl b/src/UnitSystems.jl index cf0eaff..fa8d9db 100644 --- a/src/UnitSystems.jl +++ b/src/UnitSystems.jl @@ -17,13 +17,14 @@ module UnitSystems # |__| | \| | | ___] | ___] | |___ | | ___] import Base: @pure, length, time, angle, rem +import Base.MathConstants: eulergamma, golden, Ο† -const Systems = (:Metric,:SI2019,:SI1976,:CODATA,:Conventional,:International,:InternationalMean,:MetricTurn,:MetricDegree,:MetricArcminute,:MetricArcsecond,:MetricGradian,:MetricEngineering,:GravitationalMetric,:MTS,:EMU,:ESU,:Gauss,:LorentzHeaviside,:Kennelly,:FPS,:IPS,:British,:English,:Survey,:FFF,:MPH,:KKH,:Nautical,:Meridian,:IAUβ˜‰,:IAUE,:IAUJ,:Hubble,:Cosmological,:CosmologicalQuantum,:Planck,:PlanckGauss,:Stoney,:Hartree,:Rydberg,:Schrodinger,:Electronic,:Natural,:NaturalGauss,:QCD,:QCDGauss,:QCDoriginal) +const Systems = (:Metric,:SI2019,:SI1976,:CODATA,:Conventional,:International,:InternationalMean,:MetricTurn,:MetricSpatian,:MetricGradian,:MetricDegree,:MetricArcminute,:MetricArcsecond,:MetricEngineering,:GravitationalMetric,:MTS,:EMU,:ESU,:Gauss,:LorentzHeaviside,:FPS,:IPS,:British,:English,:Survey,:FFF,:MPH,:KKH,:Nautical,:Meridian,:IAUβ˜‰,:IAUE,:IAUJ,:Hubble,:Cosmological,:CosmologicalQuantum,:Planck,:PlanckGauss,:Stoney,:Hartree,:Rydberg,:Schrodinger,:Electronic,:Natural,:NaturalGauss,:QCD,:QCDGauss,:QCDoriginal) const Dimensionless = (:coupling,:finestructure,:electronunit,:protonunit,:protonelectron,:darkenergydensity) -const Constants = (:lightspeed,:planck,:planckreduced,:electronmass,:molarmass,:boltzmann,:permeability,:rationalization,:lorentz,:luminousefficacy,:gravity) #angle +const Constants = (:lightspeed,:planck,:planckreduced,:electronmass,:molarmass,:boltzmann,:permeability,:rationalization,:lorentz,:luminousefficacy,:gravity,:radian) const Physics = (:turn,:spat,:dalton,:protonmass,:planckmass,:gravitation,:gaussgravitation,:einstein,:hartree,:rydberg,:bohr,:electronradius,:avogadro,:molargas,:stefan,:radiationdensity,:vacuumpermeability,:vacuumpermittivity,:electrostatic,:magnetostatic,:biotsavart,:elementarycharge,:faraday,:vacuumimpedance,:conductancequantum,:klitzing,:josephson,:magneticfluxquantum,:magneton) const Derived = (:hyperfine,:loschmidt,:wienwavelength,:wienfrequency,:mechanicalheat,:eddington,:solarmass,:jupitermass,:earthmass,:lunarmass,:earthradius,:greatcircle,:radarmile,:hubble,:cosmological, - :radian,:steradian,:degree,:squaredegree,:gradian,:bradian,:arcminute,:arcsecond, + :steradian,:spatian,:degree,:squaredegree,:gradian,:bradian,:arcminute,:arcsecond, :second,:minute,:hour,:day,:gaussianmonth,:siderealmonth,:synodicmonth,:year,:gaussianyear,:siderealyear,:jovianyear, :angstrom,:inch,:foot,:surveyfoot,:yard,:meter,:earthmeter,:mile,:statutemile,:meridianmile,:admiraltymile,:nauticalmile,:lunardistance,:astronomicalunit,:jupiterdistance,:lightyear,:parsec, :barn,:hectare,:acre,:surveyacre, @@ -38,15 +39,15 @@ const Derived = (:hyperfine,:loschmidt,:wienwavelength,:wienfrequency,:mechanica :abcoulomb,:abampere,:abvolt,:abhenry,:abohm,:abmho,:abfarad,:maxwell,:gauss,:oersted,:gilbert, :statcoulomb,:statampere,:statvolt,:stathenry,:statohm,:statmho,:statfarad,:statweber,:stattesla, :kelvin,:rankine,:celsius,:fahrenheit,:sealevel,:boiling,:mole,:earthmole,:poundmole,:slugmole,:slinchmole,:katal,:amagat, - :lumen,:candela,:lux,:phot,:footcandle,:nit,:apostilb,:stilb,:lambert,:footlambert,:bril, + :lumen,:candela,:lux,:phot,:footcandle,:nit,:apostilb,:stilb,:lambert,:footlambert,:bril,:talbot,:lumerg, :neper,:bel,:decibel,:hertz,:apm,:rpm, - :kayser,:diopter,:gforce,:galileo,:eotvos,:darcy,:poise,:reyn,:stokes,:rayl, + :kayser,:diopter,:rayleigh,:flick,:gforce,:galileo,:eotvos,:darcy,:poise,:reyn,:stokes,:rayl, :mpge,:langley,:jansky,:solarflux,:curie,:sievert,:roentgen,:rem) -const Kinematic = (:solidangle,:time,:length,:area,:volume,:wavenumber,:angularwavenumber,:fuelefficiency,:numberdensity,:frequency,:angularfrequency,:frequencydrift,:speed,:acceleration,:jerk,:snap,:crackle,:pop,:volumeflow) #angle +const Kinematic = (:solidangle,:time,:angulartime,:length,:angularlength,:area,:angulararea,:volume,:wavenumber,:angularwavenumber,:fuelefficiency,:numberdensity,:frequency,:angularfrequency,:frequencydrift,:stagnance,:speed,:acceleration,:jerk,:snap,:crackle,:pop,:volumeflow,:etendue,:photonintensity,:photonirradiance,:photonradiance) #:angle const Mechanical = (:inertia,:mass,:massflow,:lineardensity,:areadensity,:density,:specificweight,:specificvolume,:force,:specificforce,:gravityforce,:pressure,:compressibility,:viscosity,:diffusivity,:rotationalinertia,:impulse,:momentum,:angularmomentum,:yank,:energy,:specificenergy,:action,:fluence,:power,:powerdensity,:irradiance,:radiance,:radiantintensity,:spectralflux,:spectralexposure,: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,:specificmagnetization,:polestrength) +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,:electricdisplacement,:magneticfluxdensity,:electricdipolemoment,:magneticdipolemoment,:electricpolarizability,:magneticpolarizability,:magneticmoment,:specificmagnetization,:polestrength) const Thermodynamic = (:temperature,:entropy,:specificentropy,:volumeheatcapacity,:thermalconductivity,:thermalconductance,:thermalresistivity,:thermalresistance,:thermalexpansion,:lapserate) -const Molar = (:molarmass,:molality,:molaramount,:molarity,:molarvolume,:molarentropy,:molarenergy,:molarconductivity,:molarsusceptibility,:catalysis,:specificity) +const Molar = (:molarmass,:molality,:molaramount,:molarity,:molarvolume,:molarentropy,:molarenergy,:molarconductivity,:molarsusceptibility,:catalysis,:specificity,:diffusionflux) const Photometric = (:luminousflux,:luminousintensity,:luminance,:illuminance,:luminousenergy,:luminousexposure,:luminousefficacy) const Mechanics = [Kinematic...,Mechanical...] const Convert = [Mechanics...,Electromagnetic...,Thermodynamic...,Molar...,Photometric...] @@ -61,13 +62,13 @@ An optional environment variable `ENV["SIMILITUDE"]` induces `UnitSystems.simili similitude() = haskey(ENV,"SIMILITUDE") include("constant.jl") -Constant(D::Number) = Constant{D}() -@pure Constant(D::Float64) = Constant{D}() -@pure Constant(D::Int) = Constant{D}() -@pure Constant(D::Constant) = D -@pure constant(::Constant{D}) where D = D -Base.Int(::Constant{D}) where D = Constant(Int(D)) -Base.show(io::IO,x::Constant{D}) where D = show(io,D) +Constant(N::Number) = Constant{N}() +@pure Constant(N::Float64) = Constant{N}() +@pure Constant(N::Int) = Constant{N}() +@pure constant(::Constant{N}) where N = N +@pure isconstant(n) = false +Base.Int(::Constant{N}) where N = Constant(Int(N)) +Base.show(io::IO,::Constant{N}) where N = show(io,N) unit(x,::Constant{y}) where y = unit(x,y) unit(::Constant{x},::Constant{y}) where {x,y} = Constant{unit(x,y)}() unit(::Constant{x},y=1) where x = Constant{unit(x,y)}() @@ -75,13 +76,30 @@ unit(::Constant{x},y=1) where x = Constant{unit(x,y)}() @pure measure(x) = x @pure cache(x) = x Constant(x) = x -Quantity(x) = x -Quantity(D,U,x) = x -const πŸ™,F,M,L,T,Q,Θ,N,J,A,Ξ›,C = 1,1,1,1,1,1,1,1,1,1,1,1 +const 𝟏,two,three,five,seven,eleven,nineteen,fourtythree = Constant.((1,2,3,5,7,11,19,43)) +const πŸ™,F,M,L,T,Q,Θ,N,J,A,R,C,tau = 𝟏,𝟏,𝟏,𝟏,𝟏,𝟏,𝟏,𝟏,𝟏,𝟏,𝟏,𝟏,Constant(2Ο€) +const 𝟐,πŸ‘,πŸ“,πŸ•,𝟏𝟏,πŸπŸ—,πŸ’πŸ‘,Ο„ = two,three,five,seven,eleven,nineteen,fourtythree,tau -logdb(x) = 10log10(x) -expdb(x) = exp10(0.1)^x -const dB, Db = logdb, expdb +logdb(x) = Constant(10)*log10(x) +expdb(x) = Constant(exp10(0.1))^x +const dB = logdb + +""" + (U::UnitSystem)(v::Number, D::Function) ↦ Quantity(D,U,v) = v # Quantity{D,U}(v) + +Numerical `Quantity` having value `v` with `D::Function` specified in `U::UnitSystem`. +```Julia +julia> Metric(1,energy) +1 [J] Metric + +julia> English(1,energy) +1 [lbfβ‹…ft] English +``` +An alternate syntax `Quantity(D::Function, U::UnitSystem, v::Number)` is also available as standard syntax. +When `using UnitSystems` instead of `using Similitude`, this same syntax can be written so that code doesn't need to be changed while the output is generated. +""" +Quantity(D,U,x) = x +Quantity(x) = x # universe @@ -106,18 +124,24 @@ Base.display(U::Coupling) = println("Coupling{Ξ±G = $(coupling(U)), Ξ± = $(fines # unit systems """ - UnitSystem{kB, Δ§, 𝘀, ΞΌβ‚€, mβ‚‘, Mα΅€, (Kcd, ΞΈ, Ξ», Ξ±L, gβ‚€, ...)} + UnitSystem(kB, Δ§, 𝘀, ΞΌβ‚€, mβ‚‘, Mα΅€, Kcd, Ο•, Ξ», Ξ±L, gβ‚€, Universe) + +A `UnitSystem` is a consistent set of dimensional values selected to accomodate a particular use case or standardization. +It is possible to convert derived physical quantities from any `UnitSystem` specification into any other using accurate values. +Eleven fundamental constants `kB`, `Δ§`, `𝘀`, `ΞΌβ‚€`, `mβ‚‘`, `Mα΅€`, `Kcd`, `Ο•`, `Ξ»`, `Ξ±L`, `gβ‚€` are used to govern a specific unit system consistent scaling. +Different choices of natural units or physical measurements result in a variety of unit systems for many purposes. -Fundamental constants of physics are: `kB` Boltzmann's constant, `Δ§` reduced Planck's constant, `𝘀` speed of light, `ΞΌβ‚€` vacuum permeability, `mβ‚‘` electron rest mass, `Mα΅€` molar mass, `Kcd` luminous efficacy, `ΞΈ` angle measure, `Ξ»` Gauss rationalization, `Ξ±L` Lorentz's constant, and `gβ‚€` gravitational force reference. +Fundamental constants of physics are: `kB` Boltzmann's constant, `Δ§` reduced Planck's constant, `𝘀` speed of light, `ΞΌβ‚€` vacuum permeability, `mβ‚‘` electron rest mass, `Mα΅€` molar mass, `Kcd` luminous efficacy, `Ο•` radian angle, `Ξ»` Gauss rationalization, `Ξ±L` Lorentz's constant, and `gβ‚€` gravitational force reference. Primarily the `Metric` SI unit system is used in addition to the historic `English` engineering unit system. These constants induce derived values for `avogadro`, `boltzmann`, `molargas`, `planck`, `planckreduced`, `lightspeed`, `planckmass`, `dalton`, `protonmass`, `electronmass`, `newton`, `einstein`, `vacuumpermeability`, `vacuumpermittivity`, `electrostatic`, and -additional constants `molarmass`, `luminousefficacy`, `gravity`, `angle`, `turn`, `spat`, `stefan`, `radiationdensity`, `magnetostatic`, `lorentz`, `biotsavart`, `rationalization`, `vacuumimpedance`, `elementarycharge`, `magneton`, `conductancequantum`, `faraday`, `magneticfluxquantum`, `josephson`, `klitzing`, `hartree`, `rydberg`, `bohr`. +additional constants `molarmass`, `luminousefficacy`, `gravity`, `radian`, `turn`, `spat`, `stefan`, `radiationdensity`, `magnetostatic`, `lorentz`, `biotsavart`, `rationalization`, `vacuumimpedance`, `elementarycharge`, `magneton`, `conductancequantum`, `faraday`, `magneticfluxquantum`, `josephson`, `klitzing`, `hartree`, `rydberg`, `bohr`. Standardized unit/derived quantities are `$(listext(Derived))`. Additional reference `UnitSystem` variants: `EMU`, `ESU`, `Gauss`, `LorentzHeaviside`, `SI2019`, `SI1976`, `CODATA`, `Conventional`, `International`, `InternationalMean`, `MetricEngineering`, `GravitationalMetric`, `IAU`, `IAUE`, `IAUJ`, `FPS`, `IPS`, `British`, `Survey`, `Hubble`, `Cosmological`, `CosmologicalQuantum`, `Meridian`, `Nautical`, `MPH`, `KKH`, `MTS`, `FFF`; and natural atomic units based on gravitational `coupling` and `finestructure` constant (`Planck`, `PlanckGauss`, `Stoney`, `Hartree`, `Rydberg`, `Schrodinger`, `Electronic`, `Natural`, `NaturalGauss`, `QCD`, `QCDGauss`, and `QCDoriginal`). -**Dimensional unit conversions:** +Derived dimensions can be obtained from multiplicative base of 11 fundamental dimension symbols `F`, `M`, `L`, `T`, `Q`, `Θ`, `N`, `J`, `A`, `R`, `C` corresponding to `force`, `mass`, `length`, `time`, `charge`, `temperature`, `molaramount`, `luminousflux`, `angle`, `demagnetizingfactor`, and a `nonstandard` dimension. +Specification of a `UnitSystem` is in dimensions of `entropy`, `angularmomentum`, `speed`, `permeability`, `mass`, `molarmass`, `luminousefficacy`, `angle`, `rationalization`, `lorentz`, `gravityforce`; whose `Constant` values are interpreted by units. Mechanics: `angle`, `$(listext(Kinematic))`, `$(listext(Mechanical))`; Electromagnetics: `$(listext(Electromagnetic))`; @@ -127,7 +151,7 @@ Thermodynamics: `$(listext(Thermodynamic))`, struct UnitSystem{kB,Δ§,𝘀,ΞΌβ‚€,mβ‚‘,Mα΅€,extra} @pure UnitSystem{kB,Δ§,𝘀,ΞΌβ‚€,mβ‚‘,Mα΅€,extra}() where {kB,Δ§,𝘀,ΞΌβ‚€,mβ‚‘,Mα΅€,extra} = new{kB,Δ§,𝘀,ΞΌβ‚€,mβ‚‘,Mα΅€,extra}() end # UnitSystem{kB,Δ§,𝘀,ΞΌβ‚€,mβ‚‘,Mα΅€,(Kcd,ΞΈ,Ξ»,Ξ±L,g,C,Ο„,𝟐,πŸ‘,πŸ“,πŸ•,𝟏𝟏,πŸπŸ—,πŸ’πŸ‘)} -function UnitSystem(kB,Δ§,𝘀,ΞΌβ‚€,mβ‚‘,Mα΅€=1,Kcd=1,ΞΈ=1,Ξ»=1,Ξ±L=1,g=1,C=Universe,Ο„=2Ο€,x=2,y=3,z=5,w=7,u=11,v=19,q=43) +function UnitSystem(kB,Δ§,𝘀,ΞΌβ‚€,mβ‚‘,Mα΅€=𝟏,Kcd=𝟏,ΞΈ=𝟏,Ξ»=𝟏,Ξ±L=𝟏,g=𝟏,C=Universe,Ο„=Ο„,x=𝟐,y=πŸ‘,z=πŸ“,w=πŸ•,u=𝟏𝟏,v=πŸπŸ—,q=πŸ’πŸ‘) UnitSystem{cache(kB),cache(Δ§),cache(𝘀),cache(ΞΌβ‚€),cache(mβ‚‘),cache(Mα΅€),(cache(Kcd),cache(ΞΈ),cache(Ξ»),cache(Ξ±L),cache(g),C,cache(Ο„),cache(x),cache(y),cache(z),cache(w),cache(u),cache(v),cache(q))}() end @pure boltzmann(::UnitSystem{k}) where k = measure(k) @@ -139,11 +163,12 @@ end @pure molarmass(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M}) where {k,Δ§,𝘀,ΞΌ,m,M} = measure(M) @pure luminousefficacy(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M,e}) where {k,Δ§,𝘀,ΞΌ,m,M,e} = measure(e[1]) @pure angle(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M,e}) where {k,Δ§,𝘀,ΞΌ,m,M,e} = measure(e[2]) +@pure radian(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M,e}) where {k,Δ§,𝘀,ΞΌ,m,M,e} = measure(e[2]) @pure rationalization(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M,e}) where {k,Δ§,𝘀,ΞΌ,m,M,e} = measure(e[3]) @pure lorentz(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M,e}) where {k,Δ§,𝘀,ΞΌ,m,M,e} = measure(e[4]) @pure gravity(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M,e}) where {k,Δ§,𝘀,ΞΌ,m,M,e} = measure(e[5]) @pure universe(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M,e}) where {k,Δ§,𝘀,ΞΌ,m,M,e} = measure(e[6]) -@pure twopi(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M,e}) where {k,Δ§,𝘀,ΞΌ,m,M,e} = measure(e[7]) +@pure tau(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M,e}) where {k,Δ§,𝘀,ΞΌ,m,M,e} = measure(e[7]) @pure two(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M,e}) where {k,Δ§,𝘀,ΞΌ,m,M,e} = measure(e[8]) @pure three(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M,e}) where {k,Δ§,𝘀,ΞΌ,m,M,e} = measure(e[9]) @pure five(::UnitSystem{k,Δ§,𝘀,ΞΌ,m,M,e}) where {k,Δ§,𝘀,ΞΌ,m,M,e} = measure(e[10]) @@ -157,7 +182,7 @@ function evaldim end @pure isquantity(U) = false @pure isquantity(A,B) = isquantity(A) && isquantity(B) @pure isquantity(U::UnitSystem) = isquantity(boltzmann(U)) -@pure isrationalized(U::UnitSystem) = rationalization(U) β‰  sphere(U) +@pure isrationalized(U::UnitSystem) = rationalization(U) β‰  spat(U) normal(x) = x @pure normal(x::Float64) = x @@ -168,20 +193,22 @@ normal(x) = x Base.show(io::IO,U::UnitSystem) = print(io,unitname(normal(U))) function Base.display(U::UnitSystem) println("UnitSystem: ", unitname(normal(U))) - println(" kB = $(boltzmann(U))") - println(" Δ§ = $(planckreduced(U))") - println(" 𝘀 = $(lightspeed(U))") - println(" ΞΌβ‚€ = $(vacuumpermeability(U))") - println(" mβ‚‘ = $(electronmass(U))") - println(" Mα΅€ = $(molarmass(U))") - println(" Kcd = $(luminousefficacy(U))") - println(" ΞΈ = $(angle(U))") - println(" Ξ» = $(rationalization(U)β‰ 4Ο€ ? rationalization(U) : "4Ο€")") - println(" Ξ±L = $(lorentz(U))") - println(" gβ‚€ = $(gravity(U))") + println(" entropy : $(boltzmann(U))") + println(" angularmomentum : $(planckreduced(U))") + println(" speed : $(lightspeed(U))") + println(" permeability : $(vacuumpermeability(U))") + println(" mass : $(electronmass(U))") + println(" molarmass : $(molarmass(U))") + println(" luminousefficacy : $(luminousefficacy(U))") + println(" angle : $(radian(U))") + println(" rationalization : $(rationalization(U)β‰ 4Ο€ ? rationalization(U) : "4Ο€")") + println(" lorentz : $(lorentz(U))") + println(" gravityforce : $(gravity(U))") end -function (U::UnitSystem)(JK=1,Js=1,ms=1,Hm=1,kg=1) +(::UnitSystem)(x,D) = x # Quantity(D,U,x) ↦ x + +function (U::UnitSystem)(JK,Js,ms,Hm,kg) kB = boltzmann(U)*JK Δ§ = planckreduced(U)*Js 𝘀 = lightspeed(U)*ms @@ -189,30 +216,14 @@ function (U::UnitSystem)(JK=1,Js=1,ms=1,Hm=1,kg=1) mβ‚‘ = electronmass(U)*kg Mα΅€ = molarmass(U)#kg# Kcd = luminousefficacy(U)# - A = angle(U) + ΞΈ = radian(U) Ξ» = rationalization(U) Ξ±L = lorentz(U) gβ‚€ = gravity(U) C = universe(U) - Ο„ = twopi(U) + Ο„ = tau(U) (x,y,z,u,v,w,p) = (two(U),three(U),five(U),seven(U),eleven(U),nineteen(U),fourtythree(U)) - UnitSystem(kB,Δ§,𝘀,ΞΌβ‚€,mβ‚‘,Mα΅€,Kcd,A,Ξ»,isone(Ξ±L) ? Ξ±L : Ξ±L/ms,gβ‚€,C,Ο„,x,y,z,u,v,w,p) -end - -function DimensionSystem(U::UnitSystem,L,M,T,I,Θ,N,J,A,Ξ›,G,C) - kB = boltzmann(U)*(M*L*L/(T*T)/Θ/G) - Δ§ = reducedplanck(U)*(M*(L*L)/T/G/A) - c = lightpseed(U)*(L/T) - ΞΌ0 = vacuumpermeability(U)*(L*M/((T*T)*(I*I)*(C*C)*(A*A)*Ξ›)) - me = electronmass(U)*M - Mu = molarmass(U)*(M/N) - Kcd = luminousefficacy(U)*(J*(T*T*T)/(L*L*M)*G) - Ξ» = rationalization(U)*(Ξ›*(A*A)) - Ξ±L = lorentz(U)*C - gβ‚€ = gravity(U)*G - Ο„ = twopi(U) - (x,y,z,u,v,w,p) = (two(U),three(U),five(U),seven(U),eleven(U),fourtythree(U)) - UnitSystem(kB,Δ§,c,ΞΌ0,me,Mu,Kcd,A,Ξ»,Ξ±L,gβ‚€,universe(U),Ο„,x,y,z,u,v,w,p) + UnitSystem(kB,Δ§,𝘀,ΞΌβ‚€,mβ‚‘,Mα΅€,Kcd,ΞΈ,Ξ»,isone(Ξ±L) ? Ξ±L : Ξ±L/ms,gβ‚€,C,Ο„,x,y,z,u,v,w,p) end """ @@ -239,7 +250,7 @@ end Constructs new `UnitSystem` from `U` rescaled along `time`, `length`, `mass`, and `temperature` by the first four parameters. Additional optional parameters allow for customization of the `vacuumpermeability`, `molarmass`, and `gravity` constants. -Examples of this type include `Nautical`, `Meridian`, `MeridianEngineering`, `GravitatonalMeridian`, `GravitationalMetric`, `GravitationalSI2019`, `MTS`, `KKH`, `MPH`, `IAUβ˜‰`, `IAUE`, `IAUJ`, `Hubble`, `Cosmological`, `CosmologicalQuantum`. +Examples of this type include `Nautical`, `Meridian`, `GravitationalMetric`, `MTS`, `KKH`, `MPH`, `IAUβ˜‰`, `IAUE`, `IAUJ`, `Hubble`, `Cosmological`, `CosmologicalQuantum`. However, most other constructors for `UnitSystem` derivations are based on internally calling `EntropySystem`, such as `AstronomicalSystem`, `ElectricSystem`, `GaussSystem`, and `RankineSystem`. This means `EntropySystem` also constructs the examples listed there. """ @@ -255,7 +266,7 @@ function EntropySystem(u,t,l,m,ΞΈ,ΞΌ0,Mu=molarmass(u)/m,g0=gravity(u),e=m*l*l/(t electronmass(u)/m, Mu, Kcd, - angle(u),Ξ»,Ξ±L,g0,universe(u),twopi(u),two(u),three(u),five(u),seven(u),eleven(u),nineteen(u),fourtythree(u))) + radian(u),Ξ»,Ξ±L,g0,universe(u),tau(u),two(u),three(u),five(u),seven(u),eleven(u),nineteen(u),fourtythree(u))) end """ @@ -271,23 +282,24 @@ end @pure unit(x,y=1) = isapprox(y,x,rtol=eps()^0.9) ? y : x @pure Base.one(U::UnitSystem) = unit(two(U)/two(U)) @pure Base.zero(U::UnitSystem) = one(U)-one(U) -@pure turn(U::UnitSystem) = twopi(U)/angle(U) +@pure turn(U::UnitSystem) = tau(U)*radian(U) +@pure angle(U::UnitSystem,S::UnitSystem) = unit(radian(S)/radian(U)) @pure solidangle(U::UnitSystem,S::UnitSystem) = unit(angle(U,S)^2) -@pure spat(U::UnitSystem) = two(U)*turn(U)/angle(U)*unit(turn(U)/normal(turn(U))) +@pure spat(U::UnitSystem) = two(U)*turn(U)*radian(U) @pure mass(U::UnitSystem,S::UnitSystem) = electronmass(U,S) @pure electronmass(𝘩::Number,C::Coupling) = inv(finestructure(C))^2*R∞*2𝘩/𝘀 @pure planckmass(U::UnitSystem,C::Coupling=universe(U)) = electronmass(U,C)/√coupling(C) @pure planck(U::UnitSystem,C::Coupling=universe(U)) = turn(U)*planckreduced(U,C) -@pure gravitation(U::UnitSystem,C::Coupling=universe(U)) = lightspeed(U,C)*planck(U,C)/normal(twopi(U))/planckmass(U,C)^2 +@pure gravitation(U::UnitSystem,C::Coupling=universe(U)) = lightspeed(U,C)*planck(U,C)/tau(U)/planckmass(U,C)^2 @pure elementarycharge(U::UnitSystem,C::Coupling=universe(U)) = sqrt(two(U)*planck(U)/(vacuumpermeability(U)/finestructure(C))/(lightspeed(U)*rationalization(U)*lorentz(U)^2)) for unit ∈ (:coupling,:finestructure,:electronunit,:protonunit,:protonelectron,:darkenergydensity) @eval @pure $unit(U::UnitSystem) = $unit(universe(U)) end -for unit ∈ (:boltzmann,:planckreduced,:lightspeed,:vacuumpermeability,:permeability,:electronmass,:molarmass) +for unit ∈ (:boltzmann,:planckreduced,:lightspeed,:vacuumpermeability,:permeability,:electronmass,:molarmass,:radian) @eval @pure $unit(U::UnitSystem,C::Coupling) = $unit(U) end -for unit ∈ (Constants...,:angle,:vacuumpermeability) +for unit ∈ (Constants...,:vacuumpermeability) @eval @pure $unit(U::UnitSystem,S::UnitSystem) = isquantity(U,S) ? evaldim($unit)(U,S) : unit($unit(S)/$unit(U)) end for unit ∈ (Convert...,:angle) @@ -310,10 +322,10 @@ const gβ‚€,atm,Tβ‚€ = Constant(9.80665),Constant(101325.0),Constant(273.15) const ft,ftUS,lb = Constant(0.3048),Constant(1200/3937),Constant(0.45359237) const inHg,Ξ©α΅’β‚œ,Vα΅’β‚œ = Constant(1/3386.389),Constant(1.000495),Constant(1.00033) const ΔνCs,Kcd,mP = Constant(9192631770.0),Constant(683*555.016/555),Constant(2.176434e-8) +const Ξ±inv,R∞ = Constant(137.035999084),Constant(10973731.5681601) const NA,kB,𝘩 = Constant(6.02214076e23),Constant(1.380649e-23),Constant(6.62607015e-34) -const 𝘀,𝘦 = Constant(299792458.),Constant(1.602176634e-19) +const 𝘀,𝘦,Ξ± = Constant(299792458.),Constant(1.602176634e-19),inv(Ξ±inv) const ΞΌβ‚‘α΅€,ΞΌβ‚šα΅€,ΞΌE☾ = Constant(1/1822.888486209),Constant(1.007276466621),Constant(81.300568) -const Ξ±inv,R∞ = Constant(137.035999084),Constant(10973731.5681601) const RK1990,KJ1990,Rα΅€2014 = Constant(25812.807),Constant(4.835979e14),Constant(8.3144598) const RK2014,KJ2014 = Constant(25812.8074555),Constant(4.835978525e14) const GME,GMJ = Constant(398600441.8e6),Constant(1.26686534e17) @@ -322,7 +334,6 @@ const aβ±Ό,au = Constant(365.25),Constant(149597870.7e3) const LD,JD = Constant(384399e3),Constant(778479e6) const zetta,zepto = Constant(1e21),Constant(1e-21) const yotta,yocto = Constant(1e24),Constant(1e-24) -const 𝟏,𝟐,πŸ‘,πŸ“,πŸ•,𝟏𝟎,𝟏𝟏,πŸπŸ—,πŸ’πŸ‘,Ο„,Ξ± = Constant(1),Constant(2),Constant(3),Constant(5),Constant(7),Constant(10),Constant(11),Constant(19),Constant(43),Constant(2Ο€),inv(Ξ±inv) include("initdata.jl") @@ -403,6 +414,12 @@ $unit(U::UnitSystem) = $text ``` """ +systext(sys,text) = """ +```Julia +$sys = $text +``` +""" + include("kinematic.jl") include("electromagnetic.jl") include("thermodynamic.jl") @@ -412,4 +429,14 @@ include("systems.jl") const RK = klitzing(SI2019) # const KJ = josephson(SI2019) # +@doc """ +$(unitext(:rem,"centi*sievert(U)")) + +Obsolete unit of radioactivity (Sv or mΒ²β‹…s⁻²). +```Julia +julia> rem(Metric) # Sv +$(rem(Metric)) +``` +""" rem + end # module diff --git a/src/constant.jl b/src/constant.jl index c850c8a..a20443b 100644 --- a/src/constant.jl +++ b/src/constant.jl @@ -16,18 +16,25 @@ export Constant, constant # constant -struct Constant{D} <: Real - @pure Constant{D}() where D = new{D}() +struct Constant{N} <: Real + @pure Constant{N}() where N = new{N}() end -@pure param(::Constant{D}) where D = D -Base.float(x::Constant) = float(constant(x)) +@pure isconstant(::Constant) = true +@pure Constant(N::Constant) = N +@pure Constant(N::Irrational) = Constant(float(N)) + +@pure param(::Constant{N}) where N = N +Base.abs(::Constant{N}) where N = Constant{abs(N)}() +Base.float(c::Constant) = float(constant(c)) Base.convert(::Type{Float64},c::Constant) = float(c) -logdb(x::Constant{D}) where D = Constant{logdb(D)}() +logdb(::Constant{N}) where N = Constant{logdb(N)}() +Base.:<(a::Real,b::Constant) = a golden # Ο† +$golden + +julia> eulergamma # Ξ³ +$eulergamma + +julia> exp # β„― +$(Constant(β„―)) + +julia> pi # Ο€ +$(Constant(Ο€)) + +julia> tau # Ο„ +$tau +``` +""" eulergamma, golden, tau, Ο†, Ο„ + @doc """ ```Julia -julia> deka +julia> one # 𝟏 +$𝟏 + +julia> two # 𝟐 +$two + +julia> three # πŸ‘ +$three + +julia> five # πŸ“ +$five + +julia> seven # πŸ• +$seven + +julia> eleven # 𝟏𝟏 +$eleven + +julia> nineteen # πŸπŸ— +$nineteen + +julia> fourtythree # πŸ’πŸ‘ +$fourtythree + +julia> sixty # πŸ”πŸŽ +$sixty +``` +""" two,three,five,seven,eleven,ninteteen,fourtythree,sixty,𝟏,𝟐,πŸ‘,πŸ“,πŸ•,𝟏𝟏,πŸπŸ—,πŸ’πŸ‘,πŸ”πŸŽ + +@doc """ +```Julia +julia> deka # 𝟏𝟎 $deka -julia> hecto +julia> hecto # 𝟏𝟎^2 $hecto -julia> kilo +julia> kilo # 𝟏𝟎^3 $kilo -julia> mega +julia> mega # 𝟏𝟎^6 $mega -julia> giga +julia> giga # 𝟏𝟎^9 $giga -julia> tera +julia> tera # 𝟏𝟎^12 $tera -julia> peta +julia> peta # 𝟏𝟎^15 $peta -julia> exa +julia> exa # 𝟏𝟎^18 $exa -julia> zetta +julia> zetta # 𝟏𝟎^21 $zetta -julia> yotta +julia> yotta # 𝟏𝟎^24 $yotta ``` -""" deka,hecto,kilo,mega,giga,tera,peta,exa,zetta,yotta +""" deka,hecto,kilo,mega,giga,tera,peta,exa,zetta,yotta,𝟏𝟎 @doc """ ```Julia -julia> deci +julia> deci # 𝟏𝟎^-1 $deci -julia> centi +julia> centi # 𝟏𝟎^-2 $centi -julia> milli +julia> milli # 𝟏𝟎^-3 $milli -julia> micro +julia> micro # 𝟏𝟎^-6 $micro -julia> nano +julia> nano # 𝟏𝟎^-9 $nano -julia> pico +julia> pico # 𝟏𝟎^-12 $pico -julia> femto +julia> femto # 𝟏𝟎^-15 $femto -julia> atto +julia> atto # 𝟏𝟎^-18 $atto -julia> zepto +julia> zepto # 𝟏𝟎^-21 $zepto -julia> yocto +julia> yocto # 𝟏𝟎^-24 $yocto ``` """ deci,centi,milli,micro,nano,pico,femto,atto,zepto,yocto @doc """ ```Julia -julia> byte +julia> byte # 𝟐^3 $byte -julia> kibi +julia> kibi # 𝟐^10 $kibi -julia> mebi +julia> mebi # 𝟐^20 $mebi -julia> gibi +julia> gibi # 𝟐^30 $gibi -julia> tebi +julia> tebi # 𝟐^40 $tebi -julia> pebi +julia> pebi # 𝟐^50 $pebi -julia> exbi +julia> exbi # 𝟐^60 $exbi -julia> zebi +julia> zebi # 𝟐^70 $zebi -julia> yobi +julia> yobi # 𝟐^80 $yobi ``` """ byte,kibi,mebi,gibi,tebi,pebi,exbi,zebi,yobi @@ -135,6 +188,28 @@ $(radian(MetricGradian)) ``` """ radian +@doc """ +$(unitext(:spatian,"angle(𝟏,U,MetricSpatian)")) + +Unit of `angle` which is dimensionless (rad). +```Julia +julia> spatian(MetricEngineering) # rad +$(spatian(MetricEngineering)) + +julia> spatian(MetricDegree) # deg +$(spatian(MetricDegree)) + +julia> spatian(MetricArcminute) # amin +$(spatian(MetricArcminute)) + +julia> spatian(MetricArcsecond) # asec +$(spatian(MetricArcsecond)) + +julia> spatian(MetricGradian) # gon +$(spatian(MetricGradian)) +``` +""" spatian + @doc """ $(unitext(:degree,"angle(𝟏,U,MetricDegree)")) @@ -1643,13 +1718,13 @@ $(unitext(:thermalunit,"kilocalorie(U)*πŸ‘^2/πŸ“/lb")) Heat energy required to raise 1 lb of water by 1 Rankine (`BTU`) in `International` units. ```Julia -julia> thermalunit(British) # J +julia> thermalunit(British) # ftβ‹…lb $(thermalunit(British)) julia> thermalunit(International) # J $(thermalunit(International)) -julia> thermalunit(Metric) # ftβ‹…lb +julia> thermalunit(Metric) # J $(thermalunit(Metric)) ``` """ thermalunit, BTU, BTUJ, BTUftlb @@ -2720,6 +2795,26 @@ $(bril(English)) ``` """ bril +@doc """ +$(unitext(:talbot,"luminousenergy(𝟏,U,Metric)")) + +Common unit of `luminousenergy` (lmβ‹…s). +```Julia +julia> talbot(Metric) # lmβ‹…s +$(talbot(Metric)) +``` +""" talbot + +@doc """ +$(unitext(:lumerg,"luminousenergy(𝟏𝟎^-7,U,Metric)")) + +Reference unit of `luminousenergy` (lmβ‹…s). +```Julia +julia> lumerg(CGS) # lmβ‹…s +$(lumerg(CGS)) +``` +""" lumerg + # special @doc """ @@ -2796,9 +2891,9 @@ $(kayser(English)) """ kayser @doc """ -$(unitext(:diopter,"wavenumber(𝟏,U,Metric)")) +$(unitext(:diopter,"angularwavenumber(𝟏,U,Metric)")) -Metric unit of `wavenumber` or curvature (m⁻¹ or ft⁻¹). +Metric unit of `angularwavenumber` or curvature (m⁻¹ or ft⁻¹). ```Julia julia> diopter(Metric) # m⁻¹ $(diopter(Metric)) @@ -2811,6 +2906,38 @@ $(diopter(English)) ``` """ diopter +@doc """ +$(unitext(:rayleigh,"photonirradiance(𝟏𝟎^10,U,Metric)")) + +Common unit of `photonirradiance` (Hzβ‹…m⁻²). +```Julia +julia> rayleigh(Metric) # Hzβ‹…m⁻² +$(rayleigh(Metric)) + +julia> rayleigh(CGS) # Hzβ‹…cm⁻² +$(rayleigh(CGS)) + +julia> rayleigh(English) # Hzβ‹…ft⁻² +$(rayleigh(English)) +``` +""" rayleigh + +@doc """ +$(unitext(:flick,"radiance(𝟏𝟎^10,U,Metric)/length(𝟏,U,Metric)")) + +Lockheed Martin unit of `radiance` per `length` (Wβ‹…m⁻³⋅rad⁻²). +```Julia +julia> flick(Metric) # Wβ‹…m⁻³ +$(flick(Metric)) + +julia> flick(CGS) # ergβ‹…s⁻¹⋅mL⁻¹ +$(flick(CGS)) + +julia> flick(MetricSpatian) # Wβ‹…m⁻³⋅ς⁻² +$(flick(MetricSpatian)) +``` +""" flick + @doc """ $(unitext(:gforce,"specificforce(𝟏,U,English)")) @@ -2988,7 +3115,7 @@ $(langley(English)) """ langley @doc """ -$(unitext(:jansky,"fluence(deci^-26,U,Metric)")) +$(unitext(:jansky,"fluence(𝟏𝟎^-26,U,Metric)")) Reference unit of spectral irradiance (kgβ‹…s⁻² or lbβ‹…ft⁻¹). ```Julia @@ -3033,7 +3160,7 @@ $(curie(IAU)) """ curie @doc """ -$(unitext(:sievert,"energy(𝟏,U,Metric)/mass(U,Metric)")) +$(unitext(:sievert,"energy(𝟏,U,Metric)/mass(𝟏,U,Metric)")) Metric unit of radioactivity (Sv or mΒ²β‹…s⁻²). ```Julia @@ -3042,22 +3169,15 @@ $(sievert(Metric)) ``` """ sievert -@doc """ - rem(U::UnitSystem) = centi*sievert(U) - -Obsolete unit of radioactivity (Sv or mΒ²β‹…s⁻²). -```Julia -julia> rem(Metric) # Sv -$(rem(Metric)) -``` -""" rem - @doc """ $(unitext(:roentgen,"chargedensity(𝟏,U,ESU)/density(Constant(1.293),U,Metric)")) -Legacy unit of ionisation `exposure` (R or Cβ‹…kg⁻¹). +Legacy unit of ionisation `exposure` (Cβ‹…kg⁻¹ or Cβ‹…lb⁻¹). ```Julia -julia> roentgen(Metric) # R +julia> roentgen(Metric) # Cβ‹…kg⁻¹ $(roentgen(Metric)) + +julia> roentgen(English) # Cβ‹…lb⁻¹ +$(roentgen(English)) ``` """ roentgen diff --git a/src/electromagnetic.jl b/src/electromagnetic.jl index 4e89c01..7356afa 100644 --- a/src/electromagnetic.jl +++ b/src/electromagnetic.jl @@ -27,7 +27,8 @@ const voltage = electricpotential # electromagnetics -@pure electricfluxdensity(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)*rationalization(U,S)/area(U,S)) +@pure linearchargedensity(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/length(U,S)) +@pure electricdisplacement(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)*rationalization(U,S)/area(U,S)) @pure chargedensity(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/volume(U,S)) @pure currentdensity(U::UnitSystem,S::UnitSystem) = unit(current(U,S)/area(U,S)) @pure conductivity(U::UnitSystem,S::UnitSystem) = unit(conductance(U,S)/length(U,S)) @@ -36,7 +37,6 @@ const voltage = electricpotential @pure magneticfield(U::UnitSystem,S::UnitSystem) = unit(current(U,S)*rationalization(U,S)*lorentz(U,S)/length(U,S)) @pure exposure(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/mass(U,S)) @pure resistivity(U::UnitSystem,S::UnitSystem) = unit(resistance(U,S)*length(U,S)) -@pure linearchargedensity(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/length(U,S)) @pure magneticdipolemoment(U::UnitSystem,S::UnitSystem) = unit(current(U,S)*lorentz(U,S)*area(U,S)/gravity(U,S)/angle(U,S)) @pure mobility(U::UnitSystem,S::UnitSystem) = unit(length(U,S)*speed(U,S)*electricpotential(U,S)) @pure reluctance(U::UnitSystem,S::UnitSystem) = unit(rationalization(U,S)*lorentz(U,S)^2/inductance(U,S)) diff --git a/src/electromagneticdocs.jl b/src/electromagneticdocs.jl index 2f3124c..759b984 100644 --- a/src/electromagneticdocs.jl +++ b/src/electromagneticdocs.jl @@ -180,21 +180,21 @@ $(inductance(Metric,SI2019)) # electromagnetics @doc """ -$(convertext(:electricfluxdensity,"charge(U,S)*rationalization(U,S)/area(U,S)")) +$(convertext(:electricdisplacement,"charge(U,S)*rationalization(U,S)/area(U,S)")) -Electric field displacement or surface `electricfluxdensity` (Cβ‹…m⁻²), unit conversion factor. +Electric field displacement or surface `electricdisplacement` (Cβ‹…m⁻²), unit conversion factor. ```Julia -julia> electricfluxdensity(EMU,Metric) # Cβ‹…cmΒ²β‹…abC⁻¹⋅m⁻² -$(electricfluxdensity(EMU,Metric)) +julia> electricdisplacement(EMU,Metric) # Cβ‹…cmΒ²β‹…abC⁻¹⋅m⁻² +$(electricdisplacement(EMU,Metric)) -julia> electricfluxdensity(ESU,Metric) # Cβ‹…cmΒ²β‹…statC⁻¹⋅m⁼² -$(electricfluxdensity(ESU,Metric)) +julia> electricdisplacement(ESU,Metric) # Cβ‹…cmΒ²β‹…statC⁻¹⋅m⁼² +$(electricdisplacement(ESU,Metric)) -julia> electricfluxdensity(Metric,SI2019) # Cβ‹…C⁻¹ -$(electricfluxdensity(Metric,SI2019)) +julia> electricdisplacement(Metric,SI2019) # Cβ‹…C⁻¹ +$(electricdisplacement(Metric,SI2019)) ``` -""" electricfluxdensity +""" electricdisplacement @doc """ $(convertext(:chargedensity,"charge(U,S)/volume(U,S)")) diff --git a/src/initdata.jl b/src/initdata.jl index 98882e8..b45508b 100644 --- a/src/initdata.jl +++ b/src/initdata.jl @@ -12,19 +12,19 @@ # https://github.com/chakravala # https://crucialflow.com -const deka,byte = 𝟐*πŸ“,𝟐^3 -const hecto, kilo = deka^2, deka^3 -const mega,giga,tera,peta,exa = kilo^2, kilo^3, kilo^4, kilo^5, kilo^6 -const deci,centi,milli,micro,nano,pico,femto,atto = inv(deka),inv(hecto),inv(kilo),inv(mega),inv(giga),inv(tera),inv(peta),inv(exa) +const deka, byte, sixty = 𝟐*πŸ“, 𝟐^3, 𝟐^2*πŸ‘*πŸ“ +const hecto, kilo, 𝟏𝟎, πŸ”πŸŽ = deka^2, deka^3, deka, sixty +const mega, giga, tera, peta, exa = kilo^2, kilo^3, kilo^4, kilo^5, kilo^6 +const deci,centi,milli,micro,nano,pico,femto,atto = inv.((deka,hecto,kilo,mega,giga,tera,peta,exa)) const kibi,mebi,gibi,tebi,pebi,exbi,zebi,yobi = 𝟐^10,𝟐^20,𝟐^30,𝟐^40,𝟐^50,𝟐^60,(Constant(1.0)*𝟐)^70,(Constant(1.0)*𝟐)^80 -const fur,Β°R,K,HOUR,k = 𝟐^2*πŸ‘*πŸ“*𝟏𝟏*ft,πŸ“/πŸ‘^2,πŸ‘^2/πŸ“,𝟐^4*πŸ‘^2*πŸ“^2,kG*Ο„/(𝟐^7*πŸ‘^4*πŸ“^3) +const fur,Β°R,K,HOUR,k = πŸ”πŸŽ*𝟏𝟏*ft,πŸ“/πŸ‘^2,πŸ‘^2/πŸ“,πŸ”πŸŽ^2,kG*Ο„/(𝟐^7*πŸ‘^4*πŸ“^3) const mβ‚‘,ΞΌβ‚€ = Ξ±inv^2*R∞*𝟐*𝘩/𝘀,𝟐*𝘩/𝘀*Ξ±/𝘦^2 # β‰ˆ 4Ο€*(1e-7+5.5e-17), exact charge const Δ§,ΞΌβ‚šβ‚‘,ΞΌβ‚‘β‚š,Rα΅€,Ξ±L,Ξ±G,Mα΅€ = 𝘩/Ο„,ΞΌβ‚šα΅€/ΞΌβ‚‘α΅€,ΞΌβ‚‘α΅€/ΞΌβ‚šα΅€,NA*kB,centi/𝘀,(mβ‚‘/mP)^2,NA*mβ‚‘/ΞΌβ‚‘α΅€ const pc,G,DAY,nm = au*𝟐^7*πŸ‘^4*πŸ“^3/Ο„,𝘀*Δ§/mP^2,𝟐^7*πŸ‘^3*πŸ“^2,sqrt(GME/gβ‚€)*Ο„/𝟐^5/πŸ‘^3/πŸ“^2 const GMβ˜‰ =au^3*k^2/DAY^2; const th = 𝟏𝟎^3*pc/H0; const Ξ›C = πŸ‘*ΩΛ*(th*𝘀)^-2 -const lc,mc,ρΛ,π˜¦β‚™ = 𝟐*sqrt(Ο„/Ξ›C),𝘀^2/(𝟐*G*sqrt(Ο„*Ξ›C)),Ξ›C*𝘀^4/(𝟐^2*Ο„)/G,𝘦/√α -const lcq,mcq = sqrt.(sqrt.((𝘀*Δ§/ρΛ,ρΛ*Δ§^3/𝘀^5))); const 𝘦ᡣ = π˜¦β‚™/√(𝟐*Ο„) +const lc,mc,ρΛ,π˜¦β‚™,Ο‚ = 𝟐*sqrt(Ο„/Ξ›C),𝘀^2/(𝟐*G*sqrt(Ο„*Ξ›C)),Ξ›C*𝘀^4/(𝟐^2*Ο„)/G,𝘦/√α,√(𝟐*Ο„) +const lcq,mcq = sqrt.(sqrt.((𝘀*Δ§/ρΛ,ρΛ*Δ§^3/𝘀^5))); const 𝘦ᡣ = π˜¦β‚™/Ο‚ const tcq,em,mi = lcq*sqrt(mcq/sqrt(sqrt(ρΛ*(𝘀*Δ§)^3))),sqrt(GME/gβ‚€)*Ο„/𝟐^9/πŸ“^7,𝟐^5*πŸ‘*πŸ“*𝟏𝟏 @pure sackurtetrode(U::UnitSystem,P=atm,T=𝟏,m=dalton(U)) = normal(log((Constant(exp(5/2))*boltzmann(U)*sqrt(boltzmann(U)/gravity(U)/turn(U)/planckreduced(U)^2)^3)*(T/P*sqrt(m*T)^3))) @@ -37,13 +37,20 @@ export MetricSystem, ConventionalSystem, RankineSystem export AstronomicalSystem, ElectricSystem, GaussSystem, EntropySystem """ - MetricSystem(Mu=Mα΅€,ΞΌ0=ΞΌβ‚€,Ru=Rα΅€,g0=𝟏,ΞΈ=𝟏,h=𝘩) + MetricSystem(Mu=Mα΅€,ΞΌ0=ΞΌβ‚€,Ru=Rα΅€,g0=𝟏,ΞΈ=𝟏,h=𝘩,me=R∞*𝟐*h/𝘀/Ξ±^2) Constructs new `UnitSystem` from `molarmass` constant, `vacuumpermeability`, `molargas` constant, `gravity` force reference, `angle` scale, and `planck` constant. -Examples include `SI2019`, `Metric`, `SI2019Engineering`, `MetricEngineering`, `SI1976`, `MetricDegree`, `MetricGradian`. In addition, the `ConventionalSystem` constructor further builds on `MetricSystem`, resulting in variations. +```Julia +UnitSystem(Ru*me/Mu/ΞΌβ‚‘α΅€/g0,h/Ο„/g0/ΞΈ,𝘀,ΞΌ0,me,Mu,Kcd*(mβ‚‘/me)^2*(h/𝘩)*g0,ΞΈ,𝟏,𝟏,g0) +``` + +Examples include `SI2019`, `SI1976`, `Metric`, `MetricEngineering`, `MetricTurn`, `MetricSpatian`, `MetricGradian`, `MetricDegree`, `MetricArcminute`, `MetricArcsecond`. In addition, the `ConventionalSystem` constructor further builds on `MetricSystem`, resulting in variations. + +Other derived `UnitSystem` instances such as `British` or `English` or `IAU` are derived from an existing `Metric` specification generated by `MetricSystem`. The constructor `MetricSystem` incorporates several standard common numerical values and exposes variable arguments which can be substituted for customization, yielding the capability to generate historical variations having a common `Universe`. +Derivative constructors are `EntropySystem`, `ElectricSystem`, `GaussSystem`, `RankineSystem`, and `AstronomicalSystem`. """ -MetricSystem(Mu=Mα΅€,ΞΌ0=ΞΌβ‚€,Ru=Rα΅€,g0=𝟏,ΞΈ=𝟏,h=𝘩,me=Ξ±inv^2*R∞*𝟐*h/𝘀) = UnitSystem(Ru*me/Mu/ΞΌβ‚‘α΅€/g0,h/Ο„/g0,𝘀,ΞΌ0,me,Mu,Kcd*(mβ‚‘/me)^2*(h/𝘩)*g0,ΞΈ,𝟏,𝟏,g0,Universe,Ο„,𝟐,πŸ‘,πŸ“,πŸ•,𝟏𝟏,πŸπŸ—,πŸ’πŸ‘) +MetricSystem(Mu=Mα΅€,ΞΌ0=ΞΌβ‚€,Ru=Rα΅€,g0=𝟏,ΞΈ=𝟏,h=𝘩,me=Ξ±inv^2*R∞*𝟐*h/𝘀) = UnitSystem(Ru*me/Mu/ΞΌβ‚‘α΅€/g0,h/Ο„/g0/ΞΈ,𝘀,ΞΌ0,me,Mu,Kcd*(mβ‚‘/me)^2*(h/𝘩)*g0,ΞΈ,𝟏,𝟏,g0,Universe,Ο„,𝟐,πŸ‘,πŸ“,πŸ•,𝟏𝟏,πŸπŸ—,πŸ’πŸ‘) """ ConventionalSystem(RK,KJ,Ru=Rα΅€,g0=𝟏) = MetricSystem(milli,𝟐*RK/𝘀*Ξ±,Ru,g0,𝟐^2/RK/KJ^2) @@ -55,10 +62,14 @@ Examples include `Conventional` (based on 1990) and `CODATA` (based on 2014). ConventionalSystem(klitz,joseph,Ru=Rα΅€,g0=𝟏,ΞΈ=𝟏) = MetricSystem(milli,𝟐*klitz/𝘀*Ξ±,Ru,g0,ΞΈ,(𝟐*𝟐)/klitz/(joseph*joseph)) """ - RankineSystem(U::UnitSystem,l,m,g0=𝟏) = EntropySystem(U,𝟏,l,m,Β°R,vacuumpermeability(U)/m/l/g0,kilo*molarmass(U),g0) + RankineSystem(U::UnitSystem,l,m,g0=𝟏) Constructs new `UnitSystem` from `U` rescaled along `length` and `mass` with optional `gravity` reference constant used to define technical and engineering units. +```Julia +EntropySystem(U,𝟏,l,m,Β°R,vacuumpermeability(U)/m/l/g0,kilo*molarmass(U),g0) +``` + Examples: `FPS`, `British`, `IPS`, `English`, `Survey`. """ RankineSystem(u,l,m,g0=𝟏) = EntropySystem(u,𝟏,l,m,Β°R,UnitSystems.vacuumpermeability(u)/(m*l)/g0,UnitSystems.unit(kilo*UnitSystems.molarmass(u)),g0) @@ -70,10 +81,11 @@ const Metric = Quantity(MetricSystem(milli,Ο„/𝟐^6/πŸ“^7)) #const SI2019Engineering = Quantity(MetricSystem(Mα΅€,ΞΌβ‚€/gβ‚€,Rα΅€,gβ‚€)) const MetricEngineering = Quantity(MetricSystem(milli,Ο„/𝟐^6/πŸ“^7/gβ‚€,Rα΅€,gβ‚€)) const MetricTurn = Quantity(MetricSystem(milli,Ο„/𝟐^6/πŸ“^7,Rα΅€,𝟏,𝟏/Ο„)) +const MetricSpatian = Quantity(MetricSystem(milli,Ο„/𝟐^6/πŸ“^7,Rα΅€,𝟏,𝟏/Ο‚)) +const MetricGradian = Quantity(MetricSystem(milli,Ο„/𝟐^6/πŸ“^7,Rα΅€,𝟏,𝟐^4*πŸ“^2/Ο„)) const MetricDegree = Quantity(MetricSystem(milli,Ο„/𝟐^6/πŸ“^7,Rα΅€,𝟏,𝟐^3*πŸ‘^2*πŸ“/Ο„)) const MetricArcminute = Quantity(MetricSystem(milli,Ο„/𝟐^6/πŸ“^7,Rα΅€,𝟏,𝟐^5*πŸ‘^3*πŸ“^2/Ο„)) const MetricArcsecond = Quantity(MetricSystem(milli,Ο„/𝟐^6/πŸ“^7,Rα΅€,𝟏,𝟐^7*πŸ‘^4*πŸ“^3/Ο„)) -const MetricGradian = Quantity(MetricSystem(milli,Ο„/𝟐^6/πŸ“^7,Rα΅€,𝟏,𝟐^4*πŸ“^2/Ο„)) const SI1976 = Quantity(MetricSystem(milli,Ο„/𝟐^6/πŸ“^7,Constant(8.31432))) const CODATA = Quantity(ConventionalSystem(RK2014,KJ2014,Rα΅€2014)) const Conventional = Quantity(ConventionalSystem(RK1990,KJ1990)) @@ -85,7 +97,7 @@ const ESU = Quantity(GaussSystem(Metric,(hecto*𝘀)^-2,𝟐*Ο„)) const Gauss = Quantity(GaussSystem(Metric,𝟏,𝟐*Ο„,centi/𝘀)) const LorentzHeaviside = Quantity(GaussSystem(Metric,𝟏,𝟏,centi/𝘀)) #const Thomson = Quantity(GaussSystem(Metric,𝟏,𝟐*Ο„,inv(𝟐))) -const Kennelly = Quantity(GaussSystem(Metric,inv(𝟏𝟎^7),𝟐*Ο„,𝟏,𝟏,𝟏)) +#const Kennelly = Quantity(GaussSystem(Metric,inv(𝟏𝟎^7),𝟐*Ο„,𝟏,𝟏,𝟏)) const British = Quantity(RankineSystem(Metric,ft,lb*gβ‚€/ft)) #const British2019 = Quantity(RankineSystem(SI2019,ft,lb*gβ‚€/ft)) diff --git a/src/kinematic.jl b/src/kinematic.jl index ba4b5db..a360fae 100644 --- a/src/kinematic.jl +++ b/src/kinematic.jl @@ -70,7 +70,7 @@ Converts distance `d` from feet to meters (m). @pure length(U::UnitSystem,S::UnitSystem,l=1) = isquantity(U,S) ? evaldim(length)(U,S) : unit((turn(S)/turn(U))*(planckreduced(S)*electronmass(U)*lightspeed(U)*gravity(S))/(planckreduced(U)*electronmass(S)*lightspeed(S)*gravity(U)),l) @doc """ -$(convertext(:length,"planck(U,S)/mass(U,S)/speed(U,S)")) +$(convertext(:length,"action(U,S)*gravityforce(U,S)/mass(U,S)/speed(U,S)")) Extent of one-dimensional shape or `length` (m), unit conversion factor. @@ -109,27 +109,35 @@ $(time(PlanckGauss,Metric)) # spacetime +@pure angularlength(U::UnitSystem,S::UnitSystem) = unit(length(U,S)*angle(S,U)) @pure area(U::UnitSystem,S::UnitSystem) = unit(length(U,S)^2) +@pure angulararea(U::UnitSystem,S::UnitSystem) = unit(area(U,S)*solidangle(S,U)) @pure volume(U::UnitSystem,S::UnitSystem) = unit(length(U,S)^3) @pure wavenumber(U::UnitSystem,S::UnitSystem) = unit(length(S,U)) @pure angularwavenumber(U::UnitSystem,S::UnitSystem) = unit(angle(U,S)*length(S,U)) +@pure etendue(U::UnitSystem,S::UnitSystem) = unit(area(U,S)*solidangle(U,S)) +@pure photonintensity(U::UnitSystem,S::UnitSystem) = unit(frequency(U,S)/solidangle(U,S)) +@pure photonirradiance(U::UnitSystem,S::UnitSystem) = unit(length(S,U)*speed(S,U)) +@pure photonradiance(U::UnitSystem,S::UnitSystem) = unit(photonirradiance(U,S)/solidangle(U,S)) @pure fuelefficiency(U::UnitSystem,S::UnitSystem) = area(S,U) @pure numberdensity(U::UnitSystem,S::UnitSystem) = volume(S,U) +@pure angulartime(U::UnitSystem,S::UnitSystem) = unit(time(U,S)*angle(S,U)) @pure frequency(U::UnitSystem,S::UnitSystem) = time(S,U) @pure angularfrequency(U::UnitSystem,S::UnitSystem) = unit(angle(U,S)*time(S,U)) @pure frequencydrift(U::UnitSystem,S::UnitSystem) = unit(time(S,U)^2) @pure speed(U::UnitSystem,S::UnitSystem) = lightspeed(U,S) +@pure stagnance(U::UnitSystem,S::UnitSystem) = lightspeed(S,U) @pure acceleration(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)/time(U,S)) @pure jerk(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)/time(U,S)^2) @pure snap(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)/time(U,S)^3) @pure crackle(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)/time(U,S)^4) @pure pop(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)/time(U,S)^5) @pure volumeflow(U::UnitSystem,S::UnitSystem) = unit(area(U,S)*speed(U,S)) -@pure specificenergy(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)^2/gravity(U,S)) # kinematic @pure inertia(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/gravity(U,S)) +@pure specificenergy(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)^2/gravity(U,S)) @pure energy(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)*specificenergy(U,S)) @pure power(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)/time(U,S)) @pure force(U::UnitSystem,S::UnitSystem) = unit(inertia(U,S)*acceleration(U,S)) @@ -141,7 +149,7 @@ $(time(PlanckGauss,Metric)) @pure impulse(U::UnitSystem,S::UnitSystem) = unit(force(U,S)*time(U,S)) @pure momentum(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)*speed(U,S)) -@pure angularmomentum(U::UnitSystem,S::UnitSystem) = unit(momentum(U,S)*length(U,S)*angle(U,S)) +@pure angularmomentum(U::UnitSystem,S::UnitSystem) = unit(impulse(U,S)*length(U,S)/angle(U,S)) @pure yank(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)*jerk(U,S)) @pure areadensity(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/area(U,S)) @pure density(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/volume(U,S)) diff --git a/src/kinematicdocs.jl b/src/kinematicdocs.jl index 5f2ce5f..51d3c30 100644 --- a/src/kinematicdocs.jl +++ b/src/kinematicdocs.jl @@ -36,6 +36,31 @@ $(solidangle(CGS,Metric)) # spacetime +@doc """ +$(convertext(:angulartime,"time(U,S)/angle(U,S)")) + +Circular `time` per `angle` (sβ‹…rad⁻¹), unit conversion factor. + +```Julia +julia> angulartime(IAU,Metric) sβ‹…day⁻¹ +$(angulartime(IAU,Metric)) +``` +""" angulartime + +@doc """ +$(convertext(:angularlength,"length(U,S)/angle(U,S)")) + +Unit of `length` per `angle` (mβ‹…rad⁻¹), unit conversion factor. + +```Julia +julia> angularlength(CGS,Metric) # cmβ‹…m⁻¹ +$(angularlength(CGS,Metric)) + +julia> angularlength(English,Metric) # ftβ‹…m⁻¹ +$(angularlength(English,Metric)) +``` +""" angularlength + @doc """ $(convertext(:area,"length(U,S)^2")) @@ -53,6 +78,20 @@ $(area(Survey,English)) ``` """ area +@doc """ +$(convertext(:angulararea,"area(U,S)/solidangle(U,S)")) + +Extent of two-dimensional shape or `area` (mΒ²), unit conversion factor. + +```Julia +julia> angulararea(CGS,Metric) # mΒ²β‹…cm⁻² +$(angulararea(CGS,Metric)) + +julia> angulararea(English,Metric) # mΒ²β‹…ft⁻² +$(angulararea(English,Metric)) +``` +""" angulararea + @doc """ $(convertext(:volume,"length(U,S)^3")) @@ -101,7 +140,7 @@ $(angularwavenumber(English,Metric)) @doc """ $(convertext(:fuelefficiency,"1/area(U,S)")) -Distance per volume or `fuelefficiency` (mβ‹…m⁻³, m⁻²), unit conversion factor. +Distance per volume or fuel efficiency (mβ‹…m⁻³, m⁻²), unit conversion factor. ```Julia julia> fuelefficiency(CGS,Metric) # cmΒ²β‹…m⁻² @@ -144,7 +183,7 @@ Circular radian frequency (radβ‹…Hz or radβ‹…s⁻¹), unit conversion factor. ```Julia julia> angularfrequency(IAU,Metric) dayβ‹…s⁻¹ -$(frequency(IAU,Metric)) +$(angularfrequency(IAU,Metric)) ``` """ angularfrequency @@ -178,6 +217,26 @@ $(speed(Survey,English)) ``` """ speed +@doc """ +$(convertext(:stagnance,"lightspeed(U)/lightspeed(S)")) + +Stagnance or `time` per `length` (sβ‹…m⁻¹), unit conversion factor. + +```Julia +julia> stagnance(CGS,Metric) # cmβ‹…m⁻¹ +$(stagnance(CGS,Metric)) + +julia> stagnance(IAU,Metric) # auβ‹…sβ‹…day⁻¹⋅m⁻¹ +$(stagnance(IAU,Metric)) + +julia> stagnance(English,Metric) # ftβ‹…m⁻¹ +$(stagnance(English,Metric)) + +julia> stagnance(Survey,English) # ftUSβ‹…ft⁻¹ +$(stagnance(Survey,English)) +``` +""" stagnance + @doc """ $(convertext(:acceleration,"speed(U,S)/time(U,S)")) @@ -296,24 +355,57 @@ $(volume(Survey,English)) """ volumeflow @doc """ -$(convertext(:specificenergy,"speed(U,S)^2")) +$(convertext(:etendue,"area(U,S)*solidangle(U,S)")) -Massic energy or `energy` per `mass` or `specificenergy` (Jβ‹…kg⁻¹), unit conversion factor. +Etendue or `area` times `solidangle` (mΒ², ftΒ²), unit conversion factor. ```Julia -julia> specificenergy(CGS,Metric) # mΒ²β‹…cm⁻² -$(specificenergy(CGS,Metric)) +julia> etendue(CGS,Metric) # mΒ²β‹…cm⁻² +$(etendue(CGS,Metric)) -julia> specificenergy(IAU,Metric) # mΒ²β‹…dayΒ²β‹…s⁻²⋅au⁻² -$(specificenergy(IAU,Metric)) +julia> etendue(English,Metric) # mΒ²β‹…ft⁻² +$(etendue(English,Metric)) +``` +""" etendue -julia> specificenergy(English,Metric) # mΒ²β‹…ft⁻² -$(specificenergy(English,Metric)) +@doc """ +$(convertext(:photonintensity,"frequency(U,S)/solidangle(U,S)")) -julia> specificenergy(Survey,English) # ftΒ²β‹…ftUS⁻² -$(specificenergy(Survey,English)) +Photon intensity or `frequency` per `area` (Hzβ‹…m⁻², m⁻²⋅s⁻¹), unit conversion factor. + +```Julia +julia> photonintensity(IAU,Metric) dayβ‹…s⁻¹ +$(photonintensity(IAU,Metric)) ``` -""" specificenergy +""" photonintensity + +@doc """ +$(convertext(:photonirradiance,"1/area(U,S)/time(U,S)")) + +Photon flux or `frequency` per `area` (Hzβ‹…m⁻², m⁻²⋅s⁻¹), unit conversion factor. + +```Julia +julia> photonirradiance(CGS,Metric) # cmΒ²β‹…m⁻² +$(photonirradiance(CGS,Metric)) + +julia> photonirradiance(English,Metric) # ftΒ²β‹…m⁻² +$(photonirradiance(English,Metric)) +``` +""" photonirradiance + +@doc """ +$(convertext(:photonradiance,"photonirradiance(U,S)/solidangle(U,S)")) + +Photon radiance or `photonirradiance` per `solidangle` (Hzβ‹…m⁻², m⁻²⋅s⁻¹), unit conversion factor. + +```Julia +julia> photonradiance(CGS,Metric) # cmΒ²β‹…m⁻² +$(photonradiance(CGS,Metric)) + +julia> photonradiance(English,Metric) # ftΒ²β‹…m⁻² +$(photonradiance(English,Metric)) +``` +""" photonradiance # kinematic @@ -369,6 +461,26 @@ $(inertia(PlanckGauss,Metric)) ``` """ inertia +@doc """ +$(convertext(:specificenergy,"speed(U,S)^2/gravity(U,S)")) + +Massic energy or `energy` per `mass` or `specificenergy` (Jβ‹…kg⁻¹), unit conversion factor. + +```Julia +julia> specificenergy(CGS,Metric) # mΒ²β‹…cm⁻² +$(specificenergy(CGS,Metric)) + +julia> specificenergy(IAU,Metric) # mΒ²β‹…dayΒ²β‹…s⁻²⋅au⁻² +$(specificenergy(IAU,Metric)) + +julia> specificenergy(English,Metric) # mΒ²β‹…ft⁻² +$(specificenergy(English,Metric)) + +julia> specificenergy(Survey,English) # ftΒ²β‹…ftUS⁻² +$(specificenergy(Survey,English)) +``` +""" specificenergy + @doc """ $(convertext(:energy,"mass(U,S)*specificenergy(U,S)")) @@ -522,7 +634,7 @@ $(momentum(British,Metric)) """ momentum @doc """ -$(convertext(:angularmomentum,"momentum(U,S)*lengt(U,S)*angle(U,S)")) +$(convertext(:angularmomentum,"impulse(U,S)*length(U,S)/angle(U,S)")) Rotational momentum or `angularmomentum` (Nβ‹…mβ‹…s, kgβ‹…mΒ²β‹…s⁻¹), unit conversion factor. diff --git a/src/physics.jl b/src/physics.jl index 3275e10..11de150 100644 --- a/src/physics.jl +++ b/src/physics.jl @@ -16,14 +16,14 @@ @pure dalton(U::UnitSystem,C::Coupling=universe(U)) = electronmass(U,C)/electronunit(C) @pure protonmass(U::UnitSystem,C::Coupling=universe(U)) = protonelectron(C)*electronmass(U,C) @pure gaussgravitation(U::UnitSystem,C::Coupling=universe(U)) = sqrt(normal(gravitation(IAU)))*radian(U)/day(U) -@pure einstein(U::UnitSystem,C::Coupling=universe(U)) = two(U)*spat(U)*gravitation(U,C)/lightspeed(U,C)^4 -#@pure einstein2(U::UnitSystem,C::Coupling=universe(U)) = two(U)*spat(U)*gravitation(U,C)/lightspeed(U,C)^2 +@pure einstein(U::UnitSystem,C::Coupling=universe(U)) = two(U)^2*tau(U)*gravitation(U,C)/lightspeed(U,C)^4 +#@pure einstein2(U::UnitSystem,C::Coupling=universe(U)) = two(U)^2*tau(U)*gravitation(U,C)/lightspeed(U,C)^2 @pure molargas(U::UnitSystem,C::Coupling=universe(U)) = boltzmann(U,C)*avogadro(U,C) -@pure stefan(U::UnitSystem,C::Coupling=universe(U)) = normal(turn(U))^4/two(U)^5*spat(U)*boltzmann(U,C)^4/(three(U)*five(U)*planck(U,C)^3*lightspeed(U,C)^2) +@pure stefan(U::UnitSystem,C::Coupling=universe(U)) = tau(U)^5/two(U)^4*boltzmann(U,C)^4/(three(U)*five(U)*planck(U,C)^3*lightspeed(U,C)^2) @pure radiationdensity(U::UnitSystem,C::Coupling=universe(U)) = two(U)^2*stefan(U,C)/lightspeed(U,C) @pure vacuumpermittivity(U::UnitSystem,C::Coupling=universe(U)) = inv(vacuumpermeability(U,C)*(lightspeed(U,C)*lorentz(U))^2) -@pure electrostatic(U::UnitSystem,C::Coupling=universe(U)) = rationalization(U)/spat(U)/vacuumpermittivity(U,C) -@pure biotsavart(U::UnitSystem,C::Coupling=universe(U)) = vacuumpermeability(U,C)*lorentz(U)*(rationalization(U)/spat(U)) +@pure electrostatic(U::UnitSystem,C::Coupling=universe(U)) = rationalization(U)/(two(U)*tau(U))/vacuumpermittivity(U,C) +@pure biotsavart(U::UnitSystem,C::Coupling=universe(U)) = vacuumpermeability(U,C)*lorentz(U)*(rationalization(U)/(two(U)*tau(U))) @pure magnetostatic(U::UnitSystem) = lorentz(U)*biotsavart(U) @pure vacuumimpedance(U::UnitSystem,C::Coupling=universe(U)) = vacuumpermeability(U,C)*lightspeed(U,C)*rationalization(U)*lorentz(U)^2 @pure faraday(U::UnitSystem,C::Coupling=universe(U)) = elementarycharge(U,C)*avogadro(U,C) @@ -45,7 +45,7 @@ @pure amagat(U::UnitSystem) = loschmidt(U)/avogadro(U) @pure wienwavelength(U::UnitSystem) = planck(U)*lightspeed(U)/boltzmann(U)/Constant(4.965114231744276303) @pure wienfrequency(U::UnitSystem) = Constant(2.821439372122078893)*boltzmann(U)/planck(U) -@pure eddington(U::UnitSystem) = mass(𝟏,U,Cosmological) +@pure eddington(U::UnitSystem) = mass(one(U),U,Cosmological) @pure solarmass(U::UnitSystem) = mass(GMβ˜‰/G,U,Metric) @pure earthmass(U::UnitSystem) = mass(GME/G,U,Metric) @pure jupitermass(U::UnitSystem) = mass(GMJ/G,U,Metric) @@ -53,7 +53,7 @@ @pure mechanicalheat(U::UnitSystem) = molargas(U)*normal(calorie(Metric)/molargas(Metric)) @pure gaussianyear(U::UnitSystem) = turn(U)/gaussgravitation(U) @pure siderealyear(U::UnitSystem) = gaussianyear(U)/normal(sqrt(solarmass(IAU)+earthmass(IAU)+lunarmass(IAU))) -@pure gaussianmonth(U::UnitSystem) = normal(turn(Metric)*sqrt(normal(lunardistance(Metric))^3/GME))*time(Metric,U) +@pure gaussianmonth(U::UnitSystem) = tau(U)*sqrt(LD^3/GME)*time(Metric,U) @pure siderealmonth(U::UnitSystem) = gaussianmonth(U)/normal(sqrt(earthmass(IAUE)+lunarmass(IAUE))) @pure synodicmonth(U::UnitSystem) = inv(inv(siderealmonth(U))-inv(siderealyear(U))) @pure jovianyear(U::UnitSystem) = day(U)*sqrt(normal(jupiterdistance(U)^3/solarmass(U)/gravitation(U)))*turn(U)/radian(U)/normal(sqrt(solarmass(IAU)+jupitermass(IAU))) diff --git a/src/physicsdocs.jl b/src/physicsdocs.jl index 5ce8759..5b22a32 100644 --- a/src/physicsdocs.jl +++ b/src/physicsdocs.jl @@ -43,19 +43,19 @@ $(unitext(:turn,"2Ο€/angle(U)")) Complete rotation `angle` of revolution from a full circle. ```Julia -julia> turn(MetricEngineering) +julia> turn(MetricEngineering) # rad $(turn(MetricEngineering)) -julia> turn(MetricDegree) +julia> turn(MetricDegree) # deg $(turn(MetricDegree)) -julia> turn(MetricArcminute) +julia> turn(MetricArcminute) # amin $(turn(MetricArcminute)) -julia> turn(MetricArcsecond) +julia> turn(MetricArcsecond) # asec $(turn(MetricArcsecond)) -julia> turn(MetricGradian) +julia> turn(MetricGradian) # gon $(turn(MetricGradian)) ``` """ turn @@ -65,19 +65,19 @@ $(unitext(:spat,"4Ο€/solidangle(U)")) Complete spherical `solidangle` around point from a full sphere. ```Julia -julia> spat(MetricEngineering) +julia> spat(MetricEngineering) # radΒ² $(spat(MetricEngineering)) -julia> spat(MetricDegree) +julia> spat(MetricDegree) # degΒ² $(spat(MetricDegree)) -julia> spat(MetricArcminute) +julia> spat(MetricArcminute) # aminΒ² $(spat(MetricArcminute)) -julia> spat(MetricArcsecond) +julia> spat(MetricArcsecond) # asecΒ² $(spat(MetricArcsecond)) -julia> spat(MetricGradian) +julia> spat(MetricGradian) # gonΒ² $(spat(MetricGradian)) ``` """ spat @@ -447,7 +447,7 @@ $(gravitation(PlanckGauss)) """ gravitation, G, GG @doc """ -$(unitext(:einstein,"𝟐*spat(U)*gravitation(U)/lightspeed(U)^4")) +$(unitext(:einstein,"𝟐^2*Ο„*gravitation(U)/lightspeed(U)^4")) Einstein's gravitational constant from the Einstein field equations (sβ‹…Β²β‹…m⁻¹⋅kg⁻¹). ```Julia @@ -530,7 +530,7 @@ $(molargas(SI1976)) """ molargas, Rα΅€, Ru @doc """ -$(unitext(:stefan,"Ο€^4/𝟐*spat(U)*boltzmann(U)^4/(15planck(U)^3*lightspeed(U)^2)")) +$(unitext(:stefan,"Ο„^5/𝟐^4*boltzmann(U)^4/(πŸ‘*πŸ“*planck(U)^3*lightspeed(U)^2)")) Stefan-Boltzmann proportionality `Οƒ` of black body radiation (Wβ‹…m⁻²⋅K⁻⁴ or ?β‹…ft⁻²⋅°R⁻⁴). @@ -611,7 +611,7 @@ $(vacuumpermittivity(SI2019)/elementarycharge(SI2019)) """ vacuumpermittivity, Ξ΅β‚€, Ο΅β‚€, e0 @doc """ -$(unitext(:electrostatic,"rationalization(U)/spat(U)/vacuumpermittivity(U)")) +$(unitext(:electrostatic,"rationalization(U)/𝟐/Ο„/vacuumpermittivity(U)")) Electrostatic proportionality constant `kβ‚‘` for the Coulomb's law force (Nβ‹…mΒ²β‹…C⁻²). @@ -643,7 +643,7 @@ $(electrostatic(HLU)) """ electrostatic, kβ‚‘, ke @doc """ -$(unitext(:biotsavart,"vacuumpermeability(U)*lorentz(U)*rationalization(U)/spat(U)")) +$(unitext(:biotsavart,"vacuumpermeability(U)*lorentz(U)*rationalization(U)/𝟐/Ο„")) Magnetostatic proportionality constant `Ξ±B` for the Biot-Savart's law (H/m). @@ -746,6 +746,9 @@ $(vacuumimpedance(ESU)) julia> vacuumimpedance(HLU) # hlΞ© $(vacuumimpedance(HLU)) + +julia> vacuumimpedance(IPS) # inβ‹…lbβ‹…sβ‹…C⁻² +$(vacuumimpedance(IPS)) ``` """ vacuumimpedance, Zβ‚€, Z0 @@ -818,7 +821,7 @@ $(faraday(Metric)/HOUR) """ faraday, 𝔉, FF @doc """ -$(unitext(:josephson,"𝟐*elementarycharge(U)*lorentz(U)/planck(U) # 𝟏/magneticfluxquantum(U)")) +$(unitext(:josephson,"𝟐*elementarycharge(U)*lorentz(U)/planck(U)")) Josephson constant `KJ` relating potential difference to irradiation frequency (Hzβ‹…V⁻¹). ```Julia @@ -952,8 +955,8 @@ $(hartree(Metric)*avogadro(Metric)/kilo) julia> hartree(Metric)*avogadro(Metric)/kilocalorie(Metric) # kcalβ‹…mol⁻¹ $(hartree(Metric)*avogadro(Metric)/kilocalorie(Metric)) -julia> 𝟐*centi*rydberg(Metric) # Eβ‚•/𝘩/𝘀/100 cm⁻¹ -$(hartree(Metric)/planck(Metric)/lightspeed(Metric)/(𝟐*πŸ“)^2) +julia> 𝟐*rydberg(CGS) # Eβ‚•/𝘩/𝘀/100 cm⁻¹ +$(𝟐*rydberg(CGS)) julia> hartree(Metric)/planck(Metric) # Hz $(hartree(Metric)/planck(Metric)) @@ -1489,6 +1492,7 @@ $(greatcircle(IAU)) @doc """ sackurtetrode(U::UnitSystem,P=atm,T=𝟏,m=Da) = log(kB*T/P*sqrt(m*kB*T/Ο„/Δ§^2)^3)+5/2 dimensionless : [πŸ™], [πŸ™], [πŸ™], [πŸ™], [πŸ™] + log(FL⁻²Θ⁻⁡ᐟ²AΒ³αŸΒ²β‹…(ΞΌβ‚‘α΅€β»Β³αŸΒ²atmβ»ΒΉΟ„β»Β³αŸΒ²exp(2⁻¹5) = 0.594141574194 Β± 2.6e-11)) Ideal gas entropy density for pressure `P`, temperature `T`, atomic mass `m` (dimensionless). ```Julia @@ -1527,7 +1531,7 @@ $(mechanicalheat(British)) """ mechanicalheat @doc """ - eddington(U::UnitSystem) = mass(𝟏,U,Cosmological) +$(unitext(:eddington,"mass(𝟏,U,Cosmological)")) Approximate number of protons in the `Universe` as estimated by Eddington (kg or lb). ```Julia diff --git a/src/systems.jl b/src/systems.jl index 72c951a..4a11418 100644 --- a/src/systems.jl +++ b/src/systems.jl @@ -12,15 +12,16 @@ # https://github.com/chakravala # https://crucialflow.com -export deka,hecto,kilo,mega,giga,tera,peta,exa,zetta,yotta +export deka,hecto,kilo,mega,giga,tera,peta,exa,zetta,yotta,sixty export deci,centi,milli,micro,nano,pico,femto,atto,zepto,yocto export byte,kibi,mebi,gibi,tebi,pebi,exbi,zebi,yobi export slug, ft, KJ1990, KJ2014, RK1990, RK2014, mβ‚‘1990, mβ‚‘2014, temp, units, Β°R, Tβ‚€, eV export slugs, kilograms, lbm, meters, feet, rankine, kelvin, moles, molecules, universal -export Universe, UnitSystem, US, universe, HOUR, DAY, th, lc, mc, tcq, lcq, mcq +export Universe, UnitSystem, US, universe, HOUR, DAY, th, lc, mc, tcq, lcq, mcq, Ο‚, Ο†, πŸ”πŸŽ export similitude, πŸ™, F, M, L, T, Q, Θ, N, J, A, Ξ›, C, sackurtetrode,atomicmass,intensity export Β°R, Ο„, 𝟏𝟎, 𝟐, πŸ‘, πŸ“, nm, 𝟏, mβ‚‘, ΞΌβ‚€, Mα΅€, Rα΅€, Ξ±G, GG, slug, Δ§, ΞΌβ‚šβ‚‘, Ξ±L, πŸ•, 𝟏𝟏, πŸπŸ—, πŸ’πŸ‘ +export two, three, five, seven, eleven, nineteen, fourtythree, tau, eulergamma, golden const EMU2019,ESU2019,stiffness,intensity,atomicmass = EMU,ESU,fluence,irradiance,dalton @@ -82,20 +83,24 @@ export lP, tP, TP, lS, tS, mS, qS, lA, tA, mA, qA, lQCD, tQCD, mQCD, Ο΅β‚€, Ξ±L, export GMβ˜‰, GME, GMJ, LD, JD, lb, fur, ftUS, Rα΅€2014, Ξ©α΅’β‚œ, Vα΅’β‚œ, em, mi, 𝘦ᡣ @doc """ - Constant{D} <: Real + Constant{N} <: Real -Numerical constant `D` used in `UnitSystem` derivations. +Numerical constant `N` with known value at compile time. ```Julia julia> Constant(100) $(Constant(100)) ``` -Can be multiplied, added, subtracted, and so on. +Operations on `Constant` are closed (`*`, `/`, `+`, `-`, `^`), yet they also behave like `Float64` values when mixed with non-`Constant` arguments. + +In `UnitSystems` and `Similitude`, the spectrum of `Constant` values is generated by a group of 11 mathematical constants (7 `Integer` primes and 4 `Irrational` numbers) with 33 physical measurement definitions. +These are `𝟐`, `πŸ‘`, `πŸ“`, `πŸ•`, `𝟏𝟏`, `πŸπŸ—`, `πŸ’πŸ‘`, `Ο†`, `Ξ³`, `β„―`, `Ο„`, +`kB`, `NA`, `𝘩`, `𝘀`, `𝘦`, `Kcd`, `ΔνCs`, `R∞`, `Ξ±`, `ΞΌβ‚‘α΅€`, `ΞΌβ‚šα΅€`, `ΩΛ`, `H0`, `gβ‚€`, `aβ±Ό`, `au`, `ft`, `ftUS`, `lb`, `Tβ‚€`, `atm`, `inHg`, `RK90`, `KJ90`, `RK`, `KJ`, `Rα΅€2014`, `Ξ©α΅’β‚œ`, `Vα΅’β‚œ`, `kG`, `mP`, `GME`, `GMJ`. """ Constant # engineering unit systems docs @doc """ - Metric = MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7) +$(systext(:Metric,"MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7)")) Standard `Metric` system based on exact `molarmass` and `vacuumpermeability`. @@ -124,7 +129,7 @@ $(luminousefficacy(Metric)) """ Metric, MKS @doc """ - SI2019 = MetricSystem(Mα΅€,ΞΌβ‚€) +$(systext(:SI2019,"MetricSystem(Mα΅€,ΞΌβ‚€)")) Systeme International d'Unites based on approximate `molarmass` and `vacuumpermeability`. @@ -153,7 +158,7 @@ $(luminousefficacy(SI2019)) """ SI2019, SI @doc """ - MetricTurn = MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,Rα΅€,𝟏,𝟏/Ο„) +$(systext(:MetricTurn,"MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,Rα΅€,𝟏,𝟏/Ο„)")) Standard `MetricTurn` system based on exact `molarmass` and `vacuumpermeability`. @@ -182,7 +187,7 @@ $(luminousefficacy(MetricTurn)) """ MetricTurn @doc """ - MetricDegree = MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,Rα΅€,𝟏,𝟐^3*πŸ‘^2*πŸ“/Ο„) +$(systext(:MetricDegree,"MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,Rα΅€,𝟏,𝟐^3*πŸ‘^2*πŸ“/Ο„)")) Standard `MetricDegree` system based on exact `molarmass` and `vacuumpermeability`. @@ -211,7 +216,7 @@ $(luminousefficacy(MetricDegree)) """ MetricDegree @doc """ - MetricArcminute = MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,Rα΅€,𝟏,𝟐^5*πŸ‘^3*πŸ“^2/Ο„) +$(systext(:MetricArcminute,"MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,Rα΅€,𝟏,𝟐^5*πŸ‘^3*πŸ“^2/Ο„)")) Standard `MetricArcminute` system based on exact `molarmass` and `vacuumpermeability`. @@ -240,7 +245,7 @@ $(luminousefficacy(MetricArcminute)) """ MetricArcminute @doc """ - MetricArcsecond = MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,Rα΅€,𝟏,𝟐^7*πŸ‘^4*3/Ο„) +$(systext(:MetricArcsecond,"MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,Rα΅€,𝟏,𝟐^7*πŸ‘^4*3/Ο„)")) Standard `MetricArcsecond` system based on exact `molarmass` and `vacuumpermeability`. @@ -269,7 +274,7 @@ $(luminousefficacy(MetricArcsecond)) """ MetricArcsecond @doc """ - MetricGradian = MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,Rα΅€,𝟏,𝟐^4*πŸ“^2/Ο„) +$(systext(:MetricGradian,"MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,Rα΅€,𝟏,𝟐^4*πŸ“^2/Ο„)")) Standard `MetricGradian` system based on exact `molarmass` and `vacuumpermeability`. @@ -298,7 +303,7 @@ $(luminousefficacy(MetricGradian)) """ MetricGradian @doc """ - MetricEngineering = MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,Rα΅€,gβ‚€) +$(systext(:MetricEngineering,"MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,Rα΅€,gβ‚€)")) Standard `MetricEngineering` system based on kilogram and kilopond (kilogram-force) units. @@ -330,7 +335,7 @@ $(gravity(MetricEngineering)) """ MetricEngineering, ME #=@doc """ - SI2019Engineering = MetricSystem(Mα΅€,ΞΌβ‚€,Rα΅€,gβ‚€) +$(systext(:SI2019Engineering,"MetricSystem(Mα΅€,ΞΌβ‚€,Rα΅€,gβ‚€)")) Systeme International d'Unites based on kilogram and kilopond (kilogram-force) units. @@ -362,7 +367,7 @@ $(gravity(SI2019Engineering)) """ SI2019Engineering, SIE=# @doc """ - SI1976 = MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,8.31432) +$(systext(:SI1976,"MetricSystem(milli,𝟐*Ο„/𝟏𝟎^7,8.31432)")) Reference `UnitSystem` with universal gas constant of `8.31432` from 1976 standard atmosphere. @@ -391,7 +396,7 @@ $(luminousefficacy(SI1976)) """ SI1976 @doc """ - CODATA = ConventionalSystem(RK2014,KJ2014,Rα΅€2014) +$(systext(:CODATA,"ConventionalSystem(RK2014,KJ2014,Rα΅€2014)")) Reference `UnitSystem` based on Committee on Data of the International Science Council. @@ -426,7 +431,7 @@ $(luminousefficacy(CODATA)) """ CODATA @doc """ - Conventional = ConventionalSystem(RK1990,KJ2014) +$(systext(:Conventional,"ConventionalSystem(RK1990,KJ2014)")) Conventional electronic `UnitSystem` with 1990 tuned `josephson` and `klitzing` constants. @@ -461,7 +466,7 @@ $(luminousefficacy(Conventional)) """ Conventional @doc """ - International = ElectricSystem(Metric,$Ξ©α΅’β‚œ,$Vα΅’β‚œ) +$(systext(:International,"ElectricSystem(Metric,$Ξ©α΅’β‚œ,$Vα΅’β‚œ)")) International `UnitSystem` with United States measurements of `Ξ©α΅’β‚œ` and `Vα΅’β‚œ`. @@ -496,7 +501,7 @@ $(luminousefficacy(International)) """ International @doc """ - InternationalMean = ElectricSystem(Metric,1.00049,1.00034) +$(systext(:InternationalMean,"ElectricSystem(Metric,1.00049,1.00034)")) International `UnitSystem` with mean measurements of `Ξ©α΅’β‚œ` and `Vα΅’β‚œ`. @@ -531,7 +536,7 @@ $(luminousefficacy(International)) """ InternationalMean @doc """ - Meridian = EntropySystem(Metric,𝟏,em,em^3,𝟏,Ο„/𝟐^6/πŸ“^7,milli) +$(systext(:Meridian,"EntropySystem(Metric,𝟏,em,em^3,𝟏,Ο„/𝟐^6/πŸ“^7,milli)")) Modern ideal `Meridian` system defined by France's original `earthmeter` definition. @@ -563,7 +568,7 @@ $(luminousefficacy(Meridian)) """ Meridian #=@doc """ - MeridianEngineering = EntropySystem(MetricEngineering,𝟏,em,em^3,𝟏,Ο„/𝟐^6/πŸ“^7/gβ‚€^2,milli) +$(systext(:MeridianEngineering,"EntropySystem(MetricEngineering,𝟏,em,em^3,𝟏,Ο„/𝟐^6/πŸ“^7/gβ‚€^2,milli)")) Modern ideal engineering `UnitSystem` variant of the original French `Meridian` system. @@ -629,7 +634,7 @@ $(rationalization(cgs)) for U ∈ (:CGSm,:CGSe,:EMU,:ESU) (EU,AMP) = QuoteNode.(U βˆ‰ (:CGSe,:ESU) ? (:EMU,:Bi) : (:ESU,:statA)) @eval @doc """ - $($(QuoteNode(U))) = GaussSystem(Metric,$($EUβ‰ :EMU ? "(𝟏𝟎*𝘀)^-2" : "𝟏"),𝟐*Ο„) +$(systext($(QuoteNode(U)),"GaussSystem(Metric,$($EUβ‰ :EMU ? "(𝟏𝟎*𝘀)^-2" : "𝟏"),𝟐*Ο„)")) Centimetre-gram-second `UnitSystem` variant based on `$($EU)` (non-rationalized). @@ -646,7 +651,7 @@ $(cgstext(Symbol($(QuoteNode(U)),:2019),$AMP)) end #=@doc """ - Thomson = GaussSystem(Metric,𝟏,𝟐*Ο„,𝟏/𝟐) +$(systext(:Thomson,"GaussSystem(Metric,𝟏,𝟐*Ο„,𝟏/𝟐)")) Centimetre-gram-second `UnitSystem` variant `Thomson` (EMU-Lorentz, non-rationalized). @@ -681,7 +686,7 @@ $(lorentz(Thomson)) """ Thomson=# @doc """ - Gauss = GaussSystem(Metric,𝟏,𝟐*Ο„,𝟏𝟎^-2/𝘀) +$(systext(:Gauss,"GaussSystem(Metric,𝟏,𝟐*Ο„,𝟏𝟎^-2/𝘀)")) Centimetre-gram-second `UnitSystem` variant `CGS` (Gauss-Lorentz, non-rationalized). @@ -716,7 +721,7 @@ $(lorentz(Gauss)) """ Gauss, CGS @doc """ - LorentzHeaviside = GaussSystem(Metric,𝟏,𝟏,centi/𝘀) +$(systext(:LorentzHeaviside,"GaussSystem(Metric,𝟏,𝟏,centi/𝘀)")) Centimetre-gram-second `UnitSystem` variant `HLU` (Heaviside-Lorentz, rationalized). @@ -750,8 +755,8 @@ $(lorentz(LorentzHeaviside)) ``` """ LorentzHeaviside, HLU -@doc """ - Kennelly = GaussSystem(Metric,𝟏𝟎^-7,𝟐*Ο„,𝟏,𝟏,𝟏) +#=@doc """ +$(systext(:Kennelly,"GaussSystem(Metric,𝟏𝟎^-7,𝟐*Ο„,𝟏,𝟏,𝟏)")) Kennelly ? variant `UnitSystem` of the standard `Metric` units ??? @@ -780,10 +785,10 @@ $(luminousefficacy(Kennelly)) julia> rationalization(Kennelly) $(rationalization(Kennelly)) ``` -""" Kennelly +""" Kennelly=# @doc """ - GravitationalMetric = EntropySystem(Metric,𝟏,𝟏,gβ‚€) +$(systext(:GravitationalMetric,"EntropySystem(Metric,𝟏,𝟏,gβ‚€)")) Standard `GravitationalMetric` system based on `hyl` and `kilopond` units. @@ -812,7 +817,7 @@ $(luminousefficacy(GravitationalMetric)) """ GravitationalMetric, GM #=@doc """ - GraviationalSI2019 = EntropySystem(SI2019,𝟏,𝟏,gβ‚€) +$(systext(:GraviationalSI2019,"EntropySystem(SI2019,𝟏,𝟏,gβ‚€)")) Gravitational Systeme International d'Unites based on `hyl` and `kilopond` units. @@ -841,7 +846,7 @@ $(luminousefficacy(GravitationalMetric)) """ GravitationalSI2019, GSI, GSI2019=# #=@doc """ - GravitationalMeridian = EntropySystem(Metric,𝟏,em,gβ‚€*em^3,𝟏,Ο„/𝟐^6/πŸ“^7/gβ‚€,milli) +$(systext(:GravitationalMeridian,"EntropySystem(Metric,𝟏,em,gβ‚€*em^3,𝟏,Ο„/𝟐^6/πŸ“^7/gβ‚€,milli)")) Gravitational `UnitSystem` variant of the original French `Meridian` unit defintion. @@ -873,7 +878,7 @@ $(luminousefficacy(GravitationalMeridian)) """ GravitationalMeridian=# @doc """ - MTS = EntropySystem(SI2019,𝟏,𝟏,kilo) +$(systext(:MTS,"EntropySystem(SI2019,𝟏,𝟏,kilo)")) Metre-tonne-second `UnitSystem` variant of `Metric` system. @@ -902,7 +907,7 @@ $(luminousefficacy(MTS)) """ MTS @doc """ - KKH = EntropySystem(Metric,HOUR,kilo,𝟏) +$(systext(:KKH,"EntropySystem(Metric,HOUR,kilo,𝟏)")) Kilometer-kilogram-hour `UnitSystem` variant of `Metric` system. @@ -931,7 +936,7 @@ $(luminousefficacy(KKH)) """ KKH @doc """ - IAUβ˜‰ = EntropySystem(Metric,DAY,au,GMβ˜‰/G) +$(systext(:IAUβ˜‰,"EntropySystem(Metric,DAY,au,GMβ˜‰/G)")) Solar `UnitSystem` defined by International Astronomical Union and `solarmass`. @@ -963,7 +968,7 @@ $(gaussgravitation(IAU)) """ IAUβ˜‰, IAU @doc """ - IAUE = EntropySystem(Metric,DAY,LD,GME/G) +$(systext(:IAUE,"EntropySystem(Metric,DAY,LD,GME/G)")) Astronomical (Earth) `UnitSystem` defined by `lunardistance` around the `earthmass`. @@ -995,7 +1000,7 @@ $(turn(IAU)/gaussianmonth(IAU)) """ IAUE @doc """ - IAUJ = EntropySystem(Metric,DAY,JD,GMJ/G) +$(systext(:IAUJ,"EntropySystem(Metric,DAY,JD,GMJ/G)")) Astronomical (Jupiter) `UnitSystem` defined by `jupiterdistance` around the `solarmass`. @@ -1027,7 +1032,7 @@ $(sqrt(gravitation(IAUJ)*solarmass(IAUJ)/jupiterdistance(IAUJ)^3)) """ IAUJ #=@doc """ - Astronomical = EntropySystem(Metric,𝟏,𝟏,𝟏/gravitation(Metric)) +$(systext(:Astronomical,"EntropySystem(Metric,𝟏,𝟏,𝟏/gravitation(Metric))")) Astronomical `UnitSystem` defined by making the `newton` gravitational constant 1. @@ -1059,7 +1064,7 @@ $(gravitation(Astronomical)) """ Astronomical=# @doc """ - Hubble = AstronomicalSystem(Metric,th,𝘀*th,mβ‚‘) +$(systext(:Hubble,"AstronomicalSystem(Metric,th,𝘀*th,mβ‚‘)")) Hubble `UnitSystem` defined by `hubble` parameter. @@ -1094,7 +1099,7 @@ $(cosmological(Hubble)) """ Hubble @doc """ - Cosmological = AstronomicalSystem(Metric,lc/𝘀,lc,mc) +$(systext(:Cosmological,"AstronomicalSystem(Metric,lc/𝘀,lc,mc)")) Cosmological scale `UnitSystem` defined by `darkenergydensity`. @@ -1129,7 +1134,7 @@ $(cosmological(Cosmological)) """ Cosmological @doc """ - CosmologicalQuantum = AstronomicalSystem(Metric,tcq,lcq,mcq) +$(systext(:CosmologicalQuantum,"AstronomicalSystem(Metric,tcq,lcq,mcq)")) Cosmological quantum scale `UnitSystem` defined by `darkenergydensity`. @@ -1158,7 +1163,7 @@ $(luminousefficacy(CosmologicalQuantum)) """ CosmologicalQuantum @doc """ - British = RankineSystem(Metric,ft,slug) +$(systext(:British,"RankineSystem(Metric,ft,slug)")) British Gravitational `UnitSystem` historically used by Britain and United States. @@ -1187,7 +1192,7 @@ $(luminousefficacy(British)) """ British, BritishGravitational, BG @doc """ - English = RankineSystem(Metric,ft,lb,gβ‚€/ft) +$(systext(:English,"RankineSystem(Metric,ft,lb,gβ‚€/ft)")) English Engineering `UnitSystem` historically used in the United States of America. @@ -1219,7 +1224,7 @@ $(gravity(English)) """ English, EnglishEngineering, EE @doc """ - Survey = RankineSystem(Metric,ftUS,lb,gβ‚€/ftUS) +$(systext(:Survey,"RankineSystem(Metric,ftUS,lb,gβ‚€/ftUS)")) English Engineering `UnitSystem` based on the geophysical US survey foot (1200/3937). @@ -1251,7 +1256,7 @@ $(gravity(Survey)) """ Survey, EnglishUS @doc """ - FPS = RankineSystem(Metric,ft,lb) +$(systext(:FPS,"RankineSystem(Metric,ft,lb)")) Absolute English `UnitSystem` based on the foot, pound, second, and poundal. @@ -1280,7 +1285,7 @@ $(luminousefficacy(FPS)) """ FPS, AbsoluteEnglish, AE @doc """ - IPS = RankineSystem(Metric,ft/𝟐^2/πŸ‘,lb*gβ‚€*𝟐^2*πŸ‘/ft) +$(systext(:IPS,"RankineSystem(Metric,ft/𝟐^2/πŸ‘,lb*gβ‚€*𝟐^2*πŸ‘/ft)")) British Gravitational `UnitSystem` historically used in the United States of America. @@ -1309,7 +1314,7 @@ $(luminousefficacy(IPS)) """ IPS @doc """ - FFF = EntropySystem(Metric,𝟐*πŸ•*DAY,fur,𝟐*πŸ‘^2*πŸ“*lb,Β°R,0,𝟏) +$(systext(:FFF,"EntropySystem(Metric,𝟐*πŸ•*DAY,fur,𝟐*πŸ‘^2*πŸ“*lb,Β°R,0,𝟏)")) Furlong–firkin–fortnight `FFF` is a humorous `UnitSystem` based on unusal impractical units. @@ -1338,7 +1343,7 @@ $(luminousefficacy(FFF)) """ FFF @doc """ - MPH = EntropySystem(FPS,HOUR,mi,𝟏) +$(systext(:MPH,"EntropySystem(FPS,HOUR,mi,𝟏)")) Mile-pound-hour specification based on `FPS` absolute `UnitSystem`. @@ -1367,7 +1372,7 @@ $(luminousefficacy(MPH)) """ MPH @doc """ - Nautical = EntropySystem(Metric,HOUR,nm,em^3,𝟏,Ο„*πŸ‘^3/𝟐^10/πŸ“^12,milli) +$(systext(:Nautical,"EntropySystem(Metric,HOUR,nm,em^3,𝟏,Ο„*πŸ‘^3/𝟐^10/πŸ“^12,milli)")) Nautical miles, kilo-earthgram, hour specification based on `Meridian` definition. @@ -1420,7 +1425,7 @@ $(electronmass(U)) """ @doc """ - Planck = UnitSystem(𝟏,𝟏,𝟏,𝟏,√(𝟐*Ο„*Ξ±G)) +$(systext(:Planck,"UnitSystem(𝟏,𝟏,𝟏,𝟏,√(𝟐*Ο„*Ξ±G))")) Planck `UnitSystem` with the `electronmass` value `√(4Ο€*Ξ±G)` using gravitational coupling. @@ -1428,7 +1433,7 @@ $(textunits(Planck,:Planck)) """ Planck @doc """ - PlanckGauss = UnitSystem(𝟏,𝟏,𝟏,𝟐*Ο„,√αG) +$(systext(:PlanckGauss,"UnitSystem(𝟏,𝟏,𝟏,𝟐*Ο„,√αG)")) Planck (Gauss) `UnitSystem` with `permeability` of `4Ο€` and `electronmass` coupling `√αG`. @@ -1451,7 +1456,7 @@ $(temperature(PlanckGauss,SI2019)) """ PlanckGauss @doc """ - Stoney = UnitSystem(𝟏,𝟏/Ξ±,𝟏,𝟐*Ο„,√(Ξ±G/Ξ±)} +$(systext(:Stoney,"UnitSystem(𝟏,𝟏/Ξ±,𝟏,𝟐*Ο„,√(Ξ±G/Ξ±))")) Stoney `UnitSystem` with `permeability` of `4Ο€` and `electronmass` coupling `√(Ξ±G/Ξ±)`. @@ -1474,7 +1479,7 @@ $(charge(Stoney,SI2019)) """ Stoney @doc """ - Hartree = UnitSystem(𝟏,𝟏,𝟏/Ξ±,𝟐*Ο„*Ξ±^2,𝟏) +$(systext(:Hartree,"UnitSystem(𝟏,𝟏,𝟏/Ξ±,𝟐*Ο„*Ξ±^2,𝟏)")) Hartree atomic `UnitSystem` based on `bohr` radius and `elementarycharge` scale. @@ -1497,7 +1502,7 @@ $(charge(Hartree,SI2019)) """ Hartree @doc """ - Rydberg = UnitSystem(𝟏,𝟏,𝟐/Ξ±,Ο„/𝟐*Ξ±^2,𝟏/𝟐) +$(systext(:Rydberg,"UnitSystem(𝟏,𝟏,𝟐/Ξ±,Ο„/𝟐*Ξ±^2,𝟏/𝟐)")) Rydberg `UnitSystem` with `lightspeed` of `𝟐/Ξ±` and `permeability` of `Ο€*Ξ±^2`. @@ -1520,7 +1525,7 @@ $(charge(Rydberg,SI2019)) """ Rydberg @doc """ - Schrodinger = UnitSystem(𝟏,𝟏,𝟏/Ξ±,𝟐*Ο„*Ξ±^2,√(Ξ±G/Ξ±)) +$(systext(:Schrodinger,"UnitSystem(𝟏,𝟏,𝟏/Ξ±,𝟐*Ο„*Ξ±^2,√(Ξ±G/Ξ±))")) Schrodinger `UnitSystem` with `permeability` of `4Ο€/Ξ±inv^2` and `electronmass` of `√(Ξ±G*Ξ±inv)`. @@ -1528,7 +1533,7 @@ $(textunits(Schrodinger,:Schrodinger)) """ Schrodinger @doc """ - Electronic = UnitSystem(𝟏,𝟏/Ξ±,𝟏,𝟐*Ο„,𝟏} +$(systext(:Electronic,"UnitSystem(𝟏,𝟏/Ξ±,𝟏,𝟐*Ο„,𝟏)")) Electronic `UnitSystem` with `planckreduced` of `1/Ξ±` and `permeability` of `4Ο€`. @@ -1536,7 +1541,7 @@ $(textunits(Electronic,:Electronic)) """ Electronic @doc """ - Natural = UnitSystem(𝟏,𝟏,𝟏,𝟏,𝟏) +$(systext(:Natural,"UnitSystem(𝟏,𝟏,𝟏,𝟏,𝟏)")) Natural `UnitSystem` with all primary constants having unit value. @@ -1559,7 +1564,7 @@ $(charge(Natural,SI2019)) """ Natural @doc """ - NaturalGauss = UnitSystem(𝟏,𝟏,𝟏,𝟐*Ο„,𝟏} +$(systext(:NaturalGauss,"UnitSystem(𝟏,𝟏,𝟏,𝟐*Ο„,𝟏)")) Natural (Gauss) `UnitSystem` with the Gaussian `permeability` value of `4Ο€`. @@ -1567,7 +1572,7 @@ $(textunits(NaturalGauss,:NaturalGauss)) """ NaturalGauss @doc """ - QCD = UnitSystem(𝟏,𝟏,𝟏,𝟏,𝟏/ΞΌβ‚šβ‚‘) +$(systext(:QCD,"UnitSystem(𝟏,𝟏,𝟏,𝟏,𝟏/ΞΌβ‚šβ‚‘)")) Qunatum chromodynamics `UnitSystem` based on the `protonmass` scale. @@ -1590,7 +1595,7 @@ $(charge(QCD,SI2019)) """ QCD @doc """ - QCDGauss = UnitSystem(𝟏,𝟏,𝟏,𝟐*Ο„,𝟏/ΞΌβ‚šβ‚‘) +$(systext(:QCDGauss,"UnitSystem(𝟏,𝟏,𝟏,𝟐*Ο„,𝟏/ΞΌβ‚šβ‚‘)")) Qunatum chromodynamics (Gauss) `UnitSystem` based on the `protonmass` scale. @@ -1613,7 +1618,7 @@ $(charge(QCDGauss,SI2019)) """ QCDGauss @doc """ - QCDoriginal = UnitSystem(𝟏,𝟏,𝟏,𝟐*Ο„*Ξ±,𝟏/ΞΌβ‚šβ‚‘) +$(systext(:QCDoriginal,"UnitSystem(𝟏,𝟏,𝟏,𝟐*Ο„*Ξ±,𝟏/ΞΌβ‚šβ‚‘)")) Qunatum chromodynamics (original) `UnitSystem` scaled by `protonmass` and `elementarycharge`. diff --git a/src/thermodynamic.jl b/src/thermodynamic.jl index 8ff624b..754d912 100644 --- a/src/thermodynamic.jl +++ b/src/thermodynamic.jl @@ -63,6 +63,7 @@ Converts the number of moles `n` to number of molecules (dimensionless). @pure molarsusceptibility(U::UnitSystem,S::UnitSystem) = unit(specificsusceptibility(U,S)*molarmass(U,S)) @pure catalysis(U::UnitSystem,S::UnitSystem) = unit(molaramount(U,S)/time(U,S)) @pure specificity(U::UnitSystem,S::UnitSystem) = unit(volume(U,S)/molaramount(U,S)/time(U,S)) +@pure diffusionflux(U::UnitSystem,S::UnitSystem) = unit(molaramount(U,S)*photonirradiance(U,S)) # photometrics diff --git a/src/thermodynamicdocs.jl b/src/thermodynamicdocs.jl index 76bcc32..5d37485 100644 --- a/src/thermodynamicdocs.jl +++ b/src/thermodynamicdocs.jl @@ -15,7 +15,7 @@ # thermodynamics @doc """ -$(convertext(:temperature,"mass(U,S)*speed(U,S)^2/boltzmann(U,S)")) +$(convertext(:temperature,"mass(U,S)*speed(U,S)^2/entropy(U,S)")) Measurement scale for thermodynamic energy or `temperature` (K), unit conversion factor. @@ -358,6 +358,20 @@ $(specificity(English,Metric)) ``` """ specificity +@doc """ +$(convertext(:diffusionflux,"molaramount(U,S)*photonirradiance(U,S)")) + +Molar diffusion flux or `molarmount` times `flux` (molβ‹…s⁻¹⋅m⁻²), unit conversion factor. + +```Julia +julia> diffusionflux(CGS,Metric) # cmΒ²β‹…m⁻² +$(diffusionflux(CGS,Metric)) + +julia> diffusionflux(English,Metric) # ftΒ²β‹…molβ‹…lb-mol⁻¹⋅m⁻² +$(diffusionflux(English,Metric)) +``` +""" diffusionflux + # photometrics @doc """ diff --git a/test/runtests.jl b/test/runtests.jl index 1ac05ac..a092cb6 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -2,7 +2,7 @@ using UnitSystems, Test for S ∈ UnitSystems.Systems U = eval(S) - S βˆ‰ (:MetricTurn,:MetricGradian,:MetricDegree,:MetricArcminute,:MetricArcsecond) && @testset "UnitSystem: $S" begin + S βˆ‰ (:MetricTurn,:MetricSpatian,:MetricGradian,:MetricDegree,:MetricArcminute,:MetricArcsecond) && @testset "UnitSystem: $S" begin Sβ‰ :FFF && @testset "Dimensionless constants" begin @test ΞΌβ‚‘α΅€ β‰ˆ electronmass(U)/dalton(U) @test ΞΌβ‚šα΅€ β‰ˆ protonmass(U)/dalton(U) @@ -262,9 +262,9 @@ end @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 electricdisplacement(Metric,ESU) β‰ˆ 4Ο€*C/1e5 + @test electricdisplacement(Metric,EMU) β‰ˆ 4Ο€/1e5 + @test electricdisplacement(Metric,Gauss) β‰ˆ 4Ο€*C/1e5 @test electricdipolemoment(Metric,ESU) β‰ˆ 10C @test electricdipolemoment(Metric,EMU) β‰ˆ 10