diff --git a/.appveyor.yml b/.appveyor.yml index 52d0a91..15778af 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -7,6 +7,7 @@ environment: - julia_version: 1.4 - julia_version: 1.5 - julia_version: 1.6 + - julia_version: 1.7 - julia_version: nightly platform: diff --git a/.travis.yml b/.travis.yml index 0bac303..f81f196 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,7 @@ julia: - 1.4 - 1.5 - 1.6 + - 1.7 - nightly matrix: allow_failures: diff --git a/Kernel/UnitSystems.wl b/Kernel/UnitSystems.wl index b96377e..4374089 100644 --- a/Kernel/UnitSystems.wl +++ b/Kernel/UnitSystems.wl @@ -1,20 +1,37 @@ (* ::Package:: *) -(* This file is part of UnitSystems. It is licensed under the MIT license *) -(* UnitSystems Copyright (C) 2021 Michael Reed *) + +(* This file is part of UnitSystems *) +(* It is licensed under the MIT license *) +(* UnitSystems Copyright (C) 2021 Michael Reed *) +(* _ _ _ *) +(* | | | | | | *) +(* ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ *) +(* / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | *) +(* | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | *) +(* \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| *) +(* *) +(* https://github.com/chakravala *) +(* https://crucialflow.com *) +(* _ _ _ _ _ ___ ____ _ _ ____ ___ ____ _ _ ____ *) +(* | | |\ | | | [__ \_/ [__ | |___ |\/| [__ *) +(* |__| | \| | | ___] | ___] | |___ | | ___] *) Unprotect[UnitSystem]; -ProtectedList = {Length, Area, Volume, Power, Entropy, MomentOfInertia}; -UnitSystemsList = {"Metric", "SI2019", "CODATA", "Conventional", "MTS", "English", - "EnglishUS", "FFF", "IAU", "SI1976", "Mixed", "ESU2019", "EMU2019", "EMU", "ESU", +ProtectedList = {Length, Area, Volume, Power, Entropy, MomentOfInertia, SolidAngle}; +UnitSystemsList = {"Metric", "SI2019", "MetricEngineering", "SI2019Engineering", + "GravitationalMetric", "GravitationalSI2019", "CODATA", "Conventional", + "MTS", "KKH", "MPH", "Nautical", "International", "InternationalMean", "Astronomical", + "British","British2019","Survey","Survey2019","English","English2019","FPS","FPS2019", + "FFF", "IAU", "IAUE", "IAUJ", "SI1976", "Mixed", "ESU2019", "EMU2019", "EMU", "ESU", "Gauss", "LorentzHeaviside", "Thomson", "Kennelly", "Planck", "PlanckGauss", "Stoney", "Hartree", "Rydberg", "Schrodinger", "Electronic", "Natural", "NaturalGauss", "QCD", "QCDGauss", "QCDoriginal", "Hubble", "Cosmological", "CosmologicalQuantum"}; DimensionlessList = {GravitationalCouplingConstantElectronElectron, FineStructureConstant, ElectronRelativeAtomicMass, ProtonRelativeAtomicMass, ProtonElectronMassRatio, UniverseDarkEnergyMassDensity} ConstantsList = {SpeedOfLight, PlanckConstant, ReducedPlanckConstant, ElectronMass, MolarMassConstant, BoltzmannConstant, MagneticConstant, RationalizationConstant, - LorentzConstant, MonochromaticRadiation540THzLuminousEfficacy}; -PhysicsList = {Cesium133HyperfineSplittingFrequency, HubbleParameter, - CosmologicalConstant, AtomicMassConstant, ProtonMass, PlanckMass, + LorentzConstant, MonochromaticRadiation540THzLuminousEfficacy,AngleConstant,GravityConstant}; +(*Cesium133HyperfineSplittingFrequency, HubbleParameter, CosmologicalConstant,*) +PhysicsList = {Turn, SphereAngle, AtomicMassConstant, ProtonMass, PlanckMass, GravitationalConstant, EinsteinConstantSpeedOfLightToTheFourth, HartreeEnergy, RydbergConstant, BohrRadius, RelativisticBohrRadius, ClassicalElectronRadius, @@ -23,17 +40,17 @@ PhysicsList = {Cesium133HyperfineSplittingFrequency, HubbleParameter, BiotSavartConstant, ElementaryCharge, FaradayConstant, VacuumImpedance, ConductanceQuantum, VonKlitzingConstant, JosephsonConstant, MagneticFluxQuantum, BohrMagneton}; -KinematicList = {Time, Length, Area, Volume, Wavenumber, - FuelEconomy, Frequency, FrequencyDrift, Speed, Acceleration, - Jerk, Snap, VolumeFlowRate}; -MechanicalList = {Mass, MassFlowRate, LinearMassDensity, MassPerArea, MassDensity, - SpecificVolume, Force, Stiffness, Pressure, Compressibility, - DynamicViscosity, KinematicViscosity, MomentOfInertia, Momentum, +KinematicList = {Angle, SolidAngle, Time, Length, Area, Volume, Wavenumber, + AngularWavenumber, FuelEconomy, Frequency, AngularFrequency, FrequencyDrift, Speed, + Acceleration, Jerk, Snap, Crackle, Pop, VolumeFlowRate}; +MechanicalList = {Inertia, Mass, MassFlowRate, LinearMassDensity, MassPerArea, MassDensity, + SpecificWeight, SpecificVolume, Force, GForce, Stiffness, Pressure, Compressibility, + DynamicViscosity, KinematicViscosity, MomentOfInertia, Impulse, Momentum, AngularMomentum, ForceOnsetRate, Energy, SpecificEnergy, Action, EnergyPerArea, Power, PowerDensity, Irradiance, PowerGradient, SoundExposure, AcousticImpedance, SpecificAcousticImpedance, Admittance, Compliance, Inertance}; ElectromagneticList = {ElectricCharge, ElectricChargeDensity, LinearElectricChargeDensity, - ElectricChargePerMass, ElectricalMobility, ElectricCapacitance, MagneticInductance, MagneticReluctance, MagneticPermeance, + ElectricChargePerMass, ElectricalMobility, ElectricCapacitance, ElectricResistance, MagneticInductance, MagneticReluctance, MagneticPermeance, ElectricPermittivity, MagneticPermeability, MagneticSusceptibility, ElectricCurrent, ElectricConductance, SpecificSusceptibility, DemagnetizationFactor, MagneticVectorPotential, ElectricPotential, MagnetomotiveForce, ElectricFieldStrength, MagneticFieldStrength, @@ -69,16 +86,28 @@ ReducedPlanckConstant[UnitSystem[_, \[HBar]_, ___]] := \[HBar]; SpeedOfLight[UnitSystem[_, _, c_, ___]] := c; MagneticConstant[UnitSystem[_, _, _, \[Mu]0_, ___]] := \[Mu]0; ElectronMass[UnitSystem[_, _, _, _, me_, ___]] := me; -RationalizationConstant[UnitSystem[_, _, _, _, _, \[Lambda]_, ___]] := \[Lambda]; -LorentzConstant[UnitSystem[_, _, _, _, _, _, \[Alpha]L_, ___]] := \[Alpha]L; +RationalizationConstant[UnitSystem[_, _, _, _, _, _, _, _, \[Lambda]_, ___]] := \[Lambda]; +LorentzConstant[UnitSystem[_, _, _, _, _, _, _, _, _, \[Alpha]L_, ___]] := \[Alpha]L; + +AngleConstant[UnitSystem[_, _, _, _, _, _, _, A_, ___]] := A +UnitSystem /: Angle[u_UnitSystem,s_UnitSystem] := Unit[measuratio[AngleConstant[s],AngleConstant[u]]] +RationalizedQ[u_UnitSystem] := RationalizationConstant[u] != SphereAngle[u] +RationalizedQ[u_String] := RationalizedQ[UnitSystem[u]] +MonochromaticRadiation540THzLuminousEfficacy[UnitSystem[_, _, _, _, _, _, Kcd_, ___]] := Kcd +MolarMassConstant[UnitSystem[_, _, _, _, _, Mu_, ___]] := Mu; +GravityConstant[UnitSystem[_, _, _, _, _, _, _, _, _, _, g0_, ___]] := g0 +Turn[UnitSystem[_, _, _, _, _, _, _, _, _, _, _, tau_, ___]] := tau + +MonochromaticRadiation540THzLuminousEfficacy[_UnitSystem] := 1 +MolarMassConstant[_UnitSystem] := 1 +AngleConstant[_UnitSystem] := 1 LorentzConstant[_UnitSystem] := 1 RationalizationConstant[_UnitSystem] := 1 -RationalizedQ[u_UnitSystem] := RationalizationConstant[u] != 4 Pi -RationalizedQ[u_String] := RationalizedQ[UnitSystem[u]] +GravityConstant[_UnitSystem] := 1 +Turn[_UnitSystem] = 2 Pi -Universe[UnitSystem[_?NumericQ, ___]] := Coupling["StandardModel"] -Universe[UnitSystem[_Around, ___]] := Coupling["StandardModel"] +Universe[UnitSystem[_, _, _, _, _, _, _, _, _, _, _, _, C_Coupling, ___]] := C Unit[x_, y_ : 1] := PowerExpand[x]; UnitSystem[u_String] := If[AbstractUnitSystemQ[u], AbstractUnitSystem[StringDelete[u, "Abstract"]], DimensionSystem[StringDelete[u, "Dimension"]]] /; AbstractUnitSystemQ[u] || StringStartsQ[u, "Dimension"] @@ -90,6 +119,11 @@ AbstractUnitSystemQ[_] := False MatchSystem[u_,s_] := If[AbstractUnitSystemQ[u], AbstractUnitSystem[s], UnitSystem[s]] DefaultSystem[u_] := MatchSystem[u, "SI2019"] +MeasureMagnitude[m_] := m +MeasureMagnitude[Measure[m_,_,_]] := m +measuratio[a_Measure,b_Measure] := MeasureMagnitude[a]/MeasureMagnitude[b] +measuratio[a_,b_] := a/b + Map[( #[u_String, c_String] := #[UnitSystem[u], Coupling[c]]; #[u_String] := #[UnitSystem[u]] @@ -97,10 +131,12 @@ Map[( Map[(#[c_String] := #[Coupling[c]]) &, DimensionlessList] +Get["UnitSystems`dimensions`"] Get["UnitSystems`systems`"] Universe[_] = Coupling["AbstractUniverse"] Universe[c_String] := Coupling[c] +Universe[_?DimensionSystemQ] := Coupling["AbstractUniverse"] Map[(Universe[AbstractUnitSystem[#]] := Coupling["AbstractUniverse"]) &, {"Planck","PlanckGauss","Stoney","Hartree","Rydberg","Schrodinger","Electronic","Natural","NaturalGauss","QCD","QCDGauss","QCDoriginal"}] @@ -116,7 +152,7 @@ Map[(#[u_UnitSystem] := #[u, Universe[u]]) &, {PlanckMass, PlanckConstant, Gravi Map[(#[u_UnitSystem] := #[Universe[u]]) &, DimensionlessList]; Map[(#[u_UnitSystem, c_Coupling] := #[u]) &, {BoltzmannConstant, ReducedPlanckConstant, SpeedOfLight, MagneticConstant, ElectronMass, MolarMassConstant}]; Map[( - #[u_UnitSystem, s_UnitSystem] := Unit[#[s]/#[u]]; + #[u_UnitSystem, s_UnitSystem] := Unit[measuratio[#[s],#[u]]]; #[u_String, s_String] := #[UnitSystem[u], CouplingSystem[s]]; ) &, Join[ConstantsList,PhysicsList]] Map[Unprotect, ProtectedList] @@ -214,7 +250,7 @@ CompareUnits[a_String, b_, c_] := CompareUnits[UnitSystem[a], b, c] CompareUnits[a_, b_String, c_] := CompareUnits[a, UnitSystem[b], c] CompareUnits[a_String, b_String, c_] := CompareUnits[UnitSystem[a], UnitSystem[b], c] CompareUnits[a_, b_, c_] := Association[Map[ToString[#] -> #[a, b] &, c]] -DimensionUnits[u_, l_] := CompareUnits["AbstractNatural",DimensionSystem[u], l] +DimensionUnits[u_, l_] := MM/@CompareUnits["AbstractNatural",DimensionSystem[u], l] DimensionUnits[u_] := DimensionUnits[u, Join[ConstantsList, PhysicsList, ConvertList]] DimensionPhysics[u_] := DimensionUnits[u, ConvertList] DimensionConstants[u_] := DimensionUnits[u, Join[ConstantsList, PhysicsList]] @@ -331,10 +367,12 @@ AbstractUnits1 = AbstractUnitSystem["AbstractUnits1"] AbstractUnits2 = AbstractUnitSystem["AbstractUnits2"] AbstractMetric = AbstractUnitSystem["Metric"] AbstractSI2019 = AbstractUnitSystem["SI2019"] +AbstractInternational = AbstractUnitSystem["International"] AbstractCGS = AbstractUnitSystem["Gauss"] AbstractMTS = AbstractUnitSystem["MTS"] +AbstractBritish = AbstractUnitSystem["British"] AbstractEnglish = AbstractUnitSystem["English"] -AbstractEnglishUS = AbstractUnitSystem["EnglishUS"] +AbstractSurvey = AbstractUnitSystem["Survey"] AbstractIAU = AbstractUnitSystem["IAU"] AbstractFFF = AbstractUnitSystem["FFF"] @@ -346,18 +384,36 @@ ESU = UnitSystem["ESU"] ESU2019 = UnitSystem["ESU2019"] EMU = UnitSystem["EMU"] EMU2019 = UnitSystem["EMU2019"] +Nautical = UnitSystem["Nautical"] +MPH = UnitSystem["MPH"] +KKH = UnitSystem["KKH"] MTS = UnitSystem["MTS"] Mixed = UnitSystem["Mixed"] Metric = UnitSystem["Metric"] SI1976 = UnitSystem["SI1976"] SI2019 = UnitSystem["SI2019"] +MetricEngineering = UnitSystem["MetricEngineering"] +SI2019Engineering = UnitSystem["SI2019Engineering"] +GravitationalMetric = UnitSystem["GravitationalMetric"] +GravitationalSI2019 = UnitSystem["GravitationalSI2019"] +International = UnitSystem["International"] +InternationalMean = UnitSystem["InternationalMean"] CODATA = UnitSystem["CODATA"] Conventional = UnitSystem["Conventional"] +British = UnitSystem["British"] +British2019 = UnitSystem["British2019"] +Survey = UnitSystem["Survey"] +Survey2019 = UnitSystem["Survey2019"] English = UnitSystem["English"] -EnglishUS = UnitSystem["EnglishUS"] +English2019 = UnitSystem["English2019"] +FPS = UnitSystem["FPS"] +FPS2019 = UnitSystem["FPS2019"] IAU = UnitSystem["IAU"] +IAUE = UnitSystem["IAUE"] +IAUJ = UnitSystem["IAUJ"] FFF = UnitSystem["FFF"] +Astronomical = UnitSystem["Astronomical"] Hubble = UnitSystem["Hubble"] Cosmological = UnitSystem["Cosmological"] CosmologicalQuantum = UnitSystem["CosmologicalQuantum"] @@ -371,4 +427,8 @@ QCD = UnitSystem["QCD"] QCDGauss = UnitSystem["QCDGauss"] QCDoriginal = UnitSystem["QCDoriginal"] -{SI,MKS,CGS, CGS2019, CGSm, CGSe, HLU} = {SI2019, Metric, Gauss, EMU2019, EMU, ESU, LorentzHeaviside}; +{SI, MKS, SIE, ME, GSI2019, GSI, GM} = {SI2019, Metric, SI2019Engineering, MetricEngineering, GravitationalSI2019, GravitationalSI2019, GravitationalMetric} +{CGS, CGS2019, CGSm, CGSe, HLU} = {Gauss, EMU2019, EMU, ESU, LorentzHeaviside} +{EnglishEngineering, BritishGravitational, BG} = {English, British, British} +{EnglishUS, AbsoluteEnglish, AE, EE, EE2019} = {Survey, FPS, FPS, English, English2019} +{EnglishEngineering2019, BritishGravitational2019, BG2019, AbsoluteEnglish2019, AE2019} = {English2019, British2019, British2019, FPS2019, FPS2019}; diff --git a/Kernel/dimensions.wl b/Kernel/dimensions.wl new file mode 100644 index 0000000..6c636e8 --- /dev/null +++ b/Kernel/dimensions.wl @@ -0,0 +1,155 @@ + +(* This file is part of UnitSystems *) +(* It is licensed under the MIT license *) +(* UnitSystems Copyright (C) 2021 Michael Reed *) +(* _ _ _ *) +(* | | | | | | *) +(* ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ *) +(* / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | *) +(* | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | *) +(* \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| *) +(* *) +(* https://github.com/chakravala *) +(* https://crucialflow.com *) + +isq = {"F", "M", "L","T","Q","\[Theta]","N","J","A","\[CapitalLambda]","C"} + +d1 = ISQ[{0,0,0,0,0,0,0,0,0,0,0},1] +dF = ISQ[{1,0,0,0,0,0,0,0,0,0,0},1] +dM = ISQ[{0,1,0,0,0,0,0,0,0,0,0},1] +dL = ISQ[{0,0,1,0,0,0,0,0,0,0,0},1] +dT = ISQ[{0,0,0,1,0,0,0,0,0,0,0},1] +dQ = ISQ[{0,0,0,0,1,0,0,0,0,0,0},1] +d0 = ISQ[{0,0,0,0,0,1,0,0,0,0,0},1] +dN = ISQ[{0,0,0,0,0,0,1,0,0,0,0},1] +dJ = ISQ[{0,0,0,0,0,0,0,1,0,0,0},1] +dA = ISQ[{0,0,0,0,0,0,0,0,1,0,0},1] +dR = ISQ[{0,0,0,0,0,0,0,0,0,1,0},1] +dC = ISQ[{0,0,0,0,0,0,0,0,0,0,1},1] + +isqbox[{x_, 1}] := ToBoxes[x] +isqbox[{x_, 1.}] := ToBoxes[x] +isqbox[{x_, y_}] := SuperscriptBox[x, ToBoxes[y]] +isqbox[{_, 0}] = Sequence[] +isqbox[{_, 0.}] = Sequence[] + +ISQ /: MakeBoxes[ISQ[{0,0,0,0,0,0,0,0,0,0,0}, 1], StandardForm] := "\[DoubleStruckL]" +ISQ /: MakeBoxes[ISQ[l_List, 1], StandardForm] := RowBox[Map[isqbox, Transpose[{isq, l}]]] +ISQ /: MakeBoxes[ISQ[l_List, c_], StandardForm] := RowBox[Prepend[Map[isqbox, Transpose[{isq, l}]], c]] + +ISQ /: Plus[a:ISQ[z:{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_],ISQ[z:{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},y_]] := ISQ[z,x+y] +ISQ /: Subtract[ISQ[z:{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_],ISQ[z:{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},y_]] := ISQ[z,x-y] +ISQ /: Times[ISQ[a_List,x_],ISQ[b_List,y_]] := ISQ[a+b,x*y] +ISQ /: Divide[ISQ[a_List,x_],ISQ[b_List,y_]] := ISQ[a-b,x/y] +ISQ /: Power[ISQ[a_List,c_],b_] := ISQ[b*a,Power[c,b]] +ISQ /: Sqrt[ISQ[a_List,c_]] := ISQ[a/2,Sqrt[c]] +ISQ /: Inverse[ISQ[a_List,c_]] := ISQ[-a,1/c] + +ISQ /: Times[ISQ[a_List,c_],b_] := ISQ[a,c*b] + +(* Measure *) + +Measure /: MakeBoxes[Measure[v_, d_ISQ, u_String],StandardForm] := Module[{x=transform[u,d]}, RowBox[{ToBoxes[v], "[", ToBoxes[x], "]", u}]] + +Measure /: Times[Measure[v_,d_,u_],a_] := Measure[v*a,d,u] +Measure /: Plus[Measure[v_,d1,u_],a_] := Measure[v+a,d1,u] +Measure /: Subtract[Measure[v_,d1,u_],a_] := Measure[v-a,d1,u] +Measure /: Subtract[a_,Measure[v_,d1,u_]] := Measure[a-v,d1,u] + +Measure /: Times[Measure[v1_,d1_,u_],Measure[v2_,d2_,u_]] := Measure[v1*v2,d1*d2,u] +Measure /: Divide[Measure[v1_,d1_,u_],Measure[v2_,d2_,u_]] := Measure[v1/v2,d1/d2,u] +Measure /: Power[Measure[v_,d_,u_],b_] := Measure[v^b,d^b,u] +Measure /: Plus[Measure[v1_,d1_,u_],Measure[v2_,d2_,u_]] := Measure[v1+v2,d1+d2,u] +Measure /: Subtract[Measure[v1_,d1_,u_],Measure[v2_,d2_,u_]] := Measure[v1-v2,d1-d2,u] +Measure /: Sqrt[Measure[v_,d_,u_]] := Measure[Sqrt[v],Sqrt[d],u] + +Measure /: Equal[Measure[v_,ISQ[l_,c_],u_],a_] := And[Total[l]==0,a==v*c] + +(*quantity /: Log[b_,Power[B_,_ISQ]] := "test"*) + +ratio[d_, u_, s_] := ratio[d,MatchSystem[s,u],UnitSystem[s]] +ratio[d_, u_UnitSystem, s_UnitSystem] := ratiocalc[TRANSFORM[d], u, s] +ratiocalc[ISQ[d_,c_], u_, s_] := + BoltzmannConstant[u, s]^d[[1]]* + ReducedPlanckConstant[u, s]^d[[2]]* + SpeedOfLight[u, s]^d[[3]]* + MagneticConstant[u, s]^d[[4]]* + ElectronMass[u, s]^d[[5]]* + MonochromaticRadiation540THzLuminousEfficacy[u, s]^d[[6]]* + MolarMassConstant[u, s]^d[[7]]* + AngleConstant[u, s]^d[[8]]* + RationalizationConstant[u, s]^d[[9]]* + LorentzConstant[u, s]^d[[10]]* + GravityConstant[u, s]^d[[11]] + +Measure /: Entity["UnitSystem", s_][Measure[v_, d_, u_]] := Measure[v*ratio[d, u, s], d, s] +Measure[v_, d_, u_][Entity["UnitSystem",s_]] := Measure[v*ratio[d, u, s], d, s] +Measure[v_, d_, u_][s_String] := Measure[v*ratio[d, u, s], d, s] +ConvertUnit[Measure[v_, d_, u_],s_] := Measure[v*ratio[d, u, s], d, s] + +(* 1,2,3,4, 5, 6, 7, 8,9,10,11 *) +(*kB,ħ,𝘤,μ₀,mₑ,Mᵤ,Kcd,A,λ,αL,g₀ *) +(* F,M,L,T, Q, Θ, N, J,A,Λ, C *) + +TRANSFORM[ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := ISQ[{-h,l+t+q/2-f-j,3*f+2*h-l-2*t-q/2,q/-2,m+h+n+2*(f+j)-l-t,-n,j,a-2*r,r-q/2,-q-c,l+t-h-2*(f+j)},x] + +transform[_String,x_] := transform["Metric",x] + +transform["MetricEngineering",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{f,m,l,t,q,h,n,j,a,0,0},x] +transform["GravitationalMetric",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{f+m,0,l-m,t+2*m,q,h,n,j,0,0,0},x] +transform["Metric",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,f+m,f+l,t-2*f,q,h,n,j,0,0,0},x] +transform["Astronomical",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{f,0,l+3*m,t-2*m,q,h,n,j,a,0,0},x] + +transform["Gauss",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,f+m+q/2,f+l+(3/2)*q+c,t-2*f-q-c,0,h,0,j,0,0,0},x] +transform["ESU",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,f+m+q/2,f+l+(3/2)*q,t-2*f-q,0,h,0,j,0,0,0},x] +transform["EMU",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,f+m+q/2,f+l+q/2,t-2*f,0,h,0,j,0,0,0},x] +transform["Kennelly",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,f+m+q/2,f+l+q/2,t-2*f,0,h,n,j,0,0,0},x] + +transform["Stoney",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,f+m+h,l+t-f,0,q,0,0,0,0,0,0},x] +transform["Electronic",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,0,l+t-f,0,q,0,0,0,0,0,0},x] +transform["QCDoriginal",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,2*f+m+h-l-t,0,0,q,0,0,0,a,0,0},x] +transform["PlanckGauss",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,2*f+m+h-l-t,0,0,0,0,0,0,a,0,0},x] +transform["Planck",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,2*f+m+q+h-l-t,0,0,0,0,0,0,0,0,0},x] +transform["Natural",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,0,0,0,0,0,0,0,0,0,0},x] +transform["NaturalGauss",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,0,0,0,0,0,0,0,a,0,0},x] + +transform["Rydberg",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,m+t+h-f,l+2*(t-h)-3*f,0,q,0,0,0,0,0,0},x] +transform["Hartree",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,0,l+2*(t-h)-3*f,0,q,0,0,0,0,0,0},x] +transform["Hubble",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,f+m,l+t-f,0,q,h,n,j,0,0,0},x] +transform["CosmologicalQuantum",ISQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + ISQ[{0,m+2*f-l-t,0,0,q,h,n,j,0,0,0},x] + +transform["LorentzHeaviside",x_] := transform["Gauss",x] +transform["Thomson",x_] := transform["EMU",x] +(*transform["Kennelly",x_] := transform["EMU",x]*) +transform["Schrodinger",x_] := transform["Rydberg",x] +transform["QCD",x_] := transform["Planck",x] +transform["QCDGauss",x_] := transform["PlanckGauss",x] +transform["Cosmological",x_] := transform["Hubble",x] + +transform["SI2019Engineering",x_] := transform["MetricEngineering",x] +transform["GravitationalSI2019",x_] := transform["GravitationalMetric",x] +transform["British",x_] := transform["GravitationalMetric",x] +transform["British2019",x_] := transform["GravitationalMetric",x] +transform["English",x_] := transform["MetricEngineering",x] +transform["English2019",x_] := transform["MetricEngineering",x] +transform["Survey",x_] := transform["MetricEngineering",x] +transform["Survey2019",x_] := transform["MetricEngineering",x] diff --git a/Kernel/physics.wl b/Kernel/physics.wl index 0a78643..c15e764 100644 --- a/Kernel/physics.wl +++ b/Kernel/physics.wl @@ -1,20 +1,30 @@ -(* This file is part of UnitSystems. It is licensed under the MIT license *) -(* UnitSystems Copyright (C) 2022 Michael Reed *) +(* This file is part of UnitSystems *) +(* It is licensed under the MIT license *) +(* UnitSystems Copyright (C) 2022 Michael Reed *) +(* _ _ _ *) +(* | | | | | | *) +(* ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ *) +(* / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | *) +(* | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | *) +(* \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| *) + +UnitSystem /: SolidAngle[u_UnitSystem,s_UnitSystem] := Unit[Angle[u,s]^2] +SphereAngle[u_UnitSystem] := Unit[2 Turn[u]/Angle[u] (Turn[u]/MM[Turn[u]])] ElectronMass[h_?NumberQ] := UnitData["R\[Infinity]"] 2 h/UnitData["\[Alpha]"]^2/UnitData["c"]; ElectronMass[h_?NumberQ, u_Coupling] := (UnitData["R\[Infinity]"] 2 h)/(FineStructureConstant[u]^2 UnitData["c"]); PlanckMass[u_UnitSystem, c_Coupling] := PowerExpand[ElectronMass[u, c]/Sqrt[GravitationalCouplingConstantElectronElectron[c]]] -PlanckConstant[u_UnitSystem, c_Coupling] := 2 Pi ReducedPlanckConstant[u]; -GravitationalConstant[u_UnitSystem, c_Coupling] := PowerExpand[(SpeedOfLight[u, c] ReducedPlanckConstant[u, c])/PlanckMass[u, c]^2] -ElementaryCharge[u_UnitSystem, c_Coupling] := PowerExpand[Sqrt[2 PlanckConstant[u]/(MagneticConstant[u]/FineStructureConstant[u])/(SpeedOfLight[u] RationalizationConstant[u] LorentzConstant[u]^2)]] +PlanckConstant[u_UnitSystem, c_Coupling] := Turn[u] ReducedPlanckConstant[u]; +GravitationalConstant[u_UnitSystem, c_Coupling] := PowerExpand[(SpeedOfLight[u, c] PlanckConstant[u, c])/(2 Pi PlanckMass[u, c]^2)] +ElementaryCharge[u_UnitSystem, c_Coupling] := PowerExpand[Sqrt[2 PlanckConstant[u]/(MagneticConstant[u]/FineStructureConstant[c])/(SpeedOfLight[u] RationalizationConstant[u] LorentzConstant[u]^2)]] -ElectronMass[UnitSystem["Planck"], c_Coupling] := PowerExpand[Sqrt[4 Pi GravitationalCouplingConstantElectronElectron[c]]] +ElectronMass[u:UnitSystem["Planck"], c_Coupling] := PowerExpand[Sqrt[SphereAngle[u] GravitationalCouplingConstantElectronElectron[c]]] ElectronMass[UnitSystem["PlanckGauss"], c_Coupling] := Sqrt[GravitationalCouplingConstantElectronElectron[c]]; ElectronMass[UnitSystem[_, _, _, _, Sqrt[EvalUnitData["\[Alpha]G"]/UnitData["\[Alpha]"]], ___], c_Coupling] := PowerExpand[Sqrt[GravitationalCouplingConstantElectronElectron[c]/FineStructureConstant[c]]] ElectronMass[UnitSystem[_, _, _, _, 1/UnitData["\[Mu]pe"], ___], c_Coupling] := 1/ProtonElectronMassRatio[c]; -MagneticConstant[UnitSystem[_, _, _, 4 Pi UnitData["\[Alpha]"]^2, ___], c_Coupling] := 4 Pi FineStructureConstant[c]^2; -MagneticConstant[UnitSystem[_, _, _, Pi UnitData["\[Alpha]"]^2, ___], c_Coupling] := Pi FineStructureConstant[c]^2; +MagneticConstant[u:UnitSystem[_, _, _, 4 Pi UnitData["\[Alpha]"]^2, ___], c_Coupling] := SphereAngle[u] FineStructureConstant[c]^2; +MagneticConstant[u:UnitSystem[_, _, _, Pi UnitData["\[Alpha]"]^2, ___], c_Coupling] := SphereAngle[u]/4 FineStructureConstant[c]^2; SpeedOfLight[UnitSystem[_, _, 1/UnitData["\[Alpha]"], ___], c_Coupling] := 1/FineStructureConstant[c]; SpeedOfLight[UnitSystem[_, _, 2/UnitData["\[Alpha]"], ___], c_Coupling] := 2/FineStructureConstant[c]; PlanckReduced[UnitSystem[_, 1/UnitData["\[Alpha]"], ___], c_Coupling] := 1/FineStructure[c]; @@ -32,53 +42,6 @@ MagneticConstant[UnitSystem["EMU2019"], u_Coupling] := 10^7 MagneticConstant[Uni MagneticConstant[UnitSystem["CODATA"], u_Coupling] := 2 UnitData["RK2014"] FineStructureConstant[u]/UnitData["c"]; MagneticConstant[UnitSystem["Conventional"], u_Coupling] := 2 UnitData["RK1990"] FineStructureConstant[u]/UnitData["c"]; -MolarMassConstant[UnitSystem[1, ___]] = 1; -MolarMassConstant[_?DimensionSystemQ] = "M"/"N"; -MolarMassConstant[_?DimensionSystemQ, c_Coupling] = "M"/"N"; -MolarMassConstant[u:UnitSystem[UnitData["kB"], ___]] := MolarMassConstant[u, Universe[u]]; -MolarMassConstant[u:UnitSystem[UnitData["kB"], ___], c_Coupling] := UnitData["NA"] ElectronMass[u, c]/ElectronRelativeAtomicMass[c]; -MolarMassConstant[u:UnitSystem[10^7 UnitData["kB"], ___]] := MolarMassConstant[u, Universe[u]]; -MolarMassConstant[UnitSystem[10^7 UnitData["kB"], ___], c_Coupling] := 1000 MolarMassConstant[UnitSystem["SI2019"], c]; -MolarMassConstant[u:UnitSystem[10^3 UnitData["kB"], ___]] := MolarMassConstant[u, Universe[u]]; -MolarMassConstant[UnitSystem[10^3 UnitData["kB"], ___], c_Coupling] := MolarMassConstant[UnitSystem["SI2019"], c]/1000; -MolarMassConstant[UnitSystem[kB_, ___]] := MolarMassConstant["CGS"]/1000; -MolarMassConstant[UnitSystem[BoltzmannConstant[UnitSystem["MTS"]], ___]] := MolarMassConstant["CGS"]/10^6; -MolarMassConstant[UnitSystem[BoltzmannConstant[UnitSystem["CGS"]], ___]] := MolarMassConstant["Natural"]; -MolarMassConstant[UnitSystem[BoltzmannConstant[UnitSystem["FFF"]], ___]] := MolarMassConstant["Natural"]; -MolarMassConstant[u:UnitSystem[BoltzmannConstant[UnitSystem["English"]], ___]] := MolarMassConstant[u, Universe[u]]; -MolarMassConstant[u:UnitSystem[BoltzmannConstant[UnitSystem["English"]], ___], c_Coupling] := 1000 MolarMassConstant[UnitSystem["SI2019"],c] -MolarMassConstant[UnitSystem[BoltzmannConstant[UnitSystem["EnglishUS"]], ___]] := MolarMassConstant["Natural"]; -MolarMassConstant[UnitSystem[BoltzmannConstant[UnitSystem["IAU"]], ___]] := Mass["IAU"]/1000; - -MolarMassConstant[DimensionSystem["EMU"]] := MolarMassConstant["Natural"]; -MolarMassConstant[DimensionSystem["ESU"]] := MolarMassConstant["Natural"]; -MolarMassConstant[DimensionSystem["Gauss"]] := MolarMassConstant["Natural"]; - -MolarMassConstant[AbstractUnitSystem["AbstractUnits"]] = "Mu" -MolarMassConstant[AbstractUnitSystem["AbstractUnits1"]] = "Mu1" -MolarMassConstant[AbstractUnitSystem["AbstractUnits2"]] = "Mu2" -MolarMassConstant[u : UnitSystem["kB", ___]] := MolarMassConstant[u,Universe[u]] -MolarMassConstant[u : UnitSystem["kB", ___], c_Coupling] := "NA" ElectronMass[AbstractUnitSystem["SI2019"],c]/ElectronRelativeAtomicMass[c] -MolarMassConstant[u : UnitSystem[10^7 "kB", ___]] := MolarMassConstant[u, Universe[u]]; -MolarMassConstant[UnitSystem[10^7 "kB", ___], c_Coupling] := 1000 MolarMassConstant[AbstractUnitSystem["SI2019"], c]; -MolarMassConstant[u : UnitSystem[10^3 "kB", ___]] := MolarMassConstant[u, Universe[u]]; -MolarMassConstant[UnitSystem[10^3 "kB", ___], c_Coupling] := MolarMassConstant[AbstractUnitSystem["SI2019"], c]/1000; -MolarMassConstant[UnitSystem[BoltzmannConstant[AbstractUnitSystem["MTS"]], ___]] := MolarMassConstant["CGS"]/10^6; -MolarMassConstant[UnitSystem[BoltzmannConstant[AbstractUnitSystem["CGS"]], ___]] := MolarMassConstant["Natural"]; -MolarMassConstant[UnitSystem[BoltzmannConstant[AbstractUnitSystem["FFF"]], ___]] := MolarMassConstant["Natural"]; -MolarMassConstant[u : UnitSystem[BoltzmannConstant[AbstractUnitSystem["English"]], ___]] := MolarMassConstant[u, Universe[u]]; -MolarMassConstant[u : UnitSystem[BoltzmannConstant[AbstractUnitSystem["English"]], ___], c_Coupling] := 1000 MolarMassConstant[AbstractUnitSystem["SI2019"], c]; -MolarMassConstant[UnitSystem[BoltzmannConstant[AbstractUnitSystem["EnglishUS"]], ___]] := MolarMassConstant["Natural"]; -MolarMassConstant[UnitSystem[BoltzmannConstant[AbstractUnitSystem["IAU"]], ___]] := 1/1000 Mass["AbstractIAU"]; - -MonochromaticRadiation540THzLuminousEfficacy[UnitSystem[1, ___]] = 1 -MonochromaticRadiation540THzLuminousEfficacy[_?DimensionSystemQ] = "J" "T"^3/"M"/"L"^2 -MonochromaticRadiation540THzLuminousEfficacy[u : UnitSystem[_?NumericQ, ___]] := Power[UnitData["Kcd"], UnitSystem["SI2019"], u] -MonochromaticRadiation540THzLuminousEfficacy[u : UnitSystem[_Around, ___]] := Power[UnitData["Kcd"], UnitSystem["SI2019"], u] -MonochromaticRadiation540THzLuminousEfficacy[AbstractUnitSystem["AbstractUnits1"]] = "Kcd1" -MonochromaticRadiation540THzLuminousEfficacy[AbstractUnitSystem["AbstractUnits2"]] = "Kcd2" -MonochromaticRadiation540THzLuminousEfficacy[u_UnitSystem] := Power["Kcd", AbstractUnitSystem["SI2019"], u] - Kilograms[m_] := Kilograms[m, "English"]; Kilograms[m_, u_UnitSystem] := Mass[m, UnitSystem["Metric"], u]; Kilograms[m_, u_String] := Mass[m, UnitSystem[u]]; @@ -131,41 +94,48 @@ Time[u : UnitSystem[_, _, UnitData["day"] UnitData["c"]/UnitData["au"], ___], UnitSystem /: Length[u_UnitSystem, s_UnitSystem] := Length[u, s, 1]; UnitSystem /: Length[u_UnitSystem, s_UnitSystem, l_] := - Unit[(ReducedPlanckConstant[s] ElectronMass[u] SpeedOfLight[ - u])/(ReducedPlanckConstant[u] ElectronMass[s] SpeedOfLight[s]), l]; + Unit[measuratio[Turn[s] ReducedPlanckConstant[s] GravityConstant[s]/(ElectronMass[s] SpeedOfLight[s]),Turn[u] ReducedPlanckConstant[u] GravityConstant[u]/(ElectronMass[u] SpeedOfLight[u])], l]; UnitSystem /: Area[u_UnitSystem, s_UnitSystem] := Unit[Length[u, s]^2]; UnitSystem /: Volume[u_UnitSystem, s_UnitSystem] := Unit[Length[u, s]^3]; Wavenumber[u_UnitSystem, s_UnitSystem] := Unit[Length[s, u]]; +AngularWavenumber[u_UnitSystem, s_UnitSystem] := Unit[Angle[u,s] Length[s, u]]; FuelEconomy[u_UnitSystem, s_UnitSystem] := Area[s, u]; Time[u_UnitSystem, s_UnitSystem] := Time[u, s, 1]; Time[u_UnitSystem, s_UnitSystem, t_] := Unit[Length[u, s]/SpeedOfLight[u, s], 1]; Frequency[u_UnitSystem, s_UnitSystem] := Time[s, u]; +AngularFrequency[u_UnitSystem, s_UnitSystem] := Unit[Angle[u, s] Time[s, u]]; FrequencyDrift[u_UnitSystem, s_UnitSystem] := Unit[Time[s, u]^2]; Speed[u_UnitSystem, s_UnitSystem] := SpeedOfLight[u, s]; Acceleration[u_UnitSystem, s_UnitSystem] := Unit[Speed[u, s]/Time[u, s]]; Jerk[u_UnitSystem, s_UnitSystem] := Unit[Speed[u, s]/Time[u, s]^2]; Snap[u_UnitSystem, s_UnitSystem] := Unit[Speed[u, s]/Time[u, s]^3]; +Crackle[u_UnitSystem, s_UnitSystem] := Unit[Speed[u, s]/Time[u, s]^4]; +Pop[u_UnitSystem, s_UnitSystem] := Unit[Speed[u, s]/Time[u, s]^5]; VolumeFlowRate[u_UnitSystem, s_UnitSystem] := Unit[Area[u, s], Speed[u, s]]; SpecificEnergy[u_UnitSystem, s_UnitSystem] := Unit[Speed[u, s]^2]; +Inertia[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s]/GravityConstant[u, s]]; Mass[u_UnitSystem, s_UnitSystem] := ElectronMass[u, s]; Energy[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s] SpecificEnergy[u, s]]; UnitSystem /: Power[u_UnitSystem, s_UnitSystem] := Unit[Energy[u, s]/Time[u, s]]; -Force[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s] Acceleration[u, s]]; -Pressure[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s]/Length[u, s]/Time[u, s]^2]; +Force[u_UnitSystem, s_UnitSystem] := Unit[Inertia[u, s] Acceleration[u, s]]; +GForce[u_UnitSystem, s_UnitSystem] := Unit[Acceleration[u, s]/GravityConstant[u, s]]; +Pressure[u_UnitSystem, s_UnitSystem] := Unit[Force[u, s]/Area[u, s]]; +Impulse[u_UnitSystem, s_UnitSystem] := Unit[Force[u, s] Time[u, s]]; Momentum[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s] Speed[u, s]]; -AngularMomentum[u_UnitSystem, s_UnitSystem] := Unit[Momentum[u, s] Length[u, s]]; +AngularMomentum[u_UnitSystem, s_UnitSystem] := Unit[Momentum[u, s] Length[u, s] Angle[u, s]]; ForceOnsetRate[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s] Jerk[u, s]]; MassPerArea[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s]/Area[u, s]]; MassDensity[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s]/Volume[u, s]]; +SpecificWeight[u_UnitSystem, s_UnitSystem] := Unit[Pressure[u, s]/Speed[u, s]^2]; SpecificVolume[u_UnitSystem, s_UnitSystem] := Unit[Volume[u, s]/Mass[u, s]]; -Action[u_UnitSystem, s_UnitSystem] := Unit[Momentum[u, s] Length[u, s]]; -Stiffness[u_UnitSystem, s_UnitSystem] := Unit[Energy[u, s]/Area[u, s]]; +Action[u_UnitSystem, s_UnitSystem] := Unit[Energy[u, s] Time[u, s]]; +Stiffness[u_UnitSystem, s_UnitSystem] := Unit[Force[u, s]/Length[u, s]]; Irradiance[u_UnitSystem, s_UnitSystem] := Unit[Power[u, s]/Area[u, s]]; -KinematicViscosity[u_UnitSystem, s_UnitSystem] := Unit[(ReducedPlanckConstant[s] ElectronMass[u])/(ReducedPlanckConstant[u] ElectronMass[s])]; -DynamicViscosity[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s]/Length[u, s]/Time[u, s]]; +KinematicViscosity[u_UnitSystem, s_UnitSystem] := Unit[Speed[u, s] Length[u, s]]; +DynamicViscosity[u_UnitSystem, s_UnitSystem] := Unit[Force[u, s]/Speed[u, s]/Length[u, s]]; LinearMassDensity[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s]/Length[u, s]]; MassFlowRate[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s]/Time[u, s]]; PowerGradient[u_UnitSystem, s_UnitSystem] := Unit[Power[u, s]/Length[u, s]]; @@ -185,18 +155,17 @@ Inertance[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s]/Length[u, s]^4]; MagneticPermeability[u_UnitSystem, s_UnitSystem] := Unit[MagneticConstant[u, s]]; ElectricCharge[u_UnitSystem, s_UnitSystem] := - Unit[Sqrt[(ReducedPlanckConstant[s] MagneticConstant[u] SpeedOfLight[ - u] RationalizationConstant[u] LorentzConstant[u]^2)/(ReducedPlanckConstant[ - u] MagneticConstant[s] SpeedOfLight[s] RationalizationConstant[s] LorentzConstant[s]^2)]]; + Unit[Sqrt[measuratio[Turn[s] ReducedPlanckConstant[s]/(MagneticConstant[s] SpeedOfLight[s] RationalizationConstant[s] LorentzConstant[s]^2), + Turn[u] ReducedPlanckConstant[u]/(MagneticConstant[u] SpeedOfLight[u] RationalizationConstant[u] LorentzConstant[u]^2)]]]; ElectricCurrent[u_UnitSystem, s_UnitSystem] := Unit[ElectricCharge[u, s]/Time[u, s]]; ElectricPotential[u_UnitSystem, s_UnitSystem] := Unit[Energy[u, s]/ElectricCharge[u, s]]; ElectricCapacitance[u_UnitSystem, s_UnitSystem] := Unit[ElectricCharge[u, s]/ElectricPotential[u, s]]; -Resistance[u_UnitSystem, s_UnitSystem] := Unit[ElectricPotential[u, s]/ElectricCurrent[u, s]]; +ElectricResistance[u_UnitSystem, s_UnitSystem] := Unit[ElectricPotential[u, s]/ElectricCurrent[u, s]]; ElectricConductance[u_UnitSystem, s_UnitSystem] := Unit[ElectricCurrent[u, s]/ElectricPotential[u, s]]; MagneticFlux[u_UnitSystem, s_UnitSystem] := Unit[Energy[u, s]/LorentzConstant[u, s]/ElectricCurrent[u, s]]; MagneticFluxDensity[u_UnitSystem, s_UnitSystem] := - Unit[Mass[u, s]/LorentzConstant[u, s]/ElectricCurrent[u, s]/Time[u, s]^2]; -MagneticInductance[u_UnitSystem, s_UnitSystem] := Unit[Mass[u, s] Area[u, s]/ElectricCharge[u, s]^2]; + Unit[MagneticFlux[u, s]/Area[u, s]]; +MagneticInductance[u_UnitSystem, s_UnitSystem] := Unit[MagneticFlux[u, s]/ElectricCurrent[u, s]]; ElectricFluxDensity[u_UnitSystem, s_UnitSystem] := Unit[ElectricCharge[u, s] RationalizationConstant[u, s]/Area[u, s]]; ElectricChargeDensity[u_UnitSystem, s_UnitSystem] := Unit[ElectricCharge[u, s]/Volume[u, s]]; @@ -243,8 +212,8 @@ Molecules[n_, u_UnitSystem] := n AvogadroConstant[u]; Molecules[n_, u_String] := Molecules[n, UnitSystem[u]]; Temperature[u_UnitSystem, s_UnitSystem] := - Unit[(BoltzmannConstant[u] ElectronMass[s] SpeedOfLight[s]^2)/(BoltzmannConstant[ - s] ElectronMass[u] SpeedOfLight[u]^2)]; + Unit[measuratio[ElectronMass[s] SpeedOfLight[s]^2/BoltzmannConstant[s]/GravityConstant[s], + ElectronMass[u] SpeedOfLight[u]^2/BoltzmannConstant[u]/GravityConstant[u]]]; UnitSystem /: Entropy[u_UnitSystem, s_UnitSystem] := Unit[Energy[u, s]/Temperature[u, s]]; SpecificEntropy[u_UnitSystem, s_UnitSystem] := Unit[SpecificEnergy[u, s]/Temperature[u, s]]; EntropyPerVolume[u_UnitSystem, s_UnitSystem] := Unit[Entropy[u, s]/Volume[u, s]]; @@ -267,9 +236,9 @@ Catalysis[u_UnitSystem, s_UnitSystem] := Unit[Amount[u, s]/Time[u, s]]; Specificity[u_UnitSystem, s_UnitSystem] := Unit[Volume[u, s]/Amount[u, s]/Time[u, s]]; LuminousEfficacyOfRadiation[u_UnitSystem, s_UnitSystem] := Unit[MonochromaticRadiation540THzLuminousEfficacy[u, s]]; -LuminousFlux[u_UnitSystem, s_UnitSystem] := Unit[Frequency[u, s]^2 (MonochromaticRadiation540THzLuminousEfficacy[s] ReducedPlanckConstant[s])/(MonochromaticRadiation540THzLuminousEfficacy[u] ReducedPlanckConstant[u])]; +LuminousFlux[u_UnitSystem, s_UnitSystem] := Unit[Frequency[u, s]^2 measuratio[MonochromaticRadiation540THzLuminousEfficacy[s] ReducedPlanckConstant[s], MonochromaticRadiation540THzLuminousEfficacy[u] ReducedPlanckConstant[u]]]; Luminance[u_UnitSystem, s_UnitSystem] := Unit[LuminousFlux[u, s]/Area[u, s]]; -LuminousEnergy[u_UnitSystem, s_UnitSystem] := Unit[Frequency[u, s] (MonochromaticRadiation540THzLuminousEfficacy[s] ReducedPlanckConstant[s])/(MonochromaticRadiation540THzLuminousEfficacy[u] ReducedPlanckConstant[u])]; +LuminousEnergy[u_UnitSystem, s_UnitSystem] := Unit[Frequency[u, s] measuratio[MonochromaticRadiation540THzLuminousEfficacy[s] ReducedPlanckConstant[s], MonochromaticRadiation540THzLuminousEfficacy[u] ReducedPlanckConstant[u]]]; LuminousExposure[u_UnitSystem, s_UnitSystem] := Unit[Luminance[u, s] Time[u, s]]; (* Physics *) @@ -278,19 +247,20 @@ Cesium133HyperfineSplittingFrequency[u : UnitSystem[_?NumberQ, ___]] := Frequenc Cesium133HyperfineSplittingFrequency[u : UnitSystem[_Around, ___]] := Frequency[UnitData["\[CapitalDelta]\[Nu]Cs"], u]; Cesium133HyperfineSplittingFrequency[u_UnitSystem] := Frequency["\[CapitalDelta]\[Nu]Cs", u]; HubbleParameter[u_UnitSystem] := Time[u, MatchSystem[u,"Hubble"]] +CosmologicalConstant[u_UnitSystem, c_Coupling] := 3 UniverseDarkEnergyMassDensity[c] (HubbleParameter[u]/SpeedOfLight[u, c])^2 Map[(#[u_UnitSystem] := #[u, Universe[u]]) &, {CosmologicalConstant, AvogadroConstant, AtomicMassConstant, ProtonMass, EinsteinConstantSpeedOfLightToTheFourth, MolarGasConstant, StefanBoltzmannConstant, RadiationConstant, ElectricConstant, CoulombConstant, BiotSavartConstant, VacuumImpedance, FaradayConstant, JosephsonConstant, MagneticFluxQuantum, VonKlitzingConstant, ConductanceQuantum, HartreeEnergy, RydbergConstant, BohrRadius, RelativisticBohrRadius, ClassicalElectronRadius, BohrMagneton}]; -CosmologicalConstant[u_UnitSystem, c_Coupling] := 3 UniverseDarkEnergyMassDensity[c] (HubbleParameter[u]/SpeedOfLight[u, c])^2 AvogadroConstant[u_UnitSystem, c_Coupling] := MolarMassConstant[u, c] ElectronRelativeAtomicMass[c]/ElectronMass[u, c]; AtomicMassConstant[u_UnitSystem, c_Coupling] := ElectronMass[u, c]/ElectronRelativeAtomicMass[c]; ProtonMass[u_UnitSystem, c_Coupling] := ProtonElectronMassRatio[c] ElectronMass[u, c]; -EinsteinConstantSpeedOfLightToTheFourth[u_UnitSystem, c_Coupling] := (8 Pi GravitationalConstant[u, c])/SpeedOfLight[u, c]^4; +EinsteinConstantSpeedOfLightSquared[u_UnitSystem, c_Coupling] := (2 SphereAngle[u] GravitationalConstant[u, c])/SpeedOfLight[u, c]^2; +EinsteinConstantSpeedOfLightToTheFourth[u_UnitSystem, c_Coupling] := (2 SphereAngle[u] GravitationalConstant[u, c])/SpeedOfLight[u, c]^4; MolarGasConstant[u_UnitSystem, c_Coupling] := BoltzmannConstant[u, c] AvogadroConstant[u, c]; -StefanBoltzmannConstant[u_UnitSystem, c_Coupling] := (2 Pi^5 BoltzmannConstant[u, c]^4)/(15 PlanckConstant[u, c]^3 SpeedOfLight[u, c]^2); +StefanBoltzmannConstant[u_UnitSystem, c_Coupling] := (MM[Turn[u]]^4/2^5 SphereAngle[u] BoltzmannConstant[u, c]^4)/(15 PlanckConstant[u, c]^3 SpeedOfLight[u, c]^2); RadiationConstant[u_UnitSystem, c_Coupling] := (4 StefanBoltzmannConstant[u, c])/SpeedOfLight[u, c]; ElectricConstant[u_UnitSystem, c_Coupling] := 1/(MagneticConstant[u, c] (SpeedOfLight[u, c] LorentzConstant[u])^2); -CoulombConstant[u_UnitSystem, c_Coupling] := RationalizationConstant[u]/(4 Pi)/ ElectricConstant[u]; -BiotSavartConstant[u_UnitSystem, c_Coupling] := MagneticConstant[u, c] LorentzConstant[u] (RationalizationConstant[u]/(4 Pi)); +CoulombConstant[u_UnitSystem, c_Coupling] := RationalizationConstant[u]/SphereAngle[u]/ ElectricConstant[u]; +BiotSavartConstant[u_UnitSystem, c_Coupling] := MagneticConstant[u, c] LorentzConstant[u] (RationalizationConstant[u]/SphereAngle[u]); AmpereConstant[u_UnitSystem] := LorentzConstant[u] BiotSavartConstant[u]; VacuumImpedance[u_UnitSystem, c_Coupling] := MagneticConstant[u, c] SpeedOfLight[u, c] RationalizationConstant[u] LorentzConstant[u]^2; FaradayConstant[u_UnitSystem, c_Coupling] := ElementaryCharge[u, c] AvogadroConstant[u, c]; diff --git a/Kernel/systems.wl b/Kernel/systems.wl index 162b13e..e4fd9ce 100644 --- a/Kernel/systems.wl +++ b/Kernel/systems.wl @@ -1,13 +1,20 @@ -(* This file is part of UnitSystems. It is licensed under the MIT license *) -(* UnitSystems Copyright (C) 2021 Michael Reed *) +(* This file is part of UnitSystems *) +(* It is licensed under the MIT license *) +(* UnitSystems Copyright (C) 2021 Michael Reed *) +(* _ _ _ *) +(* | | | | | | *) +(* ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ *) +(* / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | *) +(* | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | *) +(* \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| *) UnitData = <| "g0" -> 980665/10^5, "ft" -> 3048/10000, "ftUS" -> 1200/3937, "lb" -> 45359237/10^8, -"rankine" -> 5/9, +"\[Degree]R" -> 5/9, "\[CapitalDelta]\[Nu]Cs" -> 9192631770, "Kcd" -> 683 555016/555000, "mP" -> Around[2.176434/10^8, 24/10^14], @@ -21,15 +28,24 @@ UnitData = <| "\[Alpha]" -> 1/Around[137.035999084, 21/10^9], "R\[Infinity]" -> Around[10973731.5681601, 21/10^6], "RK1990" -> 25812807/1000, -"RK2014" -> Around[25812.8074555, 59/10^7], "KJ1990" -> 4835979 10^8, +"RK2014" -> Around[25812.8074555, 59/10^7], "KJ2014" -> Around[4.835978525 10^14, 3 10^6], -"GMsun" -> Around[1.32712442099 10^20, 9 10^9], +"Ru2014" -> Around[8.3144598,48/10^7], +"GME" -> Around[3.986004418 10^14, 8 10^5], +"GMJ" -> Aronund[1.26686534 10^17, 9 10^9], "day" -> 60^2 24, +"aj" -> 36525/100, "au" -> 149597870700, "fur" -> 201168/1000, +"k" -> 1720209895/10^11, "H0" -> Around[67.66, 0.42], -"\[CapitalOmega]\[CapitalLambda]" -> Around[0.6889, 0.0056]|> +"\[CapitalOmega]\[CapitalLambda]" -> Around[0.6889, 0.0056], +"\[CapitalOmega]it" -> 1000495/10^6, +"Vit" -> 100033/10^5, +"ks" -> 5778/10^4, +"Ts" -> 28816/100, +"inHg" -> 1000/3386389|> AbstractUnitData = <| "slug" -> "lb" "g0"/"ft", @@ -39,6 +55,7 @@ AbstractUnitData = <| "\[Mu]0" -> 2 "\[Alpha]" "h"/"c"/"e"^2, "\[HBar]" -> "h"/(2 Pi), "\[Mu]pe" -> "\[Mu]pu"/"\[Mu]eu", +"GMsun" -> "au"^3 "k"^2/"day"^2, "pc" -> "au" 3*60^3/Pi|> AppendTo[AbstractUnitData, "\[Alpha]G" -> (AbstractUnitData["me"]/"mP")^2] @@ -51,8 +68,8 @@ AppendTo[AbstractUnitData, "mc" -> PowerExpand["c"^2/(2 Sqrt[2 Pi AbstractUnitD AppendTo[AbstractUnitData, "\[Rho]\[CapitalLambda]" -> "c"^4 AbstractUnitData["\[CapitalLambda]"]/(8 Pi AbstractUnitData["G"])] AppendTo[AbstractUnitData, "lcq" -> PowerExpand[("c" AbstractUnitData["\[HBar]"]/AbstractUnitData["\[Rho]\[CapitalLambda]"])^(1/4)]] AppendTo[AbstractUnitData, "mcq" -> PowerExpand[(AbstractUnitData["\[HBar]"]^3 AbstractUnitData["\[Rho]\[CapitalLambda]"]/"c"^5)^(1/4)]] -AppendTo[AbstractUnitData, "ecq" -> PowerExpand[("c"^3 AbstractUnitData["\[HBar]"]^3 AbstractUnitData["\[Rho]\[CapitalLambda]"])^(1/4)]] -AppendTo[AbstractUnitData, "tcq" -> PowerExpand[AbstractUnitData["lcq"] Sqrt[AbstractUnitData["mcq"]/AbstractUnitData["ecq"]]]] +AppendTo[AbstractUnitData, "tcq" -> Module[{ecq = PowerExpand[("c"^3 AbstractUnitData["\[HBar]"]^3 AbstractUnitData["\[Rho]\[CapitalLambda]"])^(1/4)]}, + PowerExpand[AbstractUnitData["lcq"] Sqrt[AbstractUnitData["mcq"]/ecq]]]] EvalUnitData[x] := AbstractUnitData[x]/.Normal[UnitData] @@ -60,82 +77,143 @@ Coupling["AbstractCoupling"] = Coupling["\[Alpha]G", "\[Alpha]", "\[Mu]eu", "\[M Coupling["AbstractUniverse"] = Coupling[AbstractUnitData["\[Alpha]G"], "\[Alpha]", "\[Mu]eu", "\[Mu]pu", "\[CapitalOmega]\[CapitalLambda]"] Coupling["StandardModel"] = Coupling["AbstractUniverse"] /. Normal[UnitData] -MetricSystem[mu_, perm_] := MetricSystem[mu, perm, AbstractUnitData["Ru"]]; -MetricSystem[mu_, perm_, ru_] := MetricSystem[mu, perm, ru, AbstractUnitData["\[HBar]"], AbstractUnitData["me"]]; -MetricSystem[mu_, perm_, ru_, hbar_, mass_] := UnitSystem[ru mass/mu/"\[Mu]eu", hbar, "c", perm, mass]; - -MetricSystem["SI2019"] := MetricSystem[AbstractUnitData["Mu"], AbstractUnitData["\[Mu]0"]] -MetricSystem["Metric"] := MetricSystem[1/1000, 4 Pi/10^7] -MetricSystem["SI1976"] := MetricSystem[1/1000, 4 Pi/10^7, 831432/10^5] - -ConventionalSystem[klitz_, joseph_] := Module[{hbar = 2/klitz/joseph^2/Pi}, - MetricSystem[1/1000, 2 "\[Alpha]" klitz/"c", AbstractUnitData["Ru"], hbar, 4 Pi "R\[Infinity]" hbar/"\[Alpha]"^2/"c"]] - -ConventionalSystem["CODATA"] := ConventionalSystem["RK2014", "KJ2014"] -ConventionalSystem["Conventional"] := ConventionalSystem["RK1990", "KJ1990"] - -GaussSystem[u_String] := ($Failed /; False) -GaussSystem[perm_, u__] := GaussSystem["AbstractMetric", perm, u] -GaussSystem[u_String, perm_, ratio_] := GaussSystem[u, perm, ratio, 1] -GaussSystem[u_String, perm_, ratio_, lorentz_] := GaussSystem[u, perm, ratio, lorentz, 1/100, 1/1000] -GaussSystem[u_String, perm_, ratio_, lorentz_, length_, mass_] := - GaussSystem[u, perm, ratio, lorentz, length, mass, PowerExpand[mass length^2]] -GaussSystem[u_String, perm_, ratio_, lorentz_, length_, mass_, energy_] := - UnitSystem[Sequence@@GaussSystem[u, perm, ratio, 1, length, mass, energy], lorentz] -GaussSystem[u_String, perm_, ratio_, 1, length_, mass_, energy_] := - UnitSystem[Sequence@@EntropySystem[u, 1, length, mass, 1, perm, energy], ratio] - -GaussSystem["EMU"] := GaussSystem[1, 4 Pi] -GaussSystem["ESU"] := GaussSystem[(100 "c")^-2, 4 Pi] -GaussSystem["Gauss"] := GaussSystem[1, 4 Pi, 1/100/"c"] -GaussSystem["LorentzHeaviside"] := GaussSystem[1, 1, 1/100/"c"] -GaussSystem["Thomson"] := GaussSystem[1, 4 Pi, 1/2] -GaussSystem["Kennelly"] := GaussSystem[10^-7, 4 Pi, 1, 1, 1] - -EnergySystem[u_, time_, length_, mass_] := EntropySystem[u, time, length, mass, 1] -EnergySystem[u_, time_, length_, mass_, energy_] := - EntropySystem[u, time, length, mass, 1, PowerExpand[MagneticConstant[u] time^2/energy], energy] -EntropySystem[u_, time_, length_, mass_, temp_] := Module[{energy = PowerExpand[mass length^2/time^2]}, - EntropySystem[u, time, length, mass, temp, PowerExpand[MagneticConstant[u] time^2/energy]]] -EntropySystem[u_, time_, length_, mass_, temp_, perm_] := - EntropySystem[u, time, length, mass, temp, perm, PowerExpand[mass length^2/time^2]] -EntropySystem[u_, time_, length_, mass_, temp_, perm_, energy_] := - UnitSystem[BoltzmannConstant[u] temp/energy, ReducedPlanckConstant[u]/time/energy, time SpeedOfLight[u]/length, perm, ElectronMass[u]/mass] - -EntropySystem["MTS"] := EnergySystem["AbstractMetric", 1, 1, 1000] -EntropySystem["IAU"] := EnergySystem["AbstractMetric", "day", "au", "GMsun"/AbstractUnitData["G"]] -EntropySystem["Hubble"] := EnergySystem["AbstractMetric", AbstractUnitData["th"], "c" AbstractUnitData["th"], 1] -EntropySystem["Cosmological"] := EnergySystem["AbstractMetric", AbstractUnitData["lc"]/"c", AbstractUnitData["lc"], AbstractUnitData["mc"]] -EntropySystem["CosmologicalQuantum"] := EnergySystem["AbstractMetric", AbstractUnitData["tcq"], AbstractUnitData["lcq"], AbstractUnitData["mcq"], AbstractUnitData["ecq"]] -EntropySystem["EMU2019"] := EnergySystem["AbstractSI2019", 1, 1/100, 1/1000] -EntropySystem["ESU2019"] := EntropySystem["AbstractSI2019", 1, 1/100, 1/1000, 1, 1000 AbstractUnitData["\[Mu]0"]/"c"^2] -EntropySystem["Mixed"] := EntropySystem["AbstractMetric", 1, 1, 1, 1, AbstractUnitData["\[Mu]0"]] -EntropySystem["English"] := EntropySystem["AbstractSI2019", 1, "ft", AbstractUnitData["slug"], "rankine", 4 Pi] -EntropySystem["EnglishUS"] := EntropySystem["AbstractMetric", 1, "ftUS", AbstractUnitData["slugUS"], "rankine", 4 Pi] -EntropySystem["FFF"] := EntropySystem["AbstractMetric", 14 "day", "fur", 90 "lb", "rankine", 0] - -DimensionSystemQ[_] := False +MM[Measure[v_,_,_]] := v +MM[v_] := v +swap[u_,s_String] := SWAP[u,StringJoin["Abstract",s]] +SWAP[Measure[v_, d_, _],s_String] := Measure[v,d,s] +SWAP[UnitSystem[kB_,h_,c_,mu_,me_,Mu_,Kcd_,a_,r_,l_,g_,t_,u_],s_] := UnitSystem[ + SWAP[kB,s],SWAP[h,s],SWAP[c,s],SWAP[mu,s],SWAP[me,s],SWAP[Mu,s],SWAP[Kcd,s],SWAP[a,s],SWAP[r,s],SWAP[l,s],SWAP[g,s],SWAP[t,s],u] +MeasureSystem[n_,kB_,h_,c_,mu_,me_,Mu_:1,Kcd_:1,a_:1,r_:1,l_:1,g_:1,t_:(2 Pi),u_:Coupling["AbstractUniverse"]] = UnitSystem[ + Measure[MeasureMagnitude[kB], dF*dL/d0, n], + Measure[MeasureMagnitude[h], dF*dL*dT/dA, n], + Measure[MeasureMagnitude[c], dL/dT, n], + Measure[MeasureMagnitude[mu], dF*dT^2/dQ^2/dA^2/dR*dC^2, n], + Measure[MeasureMagnitude[me], dM, n], + Measure[MeasureMagnitude[Mu], dM/dN, n], + Measure[MeasureMagnitude[Kcd], dT*dJ/dF/dL, n], + Measure[MeasureMagnitude[a], d1, n], + Measure[MeasureMagnitude[r], dR*dA^2, n], + Measure[MeasureMagnitude[l], d1/dC, n], + Measure[MeasureMagnitude[g], dM*dL/dF/dT^2, n], + Measure[MeasureMagnitude[t], dA, n],u] + +MetricSystem[name_, mu_, perm_, ru_:AbstractUnitData["Ru"], g0_:1] := MetricSystem[name, mu, perm, ru, g0, "h", AbstractUnitData["me"]]; +MetricSystem[name_, mu_, perm_, ru_, g0_, h_, mass_] := MeasureSystem[name, ru mass/mu/"\[Mu]eu", h/2/Pi, "c", perm, mass, mu, "Kcd"*(AbstractUnitData["me"]/mass)^2*(h/"h"), 1, 1, 1, g0, 2 Pi, Coupling["AbstractUniverse"]]; +ConventionalSystem[name_, klitz_, joseph_, Ru_:AbstractUnitData["Ru"], g0_:1] := Module[{h = 4/klitz/joseph^2}, + MetricSystem[name, 1/1000, 2 "\[Alpha]" klitz/"c", Ru, g0, h, 2 "R\[Infinity]" h/"\[Alpha]"^2/"c"]] +RankineSystem[u_, s_, l_, m_, g0_:1] := EntropySystem[u,s,1,l,m,"\[Degree]R",4 Pi, 1000 MM@MolarMassConstant[u],g0] + +MetricSystem["SI2019"] := MetricSystem["AbstractSI2019",AbstractUnitData["Mu"], AbstractUnitData["\[Mu]0"]] +MetricSystem["Metric"] := MetricSystem["AbstractMetric",1/1000, 4 Pi/10^7] +MetricSystem["SI2019Engineering"] := MetricSystem["AbstractSI2019Engineering",AbstractUnitData["Mu"], AbstractUnitData["\[Mu]0"], AbstractUnitData["Ru"], "g0"] +MetricSystem["MetricEngineering"] := MetricSystem["AbstractMetricEngineering",1/1000, 4 Pi/10^7, AbstractUnitData["Ru"], "g0"] +MetricSystem["SI1976"] := MetricSystem["AbstractSI1976",1/1000, 4 Pi/10^7, 831432/10^5] +MetricSystem["CODATA"] := ConventionalSystem["AbstractCODATA", "RK2014", "KJ2014", "Ru2014"] +MetricSystem["Conventional"] := ConventionalSystem["AbstractConventional", "RK1990", "KJ1990"] + +RankineSystem["British"] := RankineSystem["AbstractMetric","British","ft",AbstractUnitData["slug"]] +RankineSystem["British2019"] := RankineSystem["AbstractSI2019","British2019","ft",AbstractUnitData["slug"]] +RankineSystem["Survey"] := RankineSystem["AbstractMetric","Survey","ftUS","lb","g0"/"ftUS"] +RankineSystem["Survey2019"] := RankineSystem["AbstractSI2019","Survey2019","ftUS","lb","g0"/"ftUS"] +RankineSystem["English"] := RankineSystem["AbstractMetric","English","ft","lb","g0"/"ft"] +RankineSystem["English2019"] := RankineSystem["AbstractSI2019","English2019","ft","lb","g0"/"ft"] +RankineSystem["FPS"] := RankineSystem["AbstractMetric","FPS","ft","lb"] +RankineSystem["FPS2019"] := RankineSystem["AbstractSI2019","FPS2019","ft","lb"] + +AstronomicalSystem[u_, s_] := EntropySystem[u,s,1,1,1/MM@GravitationalConstant[u]] +ElectricSystem[u_,s_,r_,v_] := EntropySystem[u,s,1,1,v^2/r,1,MM@MagneticConstant[u]/r] + +GaussSystem[u_String, s_, perm_, ratio_] := GaussSystem[u, s, perm, ratio, 1] +GaussSystem[u_String, s_, perm_, ratio_, lorentz_] := GaussSystem[u, s, perm, ratio, lorentz, 1/100, 1/1000] +GaussSystem[u_String, s_, perm_, ratio_, lorentz_, length_, mass_] := + GaussSystem[u, s, perm, ratio, lorentz, length, mass, MM@GravityConstant[u]] +GaussSystem[u_String, s_, perm_, ratio_, lorentz_, length_, mass_, g0_] := + EntropySystem[u, s, 1, length, mass, 1, perm, MM@MolarMassConstant[u]/mass, g0, PowerExpand[mass length^2], ratio, lorentz] + +GaussSystem["EMU"] := GaussSystem["AbstractMetric", "EMU", 1, 4 Pi] +GaussSystem["ESU"] := GaussSystem["AbstractMetric", "ESU", (100 "c")^-2, 4 Pi] +GaussSystem["Gauss"] := GaussSystem["AbstractMetric", "Gauss", 1, 4 Pi, 1/100/"c"] +GaussSystem["LorentzHeaviside"] := GaussSystem["AbstractMetric", "LorentzHeaviside", 1, 1, 1/100/"c"] +GaussSystem["Thomson"] := GaussSystem["AbstractMetric", "Thomson", 1, 4 Pi, 1/2] +GaussSystem["Kennelly"] := GaussSystem["AbstractMetric", "Kennelly", 10^-7, 4 Pi, 1, 1, 1] + +EntropySystem[u_, s_, time_, length_, mass_, temp_:1] := Module[{energy = PowerExpand[mass length^2/time^2]}, + EntropySystem[u, s, time, length, mass, temp, PowerExpand[MM@MagneticConstant[u] time^2/energy],MM@MolarMassConstant[u]/mass, MM@GravityConstant[u], energy]] +EntropySystem[u_, s_, time_, length_, mass_, temp_, perm_] := + EntropySystem[u, s, time, length, mass, temp, perm, MM@MolarMassConstant[u]] +EntropySystem[u_, s_, time_, length_, mass_, temp_, perm_, mol_] := + EntropySystem[u, s, time, length, mass, temp, perm, mol, MM@GravityConstant[u]] +EntropySystem[u_, s_, time_, length_, mass_, temp_, perm_, mol_, g0_] := + EntropySystem[u, s, time, length, mass, temp, perm, mol, g0, PowerExpand[mass length^2/time^2]] +EntropySystem[u_, s_, time_, length_, mass_, temp_, perm_, mol_, g0_, energy_, rat_:1, lor_:1] := + MeasureSystem[StringJoin["Abstract",s], MM@BoltzmannConstant[u] temp/energy, MM@ReducedPlanckConstant[u]/time/energy, time MM@SpeedOfLight[u]/length, perm, MM@ElectronMass[u]/mass, mol, MM@MonochromaticRadiation540THzLuminousEfficacy[u]*energy/time, MM@AngleConstant[u], rat, lor, g0, MM@Turn[u], Universe[u]] + +EntropySystem["Astronomical"] := AstronomicalSystem["AbstractMetric","Astronomical"] +EntropySystem["International"] := ElectricSystem["AbstractMetric","International","\[CapitalOmega]it","Vit"] +EntropySystem["InternationalMean"] := ElectricSystem["AbstractMetric","InternationalMean",100049/10^5, 100034/10^5] + +EntropySystem["Nautical"] := EntropySystem["AbstractEnglish", "Nautical", 60^2, 6080, 1] +EntropySystem["MPH"] := EntropySystem["AbstractEnglish", "MPH", 60^2, 5280, 1] +EntropySystem["KKH"] := EntropySystem["AbstractMetric", "KKH", 60^2, 1000, 1] +EntropySystem["MTS"] := EntropySystem["AbstractMetric", "MTS", 1, 1, 1000] +EntropySystem["IAU"] := EntropySystem["AbstractMetric", "IAU", "day", "au", AbstractUnitData["GMsun"]/AbstractUnitData["G"]] +EntropySystem["IAUE"] := EntropySystem["AbstractMetric", "IAUE", "day", "au", "GME"/AbstractUnitData["G"]] +EntropySystem["IAUJ"] := EntropySystem["AbstractMetric", "IAUJ", "day", "au", "GMJ"/AbstractUnitData["G"]] +EntropySystem["Hubble"] := EntropySystem["AbstractMetric", "Hubble", AbstractUnitData["th"], "c" AbstractUnitData["th"], 1] +EntropySystem["Cosmological"] := EntropySystem["AbstractMetric", "Cosmological", AbstractUnitData["lc"]/"c", AbstractUnitData["lc"], AbstractUnitData["mc"]] +EntropySystem["CosmologicalQuantum"] := EntropySystem["AbstractMetric", "CosmologicalQuantum", AbstractUnitData["tcq"], AbstractUnitData["lcq"], AbstractUnitData["mcq"]] +EntropySystem["EMU2019"] := EntropySystem["AbstractSI2019", "EMU2019", 1, 1/100, 1/1000] +EntropySystem["ESU2019"] := EntropySystem["AbstractSI2019", "ESU2019", 1, 1/100, 1/1000, 1, 1000 AbstractUnitData["\[Mu]0"]/"c"^2] +EntropySystem["Mixed"] := EntropySystem["AbstractMetric", "Mixed", 1, 1, 1, 1, AbstractUnitData["\[Mu]0"]] +EntropySystem["GravitationalMetric"] := EntropySystem["AbstractMetric", "GravitationalMetric", 1, 1, "g0"] +EntropySystem["GravitationalSI2019"] := EntropySystem["AbstractSI2019", "GravitationalSI2019", 1, 1, "g0"] +EntropySystem["FFF"] := EntropySystem["AbstractMetric", "FFF", 14 "day", "fur", 90 "lb", "\[Degree]R", 0] + +(*DimensionSystem[] := UnitSystem[dF dL/d0, dF dL/dT/dA, dL/dT, dF dT^2/dQ^2/dA^2/dR dC^2, dM, dM/dN, dJ dT/dL/dF, d1, dR*dA^2, d1/dC, dM dL/dT^2/dF, dA, Coupling["AbstractUniverse"]]*) +DimensionSystem[] := UnitSystem["F" "L"/"\[CapitalTheta]", "F" "L" "T"/"A", "L"/"T", "F" "T"^2/"Q"^2/"A"^2/"\[CapitalLambda]" "C"^2, "M", "M"/"N", "J" "T"/"L"/"F", 1, "\[CapitalLambda]"*"A"^2, 1/"C", "M" "L"/"T"^2/"F", 2 Pi "A", Coupling["AbstractUniverse"]] + +DimensionSystemQ[_] = False DimensionSystemQ[UnitSystem[_, _, _, _, "M", ___]] := True -DimensionSystem[mu_, lore_] := UnitSystem[Sequence@@DimensionSystem[mu], 1, lore] -DimensionSystem[mu_] := UnitSystem["M" "L"^2/"T"^2/"\[CapitalTheta]", "M" "L"^2/"T", "L"/"T", mu, "M"] - -DimensionSystem[u_String] := If[AbstractUnitSystemQ[u], DimensionSystem[StringDelete[u, "Abstract"]], DimensionSystem["M" "L"/"T"^2/"I"^2]] -DimensionSystem["ISQES"] := DimensionSystem["T"/"L"^2/"I"^2] -DimensionSystem["EMU"] := DimensionSystem[1] -DimensionSystem["ESU"] := DimensionSystem["T"^2/"L"^2] -DimensionSystem["Gauss"] := DimensionSystem[1, "T"/"L"] -DimensionSystem["Stoney"] := DimensionSystem["ISQEM"] //. {"\[CapitalTheta]" -> "M" "L"^2/"T"^2, "T" -> "L"} -DimensionSystem["Electronic"] := DimensionSystem["Stoney"] /. "M" -> 1 -DimensionSystem["PlanckGauss"] := DimensionSystem["Stoney"] /. "L" -> 1/"M" -DimensionSystem["Planck"] := DimensionSystem["PlanckGauss"] /. "I" -> "M" -DimensionSystem["Natural"] := DimensionSystem["Planck"] /. "M" -> 1 -DimensionSystem["NaturalGauss"] := DimensionSystem["PlanckGauss"] /. "M" -> 1 -DimensionSystem["Rydberg"] := DimensionSystem["ISQEM"] //. {"\[CapitalTheta]" -> "M" "L"^2/"T"^2, "T" -> "L"^2 "M"} -DimensionSystem["Hartree"] := DimensionSystem["Rydberg"] /. "M" -> 1 -DimensionSystem["Hubble"] := DimensionSystem["ISQEM"] /. "T" -> "L" -DimensionSystem["CosmologicalQuantum"] := DimensionSystem["Hubble"] /. "L" -> 1/"M" + +DimensionRules[u_String,x_String] := DimensionRules[u,DimensionSystem[x]] + +DimensionRules["MetricEngineering", x_] := x /. {"C" -> 1, "\[CapitalLambda]" -> 1} +DimensionRules["GravitationalMetric", x_] := DimensionRules["MetricEngineering", x] /. {"M" -> "F" "T"^2/"L", "A" -> 1} +DimensionRules["ISQEM", x_] := DimensionRules["MetricEngineering", x] /. {"F" -> "M" "L"/"T"^2, "A" -> 1} +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["Electronic",x_] := DimensionRules["Stoney", x] /. "M" -> 1 +DimensionRules["PlanckGauss",x_] := DimensionRules["Stoney", x] /. "L" -> 1/"M" +DimensionRules["Planck",x_] := DimensionRules["PlanckGauss", x] /. "I" -> "M" +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 +DimensionRules["Hubble",x_] := x /. "T" -> "L" +DimensionRules["CosmologicalQuantum",x_] := DimensionRules["Hubble", x] /. "L" -> 1/"M" + +DimensionSystem[u_String] := If[AbstractUnitSystemQ[u], DimensionSystem[StringDelete[u, "Abstract"]], DimensionRules["ISQEM",DimensionSystem[]]] +(*DimensionSystem["Rationalized"] := DimensionSystem["L" "M"/("I" "T" "C")^2/"\[CapitalLambda]", "\[CapitalLambda]", "C"]*) +(*DimensionSystem["ISQEM"] := DimensionSystem["M" "L"/"T"^2/"I"^2]*) +(*DimensionSystem["ISQES"] := DimensionSystem["T"/"L"^2/"I"^2]*) +DimensionSystem["MetricEngineering"] := DimensionRules["MetricEngineering",DimensionSystem[]] +DimensionSystem["GravitationalMetric"] := DimensionRules["GravitationalMetric",DimensionSystem[]] +DimensionSystem["EMU"] := DimensionRules["EMU","ISQEM"] +DimensionSystem["ESU"] := DimensionRules["ESU","ISQEM"] +DimensionSystem["Gauss"] := DimensionRules["Gauss","ISQEM"] +DimensionSystem["Stoney"] := DimensionRules["Stoney","ISQEM"] +DimensionSystem["Electronic"] := DimensionRules["Electronic","Stoney"] +DimensionSystem["PlanckGauss"] := DimensionRules["PlanckGauss","Stoney"] +DimensionSystem["Planck"] := DimensionRules["Planck","PlanckGauss"] +DimensionSystem["Natural"] := AbstractUnitSystem["Natural"] +DimensionSystem["NaturalGauss"] := DimensionRules["NaturalGauss","PlanckGauss"] +DimensionSystem["Rydberg"] := DimensionRules["Rydberg","ISQEM"] +DimensionSystem["Hartree"] := DimensionRules["Hartree","Rydberg"] +DimensionSystem["Hubble"] := DimensionRules["Hubble","ISQEM"] +DimensionSystem["CosmologicalQuantum"] := DimensionRules["CosmologicalQuantum","Hubble"] DimensionSystem["ESU2019"] := DimensionSystem["ISQES"] -DimensionSystem["LorentzHeaviside"] := DimensionSystem["Gauss"] +DimensionSystem["LorentzHeaviside"] := Dimension["Gauss"] DimensionSystem["HLU"] := DimensionSystem["Gauss"] DimensionSystem["CGS"] := DimensionSystem["Gauss"] DimensionSystem["CGSm"] := DimensionSystem["EMU"] @@ -147,6 +225,19 @@ DimensionSystem["QCD"] := DimensionSystem["Planck"] DimensionSystem["QCDGauss"] := DimensionSystem["PlanckGauss"] DimensionSystem["QCDoriginal"] := DimensionSystem["PlanckGauss"] DimensionSystem["Cosmological"] := DimensionSystem["Hubble"] +DimensionSystem["SI2019Engineering"] := DimensionSystem["MetricEngineering"] +DimensionSystem["GravitationalSI2019"] := DimensionSystem["GravitationalMetric"] +DimensionSystem["British"] := DimensionSystem["GravitationalMetric"] +DimensionSystem["British2019"] := DimensionSystem["GravitationalMetric"] +DimensionSystem["English"] := DimensionSystem["MetricEngineering"] +DimensionSystem["English2019"] := DimensionSystem["MetricEngineering"] +DimensionSystem["Survey"] := DimensionSystem["MetricEngineering"] +DimensionSystem["Survey2019"] := DimensionSystem["MetricEngineering"] + +DimensionSystemQ[DimensionSystem["Hartree"]] = True +DimensionSystemQ[DimensionSystem["Electronic"]] = True +DimensionSystemQ[DimensionSystem["NaturalGauss"]] = True +DimensionSystemQ[DimensionSystem["Natural"]] = True AbstractUnitSystem = <| "AbstractUnits" -> UnitSystem["kB","\[HBar]","c","\[Mu]0","me","\[Lambda]","\[Alpha]L"], @@ -157,37 +248,52 @@ AppendTo[AbstractUnitSystem, Map[(StringJoin["Dimension",#] -> DimensionSystem[# {"ISQEM", "ISQES", "EMU", "ESU", "Gauss", "Stoney", "Electronic", "PlanckGauss", "Planck", "Natural", "NaturalGauss", "Rydberg", "Hartree", "Hubble", "CosmologicalQuantum"}]] AppendSystems[f_, l_] := AppendTo[AbstractUnitSystem, Map[(# -> f[#]) &, l]] -AppendSystems[MetricSystem, {"Metric", "SI2019", "SI1976"}] -AppendSystems[ConventionalSystem, {"CODATA", "Conventional"}] +AppendSystems[MetricSystem, {"Metric", "SI2019", "MetricEngineering", "SI2019Engineering", "SI1976","CODATA","Conventional"}] +AppendSystems[RankineSystem, {"British", "British2019", "Survey", "Survey2019", "English", "English2019", "FPS", "FPS2019"}] AppendSystems[GaussSystem, {"EMU", "ESU", "Gauss", "LorentzHeaviside", "Thomson", "Kennelly"}] -AppendSystems[EntropySystem, {"MTS", "IAU", "Hubble", "Cosmological", "CosmologicalQuantum", "EMU2019", "ESU2019", "Mixed", "English", "EnglishUS", "FFF"}] +AppendSystems[EntropySystem, {"International", "InternationalMean", "Nautical", "MPH", "KKH", "MTS", "IAU", "IAUE", "IAUJ", "Astronomical", "Hubble", "Cosmological", "CosmologicalQuantum", "EMU2019", "ESU2019", "Mixed", "GravitationalMetric", "GravitationalSI2019", "FFF"}] AppendTo[AbstractUnitSystem, { -"Planck" -> UnitSystem[1, 1, 1, 1, PowerExpand[Sqrt[4 Pi AbstractUnitData["\[Alpha]G"]]]], -"PlanckGauss" -> UnitSystem[1, 1, 1, 4 Pi, PowerExpand[Sqrt[AbstractUnitData["\[Alpha]G"]]]], -"Stoney" -> UnitSystem[1, 1/"\[Alpha]", 1, 4 Pi, PowerExpand[Sqrt[AbstractUnitData["\[Alpha]G"]/"\[Alpha]"]]], -"Hartree" -> UnitSystem[1,1,1/"\[Alpha]",4 Pi "\[Alpha]"^2,1], -"Rydberg" -> UnitSystem[1,1,2/"\[Alpha]",Pi "\[Alpha]"^2,1/2], -"Schrodinger" -> UnitSystem[1, 1, 1/"\[Alpha]", 4 Pi "\[Alpha]"^2, PowerExpand[Sqrt[AbstractUnitData["\[Alpha]G"]/"\[Alpha]"]]], -"Electronic" -> UnitSystem[1, 1/"\[Alpha]", 1, 4 Pi, 1], -"Natural" -> UnitSystem[1, 1, 1, 1, 1, 1, 1, "1"], -"NaturalGauss" -> UnitSystem[1, 1, 1, 4 Pi, 1, 1, 1, "1"], -"QCD" -> UnitSystem[1, 1, 1, 1, 1/AbstractUnitData["\[Mu]pe"]], -"QCDGauss" -> UnitSystem[1, 1, 1, 4 Pi, 1/AbstractUnitData["\[Mu]pe"]], -"QCDoriginal" -> UnitSystem[1, 1, 1, 4 Pi "\[Alpha]", 1/AbstractUnitData["\[Mu]pe"]], +"Planck" -> MeasureSystem["Planck", 1, 1, 1, 1, PowerExpand[Sqrt[4 Pi AbstractUnitData["\[Alpha]G"]]]], +"PlanckGauss" -> MeasureSystem["PlanckGauss", 1, 1, 1, 4 Pi, PowerExpand[Sqrt[AbstractUnitData["\[Alpha]G"]]]], +"Stoney" -> MeasureSystem["Stoney", 1, 1/"\[Alpha]", 1, 4 Pi, PowerExpand[Sqrt[AbstractUnitData["\[Alpha]G"]/"\[Alpha]"]]], +"Hartree" -> MeasureSystem["Hartree", 1,1,1/"\[Alpha]",4 Pi "\[Alpha]"^2,1], +"Rydberg" -> MeasureSystem["Rydberg", 1,1,2/"\[Alpha]",Pi "\[Alpha]"^2,1/2], +"Schrodinger" -> SchrodingerSystem["Schrodinger", 1, 1, 1/"\[Alpha]", 4 Pi "\[Alpha]"^2, PowerExpand[Sqrt[AbstractUnitData["\[Alpha]G"]/"\[Alpha]"]]], +"Electronic" -> MeasureSystem["Electronic", 1, 1/"\[Alpha]", 1, 4 Pi, 1], +"Natural" -> MeasureSystem["Natural", 1, 1, 1, 1, 1], +"NaturalGauss" -> MeasureSystem["NaturalGauss", 1, 1, 1, 4 Pi, 1], +"QCD" -> MeasureSystem["QCD", 1, 1, 1, 1, 1/AbstractUnitData["\[Mu]pe"]], +"QCDGauss" -> MeasureSystem["QCDGauss", 1, 1, 1, 4 Pi, 1/AbstractUnitData["\[Mu]pe"]], +"QCDoriginal" -> MeasureSystem["QCDoriginal", 1, 1, 1, 4 Pi "\[Alpha]", 1/AbstractUnitData["\[Mu]pe"]], "SI" :> AbstractUnitSystem["SI2019"], "MKS" :> AbstractUnitSystem["Metric"], +"SIE" :> AbstractUnitSystem["SI2019Engineering"], +"ME" :> AbstractUnitSystem["MetricEngineering"], +"GSI2019" :> AbstractUnitSystem["GravitationalSI2019"], +"GSI" :> AbstractUnitSystem["GravitationalSI2019"], +"GM" :> AbstractUnitSystem["GravitationalMetric"], "CGS" :> AbstractUnitSystem["Gauss"], "CGS2019" :> AbstractUnitSystem["EMU2019"], "CGSm" :> AbstractUnitSystem["EMU"], "CGSe" :> AbstractUnitSystem["ESU"], "HLU" :> AbstractUnitSystem["LorentzHeaviside"], +"EnglishEngineering" :> AbstractUnitSystem["English"], +"BritishGravitational" :> AbstractUnitSystem["British"], +"BG" :> AbstractUnitSystem["British"], +"EnglishUS" :> AbstractUnitSystem["Survey"], +"AbsoluteEnglish" :> AbstractUnitSystem["FPS"], +"AE" :> AbstractUnitSystem["FPS"], +"EE" :> AbstractUnitSystem["English"], +"EE2019" :> AbstractUnitSystems["English2019"], +"EnglishEngineering2019" :> AbstractUnitSystem["English2019"], +"BritishGravitational2019" :> AbstractUnitSystem["British2019"], +"AbsoluteEnglish2019" :> AbstractUnitSystem["FPS2019"], +"AE2019" :> AbstractUnitSystem["FPS2019"], "ISQ" :> AbstractUnitSystem["DimensionISQ"], "DimensionISQ" :> AbstractUnitSystem["DimensionISQEM"]}] Map[(UnitSystem[#] := AbstractUnitSystem[#]) &, -{"AbstractUnits","AbstractUnits1","AbstractUnits2","ISQ","SI","MKS","CGS","CGS2019","CGSm","CGSe","HLU"}] -UnitSystem["Natural"] = UnitSystem[1, 1, 1, 1, 1] -UnitSystem["NaturalGauss"] = UnitSystem[1, 1, 1, 4 Pi, 1] -Map[(UnitSystem[#] = AbstractUnitSystem[#] /. Normal[UnitData]) &, -{"Gauss","LorentzHeaviside","Thomson","Kennelly","ESU","ESU2019","EMU","EMU2019","MTS","Mixed","Metric","SI1976","SI2019","CODATA","Conventional","English","EnglishUS","IAU","FFF","Planck","PlanckGauss","Stoney","Hartree","Rydberg","Schrodinger","Electronic","QCD","QCDGauss","QCDoriginal","Hubble","Cosmological","CosmologicalQuantum"}] +{"AbstractUnits","AbstractUnits1","AbstractUnits2","ISQ","SI","MKS","SIE","ME","GSI2019","GSI","GM","CGS","CGS2019","CGSm","CGSe","HLU","EnglishEngineering","BritishGravitational","BG","EnglishUS","AbsoluteEnglish","AE","EE","EE2019","EnglishEngineering2019","BritishGravitational2019","AbsoluteEnglish2019","AE2019"}] +Map[(UnitSystem[#] = SWAP[AbstractUnitSystem[#] /. Normal[UnitData],#]) &, +{"Gauss","LorentzHeaviside","Thomson","Kennelly","ESU","ESU2019","EMU","EMU2019","Nautical","MPH","KKH","MTS","Mixed","Metric","SI2019","MetricEngineering","SI2019Engineering","GravitationalMetric","GravitationalSI2019","SI1976","CODATA","Conventional","British","British2019","Survey","Survey2019","English","English2019","FPS","FPS2019","IAU","IAUE","IAUJ","FFF","Planck","PlanckGauss","Stoney","Hartree","Rydberg","Schrodinger","Electronic","QCD","QCDGauss","QCDoriginal","Astronomical","International","InternationalMean","Hubble","Cosmological","CosmologicalQuantum","Natural","NaturalGauss"}] diff --git a/Project.toml b/Project.toml index 804356f..8ebfbec 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,10 @@ name = "UnitSystems" uuid = "3a241a3c-2137-41aa-af5e-1388e404ca09" authors = ["Michael Reed"] -version = "0.3.1" +version = "0.3.2" + +[deps] +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" [compat] julia = "1" diff --git a/README.md b/README.md index 1d5ba04..9c131fb 100644 --- a/README.md +++ b/README.md @@ -8,48 +8,49 @@ [![Coverage Status](https://coveralls.io/repos/chakravala/UnitSystems.jl/badge.svg?branch=master&service=github)](https://coveralls.io/github/chakravala/UnitSystems.jl?branch=master) [![codecov.io](https://codecov.io/github/chakravala/UnitSystems.jl/coverage.svg?branch=master)](https://codecov.io/github/chakravala/UnitSystems.jl?branch=master) -Specifications for dimensional units are in the [UnitSystems.jl](https://github.com/chakravala/UnitSystems.jl) and [MeasureSystems.jl](https://github.com/chakravala/MeasureSystems.jl) and [UnitfulSystems.jl](https://github.com/chakravala/UnitfulSystems.jl) repositories. -The three packages are designed so that they can be interchanged if compatibility with [Measurements.jl](https://github.com/JuliaPhysics/Measurements.jl) or [Unitful.jl](https://github.com/PainterQubits/Unitful.jl) is desired or not. -However, the `UnitfulSystems` package has fewer `UnitSystem` specifications available than the `UnitSystems` and `MeasureSystems` packages due to limitations in combination with the `Unitful` package. -Specifically, `Metric`, `SI2019`, `CODATA`, `Conventional`, `MTS`, `EMU2019`, `English`, and `EnglishUS` can have `Unitful` values; while `Gauss`, `LorentzHeaviside`, `Thomson`, `EMU`, `ESU`, `ESU2019`, `IAU`, `FFF`, `Planck`, `PlanckGauss`, `Stoney`, `Hartree`, `Rydberg`, `Schrodinger`, `Electronic`, `Natural`, `NaturalGauss`, `QCD`, `QCDGauss`, and `QCDoriginal` are plain valued or are limited to `Measurement` values. +> In fact there is nothing transcendental about dimensions; the ultimate principle is precisely expressible (in Newton's terminology) as one of *similitude*, exact or approximate, to be tested by the rule that mere change in the magnitudes of the ordered scheme of units of measurement that is employed must not affect sensibly the forms of the equations that are the adequate expression of the underlying relations of the problem. (J.L., 1914) -```Julia -pkg> add UnitSystems # or MeasureSystems +Specifications for dimensional units are in the [UnitSystems.jl](https://github.com/chakravala/UnitSystems.jl) and [Similitude.jl](https://github.com/chakravala/Similitude.jl) and [MeasureSystems.jl](https://github.com/chakravala/MeasureSystems.jl) repositories. +The three packages are designed so that they can be interchanged with compatibility. +On its own `UnitSystems` is the fastest package, while `Similitude` (provides `Quantity` type) and `MeasureSystems` (introduces [Measurements.jl](https://github.com/JuliaPhysics/Measurements.jl) uncertainty) build additional features on top of `UnitSystems` base defintions. +Additionally, in the `UnitSystems` repository there is an equivalent [Wolfram language paclet](https://reference.wolfram.com/language/guide/Paclets) `Kernel` and also an unmaintained Rust `src` implementation. +Defaults are shared across the packages: `Metric`, `SI2019`, `CODATA`, `Conventional`, `International`, `InternationalMean`, `MetricEngineering`, `SI2019Engineering`, `GravitationalMetric`, `GravitationalSI2019`, `British`, `British2019`, `Survey`, `Survey2019`, `English`, `English2019`, `FPS`, `FPS2019`, `Gauss`, `LorentzHeaviside`, `Thomson`, `EMU`, `ESU`, `EMU2019`, `ESU2019`, `IAU`, `IAUE`, `IAUJ`, `Astronomical`, `Hubble`, `Cosmological`, `CosmologicalQuantum`, `Nautical`, `MPH`, `KKH`, `MTS`, `FFF`, `Planck`, `PlanckGauss`, `Stoney`, `Hartree`, `Rydberg`, `Schrodinger`, `Electronic`, `Natural`, `NaturalGauss`, `QCD`, `QCDGauss`, and `QCDoriginal`. -julia> using UnitSystems +```Julia +julia> using UnitSystems # or Similitude or MeasureSystems ``` 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. -In total, five fundamental constants `kB,ħ,𝘤,μ₀,mₑ` are used to specify a specific unit system. -These are the constants of `boltzmann`, `planckreduced`, `lightspeed`, `permeability`, and `electronmass`. +Eleven fundamental constants `kB`, `ħ`, `𝘤`, `μ₀`, `mₑ`, `Mᵤ`, `Kcd`, `θ`, `λ`, `αL`, `g₀` are used to govern a specific unit system consistent scaling. +These are the constants `boltzmann`, `planckreduced`, `lightspeed`, `vacuumpermeability`, `electronmass`, `molarmass`, `luminousefficacy`, `angle`, `rationalization`, `lorentz`, and `gravity`. Different choices of natural units or physical measurements result in a variety of unit systems for many purposes. Main documentation is at https://geophysics.crucialflow.com/dev/units -Another important additional definition is the `molarmass` constant `Mᵤ`, which is automatically selected based on the choice of `boltzmann` constant (but can also be customized if necessary). Historically, older electromagnetic unit systems also relied on a `rationalization` constant `λ` and a `lorentz` force proportionality constant `αL`. In most unit systems these extra constants have a value of `1` unless otherwise specified. ```Julia - UnitSystem{kB,ħ,𝘤,μ₀,mₑ,λ,αL} + UnitSystem{kB, ħ, 𝘤, μ₀, mₑ, Mᵤ, (Kcd, θ, λ, αL, g₀, ...)} ``` -Fundamental constants of physics are: `kB` Boltzmann's constant, `ħ` reduced Planck's constant, `𝘤` speed of light, `μ₀` vacuum permeability, `mₑ` electron rest mass, `λ` Gauss rationalization, and `αL` Lorentz's constant. +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. 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`, `universal`, `planck`, `planckreduced`, `lightspeed`, `planckmass`, `atomicmass`, `protonmass`, `electronmass`, `newton`, `einstein`, `permeability`, `permittivity`, `coulomb`, and -additional constants `molarmass`, `hyperfine`, `luminousefficacy`, `stefan`, `radiationintensity`, `ampere`, `lorentz`, `biotsavart`, `rationalization`, `impedance`, `charge`, `magneton`, `conductance`, `faraday`, `magneticflux`, `josephson`, `klitzing`, `hartree`, `rydberg`, `bohr`, and `bohrreduced`. +These constants induce derived values for `avogadro`, `boltzmann`, `universalgas`, `planck`, `planckreduced`, `lightspeed`, `planckmass`, `atomicmass`, `protonmass`, `electronmass`, `newton`, `einstein`, `vacuumpermeability`, `vacuumpermittivity`, `coulomb`, and +additional constants `molarmass`, `luminousefficacy`, `gravity`, `angle`, `turn`, `sphere`, `stefan`, `radiationdensity`, `ampere`, `lorentz`, `biotsavart`, `rationalization`, `vacuumimpedance`, `elementarycharge`, `magneton`, `conductancequantum`, `faraday`, `magneticfluxquantum`, `josephson`, `klitzing`, `hartree`, `rydberg`, `bohr`, `bohrreduced`. +Derived quantities are `second`, `minute`, `hour`, `day`, `year`, `gaussianyear`, `siderealyear`, `hyperfine`, `hubble`, `cosmological`, `solarmass`, `earthmass`, `jupitermass`, `lunarmass`, `astronomicalunit`, `lunardistance`, `mile`, `clarkemile`, `nauticalmile`, `parsec`, `lightyear`, `gallon`, `litre`, `standardgravity`, `standardtemperature`, `standardpressure`, `inchmercury`, `torr`, `kilocalorie`, `calorie`, `meancalorie`, `thermalunit`, `tonsrefrigeration`, `horsepower`, `horsepowerwatt`, `horsepowermetric`, `electricalhorsepower`, `boilerhorsepower`. Physics constant documentation is at https://geophysics.crucialflow.com/dev/constants -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`). +Additional reference `UnitSystem` variants: `EMU`, `ESU`, `Gauss`, `LorentzHeaviside`, `SI2019`, `SI1976`, `CODATA`, `Conventional`, `International`, `InternationalMean`, `MetricEngineering`, `GravitationalMetric`, `Astronomical`, `Hubble`, `Cosmological`, `CosmologicalQuantum`, `IAU`, `IAUE`, `IAUJ`, `MTS`, `FPS`, `British`, `Survey`, `Nautical`, `MPH`, `KKH`, `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`). Unit conversion documentation is at https://geophysics.crucialflow.com/dev/convert **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`; +Mechanics: `angle`, `solidangle`, `time`, `length`, `area`, `volume`, `wavenumber`, `angularwavenumber`, `fuelefficiency`, `frequency`, `angularfrequency`, `frequencydrift`, `speed`, `acceleration`, `jerk`, `snap`, `crackle`, `pop`, `volumeflow`, +`inertia`, `mass`, `massflow`, `lineardensity`, `areadensity`, `density`, `specificweight`, `specificvolume`, `force`, `gforce`, `stiffness`, `pressure`, `compressibility`, `viscosity`, `diffusivity`, `rotationalinertia`, `impulse`, `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`, @@ -58,9 +59,9 @@ Thermodynamics: `temperature`, `entropy`, `specificentropy`, `volumeheatcapacity **Generalized dimensionless `Coupling`:** ```Julia -Coupling{αG,α,μₑᵤ,μₚᵤ} +Coupling{αG,α,μₑᵤ,μₚᵤ,ΩΛ} ``` -Specification of `Universe` with the dimensionless `Coupling` constants `coupling`, `finestructure`, `electronunit`, `protonunit`, and `protonelectron`. Alterations to these values can be facilitated and quantified using parametric polymorphism. +Specification of `Universe` with the dimensionless `Coupling` constants `coupling`, `finestructure`, `electronunit`, `protonunit`, `protonelectron`, and `darkenergydensity`. Alterations to these values can be facilitated and quantified using parametric polymorphism. Due to the `Coupling` interoperability, the `MeasureSystems` package is made possible to support calculations with `Measurements` having error standard deviations. -Other similar packages include [MeasureSystems.jl](https://github.com/chakravala/MeasureSystems.jl), [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). +Other similar packages include [Similitude.jl](https://github.com/chakravala/Similitude.jl), [MeasureSystems.jl](https://github.com/chakravala/MeasureSystems.jl), [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), [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 cadfde2..a02f14b 100644 --- a/src/UnitSystems.jl +++ b/src/UnitSystems.jl @@ -1,15 +1,30 @@ module UnitSystems -# This file is part of UnitSystems.jl. It is licensed under the MIT license +# This file is part of UnitSystems.jl +# It is licensed under the MIT license # UnitSystems Copyright (C) 2020 Michael Reed - -import Base: @pure, length, time - -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 = (: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,: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) +# _ _ _ +# | | | | | | +# ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ +# / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | +# | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | +# \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| +# +# https://github.com/chakravala +# https://crucialflow.com +# _ _ _ _ _ ___ ____ _ _ ____ ___ ____ _ _ ____ +# | | |\ | | | [__ \_/ [__ | |___ |\/| [__ +# |__| | \| | | ___] | ___] | |___ | | ___] + +import Base: @pure, length, time, angle + +const Systems = (:Metric,:SI2019,:CODATA,:Conventional,:MTS,:SI1976,:Mixed,:ESU2019,:EMU2019,:EMU,:ESU,:Gauss,:LorentzHeaviside,:Thomson,:Kennelly,:Planck,:PlanckGauss,:Stoney,:Hartree,:Rydberg,:Schrodinger,:Electronic,:Natural,:NaturalGauss,:QCD,:QCDGauss,:QCDoriginal,:Astronomical,:IAU☉,:IAUE,:IAUJ,:Hubble,:Cosmological,:CosmologicalQuantum,:SI2019Engineering,:MetricEngineering,:GravitationalSI2019, :GravitationalMetric,:British,:British2019,:Survey,:Survey2019,:English,:English2019,:FPS,:FPS2019,:International,:InternationalMean,:Nautical,:MPH,:KKH) +const Dimensionless = (:coupling,:finestructure,:electronunit,:protonunit,:protonelectron,:darkenergydensity) +const Constants = (:lightspeed,:planck,:planckreduced,:electronmass,:molarmass,:boltzmann,:permeability,:rationalization,:lorentz,:luminousefficacy,:gravity) #angle +const Physics = (:turn,:sphere,:atomicmass,:protonmass,:planckmass,:newton,:einstein,:einstein2,:hartree,:rydberg,:bohr,:bohrreduced,:electronradius,:avogadro,:universalgas,:stefan,:radiationdensity,:vacuumpermeability,:vacuumpermittivity,:coulomb,:ampere,:biotsavart,:elementarycharge,:faraday,:vacuumimpedance,:conductancequantum,:klitzing,:josephson,:magneticfluxquantum,:magneton) +const Derived = (:second,:minute,:hour,:day,:year,:gaussianyear,:siderealyear,:hyperfine,:hubble,:cosmological,:solarmass,:earthmass,:jupitermass,:lunarmass,:astronomicalunit,:lunardistance,:mile,:clarkemile,:nauticalmile,:parsec,:lightyear,:gallon,:litre,:standardgravity,:standardtemperature,:standardpressure,:inchmercury,:torr,:kilocalorie,:calorie,:meancalorie,:thermalunit,:tonsrefrigeration,:horsepower,:horsepowerwatt,:horsepowermetric,:electricalhorsepower,:boilerhorsepower) +const Kinematic = (:solidangle,:time,:length,:area,:volume,:wavenumber,:angularwavenumber,:fuelefficiency,:frequency,:angularfrequency,:frequencydrift,:speed,:acceleration,:jerk,:snap,:crackle,:pop,:volumeflow) #angle +const Mechanical = (:inertia,:mass,:massflow,:lineardensity,:areadensity,:density,:specificweight,:specificvolume,:force,:gforce,:stiffness,:pressure,:compressibility,:viscosity,:diffusivity,:rotationalinertia,:impulse,: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) @@ -19,213 +34,307 @@ const Convert = [Mechanics...,Electromagnetic...,Thermodynamic...,Molar...,Photo listext(x) = join(x,"`, `") +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) +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)}() + @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 + +dB(x) = 10log10(x) +Db(x) = exp10(0.1)^x # universe """ - Coupling{αG,α,μₑᵤ,μₚᵤ} + Coupling{αG,α,μₑᵤ,μₚᵤ,ΩΛ} -Specification of `Universe` with the dimensionless `Coupling` constants `coupling`, `finestructure`, `electronunit`, `protonunit`, and `protonelectron`. +Specification of `Universe` with the dimensionless `Coupling` constants `coupling`, `finestructure`, `electronunit`, `protonunit`, `protonelectron`, and `darkenergydensity`. Alterations to these values can be facilitated and quantified using parametric polymorphism. Due to the `Coupling` interoperability, the `MeasureSystems` package is made possible to support calculations with `Measurements` having error standard deviations. """ -struct Coupling{αG,α,μₑᵤ,μₚᵤ} end +struct Coupling{αG,α,μₑᵤ,μₚᵤ,ΩΛ} end +Coupling{αG,α,μₑᵤ,μₚᵤ}() where {αG,α,μₑᵤ,μₚᵤ} = Coupling(αG,α,μₑᵤ,μₚᵤ,ΩΛ) +Coupling(αG,α,μₑᵤ,μₚᵤ,ΩΛ) = Coupling{cache(αG),cache(α),cache(μₑᵤ),cache(μₚᵤ),cache(ΩΛ)}() @pure coupling(U::Coupling{αG}) where αG = measure(αG) @pure finestructure(U::Coupling{αG,α}) where {αG,α} = measure(α) @pure electronunit(U::Coupling{αG,α,μₑᵤ}) where {αG,α,μₑᵤ} = measure(μₑᵤ) @pure protonunit(U::Coupling{αG,α,μₑᵤ,μₚᵤ}) where {αG,α,μₑᵤ,μₚᵤ} = measure(μₚᵤ) @pure protonelectron(U::Coupling) = protonunit(U)/electronunit(U) -Base.display(U::Coupling) = println("Coupling{αG=$(coupling(U)),α=$(finestructure(U)),μₑᵤ=$(electronunit(U)),μₚᵤ=$(protonunit(U))}") +@pure darkenergydensity(U::Coupling{αG,α,μₑᵤ,μₚᵤ,ΩΛ}) where {αG,α,μₑᵤ,μₚᵤ,ΩΛ} = measure(ΩΛ) +Base.display(U::Coupling) = println("Coupling{αG = $(coupling(U)), α = $(finestructure(U)), μₑᵤ = $(electronunit(U)), μₚᵤ = $(protonunit(U)), ΩΛ = $(darkenergydensity(U))}") # unit systems """ - UnitSystem{kB,ħ,𝘤,μ₀,mₑ,λ,αL} + UnitSystem{kB, ħ, 𝘤, μ₀, mₑ, Mᵤ, (Kcd, θ, λ, αL, g₀, ...)} -Fundamental constants of physics are: `kB` Boltzmann's constant, `ħ` reduced Planck's constant, `𝘤` speed of light, `μ₀` vacuum permeability, `mₑ` electron rest mass, `λ` Gauss rationalization, and `αL` Lorentz's constant. +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. 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`, `universal`, `planck`, `planckreduced`, `lightspeed`, `planckmass`, `atomicmass`, `protonmass`, `electronmass`, `newton`, `einstein`, `permeability`, `permittivity`, `coulomb`, and -additional constants `molarmass`, `hyperfine`, `luminousefficacy`, `stefan`, `radiationdensity`, `ampere`, `lorentz`, `biotsavart`, `rationalization`, `impedance`, `charge`, `magneton`, `conductance`, `faraday`, `magneticflux`, `josephson`, `klitzing`, `hartree`, `rydberg`, `bohr`, and `bohrreduced`. +These constants induce derived values for `avogadro`, `boltzmann`, `universalgas`, `planck`, `planckreduced`, `lightspeed`, `planckmass`, `atomicmass`, `protonmass`, `electronmass`, `newton`, `einstein`, `vacuumpermeability`, `vacuumpermittivity`, `coulomb`, and +additional constants `molarmass`, `luminousefficacy`, `gravity`, `angle`, `turn`, `sphere`, `stefan`, `radiationdensity`, `ampere`, `lorentz`, `biotsavart`, `rationalization`, `vacuumimpedance`, `elementarycharge`, `magneton`, `conductancequantum`, `faraday`, `magneticfluxquantum`, `josephson`, `klitzing`, `hartree`, `rydberg`, `bohr`, `bohrreduced`. +Derived quantities are `$(listext(Derived))`. -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`). +Additional reference `UnitSystem` variants: `EMU`, `ESU`, `Gauss`, `LorentzHeaviside`, `SI2019`, `SI1976`, `CODATA`, `Conventional`, `International`, `InternationalMean`, `MetricEngineering`, `GravitationalMetric`, `Astronomical`, `Hubble`, `Cosmological`, `CosmologicalQuantum`, `IAU`, `IAUE`, `IAUJ`, `MTS`, `FPS`, `British`, `Survey`, `Nautical`, `MPH`, `KKH`, `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`). **Derived unit conversions:** -Mechanics: `$(listext(Kinematic))`, `$(listext(Mechanical))`; +Mechanics: `angle`, `$(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}() -@pure UnitSystem{k,ħ,𝘤,μ,m}() where {k,ħ,𝘤,μ,m} = UnitSystem{k,ħ,𝘤,μ,m,1}() +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) + 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) @pure planckreduced(::UnitSystem{k,ħ}) where {k,ħ} = measure(ħ) @pure lightspeed(::UnitSystem{k,ħ,𝘤}) where {k,ħ,𝘤} = measure(𝘤) @pure permeability(::UnitSystem{k,ħ,𝘤,μ}) where {k,ħ,𝘤,μ} = measure(μ) +@pure vacuumpermeability(U::UnitSystem) = permeability(U) @pure electronmass(::UnitSystem{k,ħ,𝘤,μ,m}) where {k,ħ,𝘤,μ,m} = measure(m) -@pure rationalization(::UnitSystem{k,ħ,𝘤,μ,m,λ}) where {k,ħ,𝘤,μ,m,λ} = measure(λ) -@pure lorentz(::UnitSystem{k,ħ,𝘤,μ,m,λ,α}) where {k,ħ,𝘤,μ,m,λ,α} = measure(α) +@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 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 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]) +@pure seven(::UnitSystem{k,ħ,𝘤,μ,m,M,e}) where {k,ħ,𝘤,μ,m,M,e} = measure(e[11]) +@pure eleven(::UnitSystem{k,ħ,𝘤,μ,m,M,e}) where {k,ħ,𝘤,μ,m,M,e} = measure(e[12]) +@pure nineteen(::UnitSystem{k,ħ,𝘤,μ,m,M,e}) where {k,ħ,𝘤,μ,m,M,e} = measure(e[13]) +@pure fourtythree(::UnitSystem{k,ħ,𝘤,μ,m,M,e}) where {k,ħ,𝘤,μ,m,M,e} = measure(e[14]) # ΔνCs:s⁻¹, c:m⋅s⁻¹, h:kg⋅m²⋅s⁻¹, kB:kg⋅m²⋅s⁻²⋅K⁻¹, NA:mol⁻¹, Kcd: cd⋅sr⋅s³⋅kg⁻¹⋅m⁻² -isrationalized(U::UnitSystem) = rationalization(U) ≠ 4π +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) + +normal(x) = x +@pure normal(x::Float64) = x +@pure normal(x::Int) = x +@pure normal(::UnitSystem{kB,ħ,𝘤,μ0,me,Mu,e}) where {kB,ħ,𝘤,μ0,me,Mu,e} = UnitSystem(normal(kB),normal(ħ),normal(𝘤),normal(μ0),normal(me),normal(Mu),normal(e[1]),normal(e[2]),normal(e[3]),normal(e[4]),normal(e[5]),e[6],normal(e[7]),normal(e[8]),normal(e[9]),normal(e[10]),normal(e[11]),normal(e[12]),normal(e[13]),normal(e[14])) + +@pure unitname(::UnitSystem) = "Unknown" +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(" A = $(angle(U))") + println(" λ = $(rationalization(U)≠4π ? rationalization(U) : "4π")") + println(" αL = $(lorentz(U))") + println(" g₀ = $(gravity(U))") +end -Base.display(U::UnitSystem) = println("UnitSystem{kB=$(boltzmann(U)),ħ=$(planckreduced(U)),𝘤=$(lightspeed(U)),μ₀=$(permeability(U)),mᵤ=$(electronmass(U)),λ=$(isrationalized(U) ? rationalization(U) : "4π"),αL=$(lorentz(U))}") +function (U::UnitSystem)(JK=1,Js=1,ms=1,Hm=1,kg=1) + kB = boltzmann(U)*JK + ħ = planckreduced(U)*Js + 𝘤 = lightspeed(U)*ms + μ₀ = vacuumpermeability(U)*Hm + mₑ = electronmass(U)*kg + Mᵤ = molarmass(U)#kg# + Kcd = luminousefficacy(U)# + A = angle(U) + λ = rationalization(U) + αL = lorentz(U) + g₀ = gravity(U) + C = universe(U) + τ = twopi(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) +end + +""" + AstronomicalSystem(U::UnitSystem) = EntropySystem(U,𝟏,𝟏,𝟏/newton(U)) + +Constructs new `UnitSystem` from `U` with `mass` rescaled by `newton` gravitational constant. An example of this type based on `Metric` is the `Astronomical` system. +""" +AstronomicalSystem(u) = EntropySystem(u,one(u),one(u),inv(newton(u))) + +""" + ElectricSystem(U::UnitSystem,Ω,V) = EntropySystem(U,𝟏,𝟏,V^2/Ω,𝟏,vacuumpermeability(U)/Ω) + +Constructs new `UnitSystem` from `U` with `mass` rescaled by `electricpotential` and `resistance`. In the `International` system, `Ωᵢₜ` and `Vᵢₜ` are used as definitions from the more recent United States results, while in `InternationalMean` an earlier estimate based on other nations was used. +""" +ElectricSystem(u,Ω,V) = EntropySystem(u,one(u),one(u),V*V/Ω,one(u),vacuumpermeability(u)/Ω) + +""" + GaussSystem(U::UnitSystem,μ0,λ,αL=𝟏,l=0.01,m=0.001,g0=gravity(U)) + +Constructs new `UnitSystem` from `U` rescaled for `CGS` with electromagnetic options. The first three options are to set the values for `vacuumpermeability`, `rationalization`, and `lorentz` constants. The following two parameters are scaling for `length` and `mass`, while the last is an option to change the `gravity` reference scale. + +Examples include `EMU`, `ESU`, `Gauss`, `LorentzHeaviside`, `Thomson`, and `Kennelly`. +""" +function GaussSystem(u,μ0,λ,αL=one(u),l=inv((two(u)*five(u))^2),m=inv((two(u)*five(u))^3),g0=gravity(u)) + EntropySystem(u,one(u),l,m,one(u),μ0,m==1/1000 ? one(u) : molarmass(u)/m,g0,m*(l*l),λ,αL) +end + +""" + EntropySystem(U::UnitSystem,t,l,m,θ=𝟏) + EntropySystem(U::UnitSystem,t,l,m,θ,μ0,Mu=molarmass(U)/m,g0=gravity(U)) + +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 `GravitationalSI2019`, `GravitationalMetric`, `MTS`, `IAU☉`, `IAUE`, `IAUJ`, `KKH`, `Hubble`, `Cosmological`, `CosmologicalQuantum`, `EMU2019`, `ESU2019`, `Mixed`, `Nautical`, `MPH`, `FFF`. +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. +""" +function EntropySystem(u,t,l,m,θ=one(u)); tt = t*t; e = m*l*l/tt + EntropySystem(u,t,l,m,θ,permeability(u)*tt/e,molarmass(u)/m,gravity(u),e) +end +function EntropySystem(u,t,l,m,θ,μ0,Mu=molarmass(u)/m,g0=gravity(u),e=m*l*l/(t*t),λ=one(u),αL=one(u)) + UnitSystem( + boltzmann(u)*θ/e/g0, + planckreduced(u)/t/e/g0, + lightspeed(u)*t/l, + μ0, + electronmass(u)/m, + Mu, + luminousefficacy(u)*e/t*g0, + angle(u),λ,αL,g0,universe(u),twopi(u),two(u),three(u),five(u),seven(u),eleven(u),nineteen(u),fourtythree(u)) +end -@pure universe(::UnitSystem) = Universe @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 solidangle(U::UnitSystem,S::UnitSystem) = unit(angle(U,S)^2) +@pure sphere(U::UnitSystem) = two(U)*turn(U)/angle(U)*unit(turn(U)/normal(turn(U))) @pure mass(U::UnitSystem,S::UnitSystem) = electronmass(U,S) -@pure electronmass(𝘩::Float64) = αinv^2*R∞*2𝘩/𝘤 -@pure electronmass(𝘩::Float64,C::Coupling) = inv(finestructure(C))^2*R∞*2𝘩/𝘤 +@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)) = 2π*planckreduced(U,C) -@pure newton(U::UnitSystem,C::Coupling=universe(U)) = lightspeed(U,C)*planckreduced(U,C)/planckmass(U,C)^2 -@pure charge(U::UnitSystem,C::Coupling=universe(U)) = sqrt(2planck(U)/(permeability(U)/finestructure(U))/(lightspeed(U)*rationalization(U)*lorentz(U)^2)) +@pure planck(U::UnitSystem,C::Coupling=universe(U)) = turn(U)*planckreduced(U,C) +@pure newton(U::UnitSystem,C::Coupling=universe(U)) = lightspeed(U,C)*planck(U,C)/normal(twopi(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) +for unit ∈ (:coupling,:finestructure,:electronunit,:protonunit,:protonelectron,:darkenergydensity) @eval @pure $unit(U::UnitSystem) = $unit(universe(U)) end -for unit ∈ (:boltzmann,:planckreduced,:lightspeed,:permeability,:electronmass,:molarmass) +for unit ∈ (:boltzmann,:planckreduced,:lightspeed,:vacuumpermeability,:permeability,:electronmass,:molarmass) @eval @pure $unit(U::UnitSystem,C::Coupling) = $unit(U) end -for unit ∈ Constants - @eval @pure $unit(U::UnitSystem,S::UnitSystem) = unit($unit(S)/$unit(U)) +for unit ∈ (Constants...,:angle,:vacuumpermeability) + @eval @pure $unit(U::UnitSystem,S::UnitSystem) = isquantity(U,S) ? evaldim($unit)(U,S) : unit($unit(S)/$unit(U)) end -for unit ∈ Convert +for unit ∈ (Convert...,:angle) @eval begin - @pure @inline $unit(v::Real,U::UnitSystem) = $unit(v,U,Metric) - @pure @inline $unit(v::Real,U::UnitSystem,S::UnitSystem) = (u=$unit(U,S);isone(u) ? v : v/u) + @pure @inline $unit(v::Real,U::UnitSystem) = isquantity(U) ? evaldim($unit)(v,U) : $unit(v,U,Metric) + @pure @inline $unit(v::Real,U::UnitSystem,S::UnitSystem) = isquantity(U,S) ? evaldim($unit)(v,U,S) : (u=$unit(U,S);isone(u) ? v : v/u) @pure @inline $unit(v::Real,U::UnitSystem{kB,ħ,𝘤,μ₀,mₑ},S::UnitSystem{kB,ħ,𝘤,μ₀,mₑ}) where {kB,ħ,𝘤,μ₀,mₑ} = v - @pure @inline $unit(U::UnitSystem{kB,ħ,𝘤,μ₀,mₑ},S::UnitSystem{kB,ħ,𝘤,μ₀,mₑ}) where {kB,ħ,𝘤,μ₀,mₑ} = 1 end - if unit ∉ (Constants...,:permittivity,:charge,:magneticflux,:impedance,:conductance) - @eval @pure @inline $unit(U::UnitSystem) = $unit(U,Metric) + if unit ∉ (Constants...,:angle,:permeability) + @eval @pure @inline $unit(U::UnitSystem) = isquantity(U) ? evaldim($unit)(U) : $unit(Natural,U) end end -for unit ∈ (Systems...,Constants...,Physics...,Convert...) +for unit ∈ (Systems...,Dimensionless...,Constants...,Physics...,Derived...,Convert...) @eval export $unit end -function (U::UnitSystem)(JK=1,Js=1,ms=1,Hm=1,kg=1) - kB = boltzmann(U)*JK - ħ = planckreduced(U)*Js - 𝘤 = lightspeed(U)*ms - μ₀ = permeability(U)*Hm - mₑ = electronmass(U)*kg - λ = rationalization(U) - αL = lorentz(U) - UnitSystem{kB,ħ,𝘤,μ₀,mₑ,λ,isone(αL) ? αL : αL/ms}() -end +# fundamental constants, αinv = (34259-1/4366.8123)/250 # 137.036 exactly? + +const g₀,atm,Tₛ = Constant(9.80665),Constant(101325.0),Constant(288.16) +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 NA,kB,𝘩 = Constant(6.02214076e23),Constant(1.380649e-23),Constant(6.62607015e-34) +const 𝘤,𝘦 = Constant(299792458.),Constant(1.602176634e-19) +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) +const k,H0,ΩΛ = Constant(0.01720209895),Constant(67.66),Constant(0.6889) +const aⱼ,au,LD = Constant(365.25),Constant(149597870.7e3),Constant(384402e3) +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") + +const lbm,lbmUS,rankine,kelvin = g₀/ft,g₀/ftUS,°R,K +const ħ1990,ħ2014 = planckreduced(Conventional),planckreduced(CODATA) +const mₑ1990,mₑ2014 = electronmass(Conventional),electronmass(CODATA) +const δμ₀,ly,mₛ,GG = μ₀-4π*1e-7,aⱼ*𝘤*DAY,GM☉/G,G +const units, temp = UnitSystem, temperature # common conversion factors -const g₀,ft,ftUS = 9.80665,0.3048,1200/3937; const lbm,lbmUS = g₀/ft,g₀/ftUS -const slug,slugUS,rankine,kelvin,atm = 0.45359237lbm,0.45359237lbmUS,5/9,9/5,101325.0 const kcalₜₕ,kcal₄,kcal₁₀,kcal₂₀,kcalₘ,kcalᵢₜ = 4184,4204,4185.5,4182,4190,4186.8 const calₜₕ,cal₄,cal₁₀,cal₂₀,calₘ,calᵢₜ = (kcalₜₕ,kcal₄,kcal₁₀,kcal₂₀,kcalₘ,kcalᵢₜ)./1e3 -const kcal = kcalₜₕ; const cal = kcal/1000 # calₜₕ thermal calorie - -# fundamental constants, αinv = (34259-1/4366.8123)/250 # 137.036 exactly? - -const ΔνCs,Kcd,mP = 9192631770.0,683*555.016/555,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 mₑ,μ₀ = electronmass(𝘩),2𝘩/𝘤/αinv/𝘦^2 # ≈ 4π*(1e-7+5.5e-17), exact charge -const ħ,δμ₀,μₚₑ,Rᵤ,αL,αG = 𝘩/2π,μ₀-4π*1e-7,μₚᵤ/μₑᵤ,NA*kB,0.01/𝘤,(mₑ/mP)^2 -const RK1990,RK2014,KJ1990,KJ2014 = 25812.807,25812.8074555,4.835979e14,4.835978525e14 -const ħ1990,ħ2014 = 2/RK1990/KJ1990^2/π,2/RK2014/KJ2014^2/π -const mₑ1990,mₑ2014 = electronmass(2π*ħ1990),electronmass(2π*ħ2014) - -# engineering units # Thomson: αL = 1/2 - -const Universe = Coupling{αG,1/αinv,μₑᵤ,μₚᵤ}() -const Gauss = UnitSystem{1e10*Rᵤ*mₑ/μₑᵤ,1e7*ħ,100𝘤,1,1000mₑ,4π,0.01/𝘤}() -const LorentzHeaviside = UnitSystem{1e10*Rᵤ*mₑ/μₑᵤ,1e7*ħ,100𝘤,1,1000mₑ,1,0.01/𝘤}() -const Thomson = UnitSystem{1e10*Rᵤ*mₑ/μₑᵤ,1e7*ħ,100𝘤,1,1000mₑ,4π,1/2}() -const Kennelly = UnitSystem{Rᵤ*mₑ/μₑᵤ/0.001,ħ,𝘤,1e-7,mₑ,4π}() # ? -const ESU = UnitSystem{1e10*Rᵤ*mₑ/μₑᵤ,1e7*ħ,100𝘤,(100𝘤)^-2,1000mₑ,4π}() -const ESU2019 = UnitSystem{1e7*kB,1e7*ħ,100𝘤,1e3*μ₀/𝘤^2,1000mₑ}() -const EMU = UnitSystem{1e10*Rᵤ*mₑ/μₑᵤ,1e7*ħ,100𝘤,1,1000mₑ,4π}() -const EMU2019 = UnitSystem{1e7*kB,1e7*ħ,100𝘤,1e7*μ₀,1000mₑ}() -const MTS = UnitSystem{1e6*Rᵤ*mₑ/μₑᵤ,1000ħ,𝘤,4π/1e4,mₑ/1000}() -const Mixed = UnitSystem{Rᵤ*mₑ/μₑᵤ/0.001,ħ,𝘤,μ₀,mₑ}() -const Metric = UnitSystem{Rᵤ*mₑ/μₑᵤ/0.001,ħ,𝘤,4π*1e-7,mₑ}() -const SI1976 = UnitSystem{8.31432mₑ/μₑᵤ/0.001,ħ,𝘤,4π*1e-7,mₑ}() -const SI2019 = UnitSystem{kB,ħ,𝘤,μ₀,mₑ}() -const CODATA = UnitSystem{Rᵤ*mₑ2014/μₑᵤ/0.001,ħ2014,𝘤,2RK2014/𝘤/αinv,mₑ2014}() -const Conventional = UnitSystem{Rᵤ*mₑ1990/μₑᵤ/0.001,ħ1990,𝘤,2RK1990/𝘤/αinv,mₑ1990}() -const English = UnitSystem{kB*rankine/slug/ft^2,ħ/slug/ft^2,𝘤/ft,4π,mₑ/slug}() -const EnglishUS = UnitSystem{1000Rᵤ*mₑ/μₑᵤ*rankine/slug/ftUS^2,ħ/slug/ftUS^2,𝘤/ftUS,4π,mₑ/slug}() - -# astronomical units - -const GMsun,GMearth,GMjupiter = 1.32712442099e20,398600441.8e6,1.26686534e17 -const au,LD,day = 149597870.7e3,384402e3,60^2*24 -const pc,ly,GG = au*648000/π,365.25𝘤*day,𝘤*ħ/mP^2 -const mₛ = GMsun/GG; const Jₛ = mₛ*au^2/day^2; export mₛ,Jₛ,au,day -const IAU = UnitSystem{Rᵤ*mₑ/μₑᵤ/0.001/Jₛ,ħ/day/Jₛ,day*𝘤/au,4π*1e-7*day^2/Jₛ,mₑ/mₛ}() - -# aliased & humorous units - -const mf = mass(90/lbm,Metric,English); const Jf = mf*(201.168/14day)^2 -const FFF = UnitSystem{1000Rᵤ*mₑ/μₑᵤ*rankine/Jf,ħ/14day/Jf,14day*𝘤/201.168,0,mₑ/mf}() -const units, US, SI, MKS, temp = UnitSystem, UnitSystem, SI2019, Metric, temperature -const CGS, CGS2019, CGSm, CGSe, HLU = Gauss, EMU2019, EMU, ESU, LorentzHeaviside - -# natural units - -const Planck = UnitSystem{1,1,1,1,√(4π*αG)}() -const PlanckGauss = UnitSystem{1,1,1,4π,√αG}() -const Stoney = UnitSystem{1,αinv,1,4π,√(αG*αinv)}() -const Hartree = UnitSystem{1,1,αinv,4π/αinv^2,1}() -const Rydberg = UnitSystem{1,1,2αinv,π/αinv^2,1/2}() -const Schrodinger = UnitSystem{1,1,αinv,4π/αinv^2,√(αG*αinv)}() -const Electronic = UnitSystem{1,αinv,1,4π,1}() -const Natural = UnitSystem{1,1,1,1,1}() -const NaturalGauss = UnitSystem{1,1,1,4π,1}() -const QCD = UnitSystem{1,1,1,1,1/μₚₑ}() -const QCDGauss = UnitSystem{1,1,1,4π,1/μₚₑ}() -const QCDoriginal = UnitSystem{1,1,1,4π/αinv,1/μₚₑ}() # physical constants -@pure electronmass(U::typeof(Planck),C::Coupling) = sqrt(4π*coupling(C)) +@pure electronmass(U::typeof(Planck),C::Coupling) = sqrt(sphere(U)*coupling(C)) @pure electronmass(U::typeof(PlanckGauss),C::Coupling) = sqrt(coupling(C)) @pure electronmass(U::UnitSystem{kB,ħ,𝘤,μ₀,√(αG*αinv)},C::Coupling) where {kB,ħ,𝘤,μ₀} = sqrt(coupling(C)/finestructure(C)) @pure electronmass(U::UnitSystem{kB,ħ,𝘤,μ₀,1/μₚₑ},C::Coupling) where {kB,ħ,𝘤,μ₀} = 1/protonelectron(C) -@pure permeability(U::UnitSystem{kB,ħ,𝘤,4π/αinv^2},C::Coupling) where {kB,ħ,𝘤} = 4π*finestructure(C)^2 -@pure permeability(U::UnitSystem{kB,ħ,𝘤,π/αinv^2},C::Coupling) where {kB,ħ,𝘤} = π*finestructure(C)^2 -@pure lightspeed(U::UnitSystem{kB,ħ,αinv},C::Coupling) where {kB,ħ} = 1/finestructure(C) -@pure lightspeed(U::UnitSystem{kB,ħ,2αinv},C::Coupling) where {kB,ħ} = 2/finestructure(C) -@pure planckreduced(U::UnitSystem{kB,αinv},C::Coupling) where kB = 1/finestructure(C) +@pure vacuumpermeability(U::UnitSystem{kB,ħ,𝘤,4π/αinv^2},C::Coupling) where {kB,ħ,𝘤} = sphere(U)*finestructure(C)^2 +@pure vacuumpermeability(U::UnitSystem{kB,ħ,𝘤,π/αinv^2},C::Coupling) where {kB,ħ,𝘤} = sphere(U)/two(U)^2*finestructure(C)^2 +@pure lightspeed(U::UnitSystem{kB,ħ,αinv},C::Coupling) where {kB,ħ} = inv(finestructure(C)) +@pure lightspeed(U::UnitSystem{kB,ħ,2αinv},C::Coupling) where {kB,ħ} = two(U)/finestructure(C) +@pure planckreduced(U::UnitSystem{kB,αinv},C::Coupling) where kB = inv(finestructure(C)) @pure electronmass(U::UnitSystem{kB,ħ,𝘤,μ₀,mₑ},C::Coupling) where {kB,ħ,μ₀} = electronmass(planck(U),C) -@pure electronmass(U::UnitSystem{kB,ħ,100𝘤,μ₀,1000mₑ},C::Coupling) where {kB,ħ,μ₀} = 1000electronmass(SI,C) -@pure electronmass(U::UnitSystem{kB,ħ,𝘤,μ₀,mₑ/1000},C::Coupling) where {kB,ħ,μ₀} = electronmass(SI,C)/1000 -@pure electronmass(U::UnitSystem{kB,ħ,𝘤,μ₀,mₑ2014},C::Coupling) where {kB,ħ,μ₀} = electronmass(planck(U),C) -@pure electronmass(U::UnitSystem{kB,ħ,𝘤,μ₀,mₑ1990},C::Coupling) where {kB,ħ,μ₀} = electronmass(planck(U),C) +@pure electronmass(U::UnitSystem{kB,ħ,100𝘤,μ₀,1000mₑ},C::Coupling) where {kB,ħ,μ₀} = electronmass(SI,C)*(two(U)*five(U))^3 +@pure electronmass(U::UnitSystem{kB,ħ,𝘤,μ₀,mₑ/1000},C::Coupling) where {kB,ħ,μ₀} = electronmass(SI,C)/(two(U)*five(U))^3 +@pure electronmass(U::UnitSystem{kB,ħ,𝘤,μ₀,electronmass(CODATA)},C::Coupling) where {kB,ħ,μ₀} = electronmass(planck(U),C) +@pure electronmass(U::UnitSystem{kB,ħ,𝘤,μ₀,electronmass(Conventional)},C::Coupling) where {kB,ħ,μ₀} = electronmass(planck(U),C) @pure electronmass(U::UnitSystem{kB,ħ,𝘤/ftUS,μ₀,mₑ/slug},C::Coupling) where {kB,ħ,μ₀} = electronmass(SI,C)/slug -@pure permeability(U::UnitSystem{kB,ħ,𝘤,μ₀},C::Coupling) where {kB,ħ,𝘤} = finestructure(C)*2𝘩/𝘤/𝘦^2 -@pure permeability(U::typeof(ESU2019),C::Coupling) = 1e3*permeability(SI,C)/𝘤^2 -@pure permeability(U::typeof(EMU2019),C::Coupling) = 1e7*permeability(SI,C) -@pure permeability(U::typeof(CODATA),C::Coupling) = 2RK2014*finestructure(C)/𝘤 -@pure permeability(U::typeof(Conventional),C::Coupling) = 2RK1990*finestructure(C)/𝘤 - -@pure molarmass(U::UnitSystem{1}) = 1 -@pure molarmass(U::UnitSystem{kB},C::Coupling=universe(U)) = NA*electronmass(U,C)/electronunit(C) -@pure molarmass(U::UnitSystem{1e7*kB},C::Coupling=universe(U)) = 1000molarmass(SI2019,C) -@pure molarmass(U::UnitSystem{1e3*kB},C::Coupling=universe(U)) = molarmass(SI2019,C)/1000 -@pure molarmass(U::UnitSystem{kB}) where kB = molarmass(CGS)/1000 -@pure molarmass(U::UnitSystem{boltzmann(MTS)}) = molarmass(CGS)/1e6 -@pure molarmass(U::UnitSystem{boltzmann(CGS)}) = molarmass(Natural) -@pure molarmass(U::UnitSystem{boltzmann(FFF)}) = molarmass(Natural) -@pure molarmass(U::UnitSystem{boltzmann(English)},C::Coupling=universe(U)) = 1000molarmass(SI2019,C) -@pure molarmass(U::UnitSystem{boltzmann(EnglishUS)}) = molarmass(Natural) -@pure molarmass(U::UnitSystem{boltzmann(IAU)}) = 1/1000mₛ - -@pure luminousefficacy(U::UnitSystem{1}) = 1 -@pure luminousefficacy(U::UnitSystem) = power(Kcd,SI2019,U) +@pure vacuumpermeability(U::UnitSystem{kB,ħ,𝘤,μ₀},C::Coupling) where {kB,ħ,𝘤} = finestructure(C)*2𝘩/𝘤/𝘦^2 +@pure vacuumpermeability(U::typeof(ESU2019),C::Coupling) = 1e3*vacuumpermeability(SI,C)/𝘤^2 +@pure vacuumpermeability(U::typeof(EMU2019),C::Coupling) = 1e7*vacuumpermeability(SI,C) +@pure vacuumpermeability(U::typeof(CODATA),C::Coupling) = 2RK2014*finestructure(C)/𝘤 +@pure vacuumpermeability(U::typeof(Conventional),C::Coupling) = 2RK1990*finestructure(C)/𝘤 + +convertext(unit,fun) = """ +```Julia +$unit(U::UnitSystem,S::UnitSystem) = $fun +$unit(v::Real,U::UnitSystem,S::UnitSystem) = v/$unit(U,S) +``` +""" include("kinematic.jl") include("electromagnetic.jl") @@ -233,4 +342,7 @@ include("thermodynamic.jl") include("physics.jl") include("systems.jl") +const RK = klitzing(SI2019) # +const KJ = josephson(SI2019) # + end # module diff --git a/src/constant.jl b/src/constant.jl new file mode 100644 index 0000000..78e1c24 --- /dev/null +++ b/src/constant.jl @@ -0,0 +1,63 @@ + +# This file is part of UnitSystems.jl +# It is licensed under the MIT license +# UnitSystems Copyright (C) 2022 Michael Reed +# _ _ _ +# | | | | | | +# ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ +# / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | +# | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | +# \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| +# +# https://github.com/chakravala +# https://crucialflow.com + +export Constant, constant + +# constant + +struct Constant{D} <: Real + @pure Constant{D}() where D = new{D}() +end + +@pure param(::Constant{D}) where D = D +Base.float(x::Constant) = float(constant(x)) +Base.convert(::Type{Float64},c::Constant) = float(c) +dB(x::Constant{D}) where D = Constant{dB(D)}() +Base.:+(a::Constant,b::Constant) = Constant(constant(a)+constant(b)) +Base.:-(a::Constant,b::Constant) = Constant(constant(a)-constant(b)) +Base.:+(a::Constant{D},::Constant{D}) where D = 𝟐*a +Base.:-(a::Constant{D},::Constant{D}) where D = Constant(0) +Base.:+(a::Number,b::Constant) = a+constant(b) +Base.:+(a::Constant,b::Number) = constant(a)+b +Base.:-(a::Number,b::Constant) = a-constant(b) +Base.:-(a::Constant,b::Number) = constant(a)-b +Base.:*(a::Real,b::Constant) = a*constant(b) +Base.:*(a::Constant,b::Real) = constant(a)*b +Base.:*(a::Constant{A},b::Constant{B}) where {A,B} = Constant{A*B}() +Base.:/(a::Constant{A},b::Constant{B}) where {A,B} = Constant{A/B}() +Base.:/(a::Number,b::Constant) = a*inv(b) +Base.:/(a::Constant,b::Number) = a*inv(b) +Base.inv(a::Constant{D}) where D = Constant{inv(D)}() +Base.sqrt(a::Constant{D}) where D = Constant{sqrt(D)}() +Base.log(x::Constant{D}) where D = Constant{log(D)}() +Base.log2(x::Constant{D}) where D = Constant{log2(D)}() +Base.log10(x::Constant{D}) where D = Constant{log10(D)}() +Base.log(b::Number,x::Constant{D}) where D = Constant{log(b,D)}() +Base.exp(x::Constant{D}) where D = Constant{exp(D)}() +Base.exp2(x::Constant{D}) where D = Constant{exp2(D)}() +Base.exp10(x::Constant{D}) where D = Constant{exp10(D)}() +Base.:^(a::Number,b::Constant{D}) where D = Constant{a^D}() +Base.:^(a::Constant{D},b::Number) where D = Constant{D^b}() +Base.:^(a::Constant{D},b::Integer) where D = Constant{D^b}() +Base.:^(a::Constant{D},b::Rational{Int}) where D = Constant{D^b}() + +Base.isone(x::Constant{D}) where D = isone(D) +Base.iszero(x::Constant{D}) where D = iszero(D) + +Base.:(==)(a::Real,b::Constant) = a == constant(b) +Base.:(==)(a::Constant,b::Real) = constant(a) == b +Base.:(==)(a::Constant,b::Constant) = constant(a) == constant(b) +Base.isapprox(a::Real,b::Constant) = isapprox(a,constant(b)) +Base.isapprox(a::Constant,b::Real) = isapprox(constant(a),b) +Base.isapprox(a::Constant,b::Constant) = isapprox(constant(a),constant(b)) diff --git a/src/electromagnetic.jl b/src/electromagnetic.jl index 0a36e3d..0db855f 100644 --- a/src/electromagnetic.jl +++ b/src/electromagnetic.jl @@ -1,746 +1,73 @@ -# This file is part of UnitSystems.jl. It is licensed under the MIT license +# This file is part of UnitSystems.jl +# It is licensed under the MIT license # UnitSystems Copyright (C) 2020 Michael Reed +# _ _ _ +# | | | | | | +# ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ +# / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | +# | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | +# \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| +# +# https://github.com/chakravala +# https://crucialflow.com + +@pure charge(U::UnitSystem,S::UnitSystem) = unit(sqrt((turn(S)/turn(U))*(planckreduced(S)*vacuumpermeability(U)*lightspeed(U)*rationalization(U)*lorentz(U)^2)/(planckreduced(U)*vacuumpermeability(S)*lightspeed(S)*rationalization(S)*lorentz(S)^2))) -""" -$(convertext(:charge,"sqrt(planck(U,S)*current(U,S)/electricpotential(U,S))")) - -Electric `charge` quantization (C, A⋅s), unit conversion factor. - -```Julia -julia> charge(EMU,Metric) # C⋅abC⁻¹ -$(charge(EMU,Metric)) - -julia> charge(EMU,ESU) # stC⋅abC⁻¹ -$(charge(EMU,ESU)) - -julia> charge(ESU,Metric) # C⋅stC⁻¹ -$(charge(ESU,Metric)) - -julia> charge(Metric,SI2019) # C⋅C⁻¹ -$(charge(Metric,SI2019)) - -julia> charge(Hartree,SI2019) # C⋅𝘦⁻¹ -$(charge(Hartree,SI2019)) -``` -""" -@pure charge(U::UnitSystem,S::UnitSystem) = unit(sqrt((planckreduced(S)*permeability(U)*lightspeed(U)*rationalization(U)*lorentz(U)^2)/(planckreduced(U)*permeability(S)*lightspeed(S)*rationalization(S)*lorentz(S)^2))) - -""" -$(convertext(:current,"charge(U,S)/time(U,S)")) - -Flow of electric `charge` per `time` or `current` (A, C⋅s⁻¹), unit conversion factor. - -```Julia -julia> current(EMU,Metric) # A⋅Bi⁻¹ -$(current(EMU,Metric)) - -julia> current(EMU,ESU) # statA⋅Bi⁻¹ -$(current(EMU,ESU)) - -julia> current(ESU,Metric) # A⋅statA⁻¹ -$(current(ESU,Metric)) - -julia> current(Metric,SI2019) # A⋅A⁻¹ -$(current(Metric,SI2019)) -``` -""" @pure current(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/time(U,S)) -""" -$(convertext(:electricpotential,"energy(U,S)/charge(U,S)")) - -Voltage or `electricpotential` or `energy` per `charge` (V, J⋅C⁻¹), unit conversion factor. - -```Julia -julia> electricpotential(EMU,Metric) # V⋅abV⁻¹ -$(electricpotential(EMU,Metric)) - -julia> electricpotential(EMU,ESU) # statV⋅abV⁻¹ -$(electricpotential(EMU,ESU)) - -julia> electricpotential(ESU,Metric) # V⋅statV⁻¹ -$(electricpotential(ESU,Metric)) - -julia> electricpotential(Metric,SI2019) # V⋅V⁻¹ -$(electricpotential(Metric,SI2019)) -``` -""" @pure electricpotential(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)/charge(U,S)) const voltage = electricpotential - -""" -$(convertext(:capacitance,"charge(U,S)/electricpotential(U,S)")) - -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⋅cm⁻¹ -$(capacitance(ESU,Metric)) - -julia> capactiance(Metric,SI2019) # F⋅F⁻¹ -$(capacitance(Metric,SI2019)) -``` -""" @pure capacitance(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/electricpotential(U,S)) - -""" -$(convertext(:resistance,"electricpotential(U,S)/current(U,S)")) - -Electrical `resistance` or `electricpotential` per `current` (Ω, S⁻¹, V⋅A⁻¹), unit conversion factor. - -```Julia -julia> resistance(EMU,Metric) # Ω⋅abΩ⁻¹ -$(resistance(EMU,Metric)) - -julia> resistance(ESU,Metric) # Ω⋅statΩ⁻¹ -$(resistance(ESU,Metric)) - -julia> resistance(Metric,SI2019) # Ω⋅Ω⁻¹ -$(resistance(Metric,SI2019)) -``` -""" @pure resistance(U::UnitSystem,S::UnitSystem) = unit(electricpotential(U,S)/current(U,S)) - -""" -$(convertext(:conductance,"current(U,S)/electricpotential(U,S)")) - -Electrical `conductance` or `current` per `electricpotential` (S, Ω⁻¹, A⋅V⁻¹), unit conversion factor. - -```Julia -julia> conductance(EMU,Metric) # S⋅abS⁻¹ -$(conductance(EMU,Metric)) - -julia> conductance(ESU,Metric) # S⋅statS⁻¹ -$(conductance(ESU,Metric)) - -julia> conductance(Metric,SI2019) # S⋅S⁻¹ -$(conductance(Metric,SI2019)) -``` -""" @pure conductance(U::UnitSystem,S::UnitSystem) = unit(current(U,S)/electricpotential(U,S)) - -""" -$(convertext(:magneticflux,"energy(U,S)/lorentz(U,S)/current(U,S)")) - -Surface `magneticflux` or `energy` per `current` (Wb, J⋅A⁻¹, V⋅s), unit conversion factor. - -```Julia -julia> magneticflux(EMU,Metric) # Wb⋅Mx⁻¹ -$(magneticflux(EMU,Metric)) - -julia> magneticflux(ESU,Metric) # Wb⋅statWb⁻¹ -$(magneticflux(ESU,Metric)) - -julia> magneticflux(Metric,SI2019) # Wb⋅Wb⁻¹ -$(magneticflux(Metric,SI2019)) -``` -""" @pure magneticflux(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)/lorentz(U,S)/current(U,S)) - -""" -$(convertext(:magneticfluxdensity,"mass(U,S)/lorentz(U,S)/current(U,S)/time(U,S)^2")) - -Magnetic induction or surface `magneticfluxdensity` (T, Wb⋅m⁻²), unit conversion factor. - -```Julia -julia> magneticfluxdensity(EMU,Metric) # T⋅G⁻¹ -$(magneticfluxdensity(EMU,Metric)) - -julia> magneticfluxdensity(EMU,ESU) # statT⋅G⁻¹ -$(magneticfluxdensity(EMU,ESU)) - -julia> magneticfluxdensity(Metric,SI2019) # T⋅T⁻¹ -$(magneticfluxdensity(Metric,SI2019)) -``` -""" -@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)")) - -Electro-`magneticflux` per `current` or `inductance` (H, Ω⋅s, Wb⋅A⁻¹), unit conversion factor. - -```Julia -julia> inductance(EMU,Metric) # H⋅abH⁻¹ -$(inductance(EMU,Metric)) - -julia> inductance(ESU,Metric) # H⋅statH⁻¹ -$(inductance(ESU,Metric)) - -julia> inductance(Metric,SI2019) # H⋅H⁻¹ -$(inductance(Metric,SI2019)) -``` -""" -@pure inductance(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)*area(U,S)/charge(U,S)^2) +@pure magneticfluxdensity(U::UnitSystem,S::UnitSystem) = unit(magneticflux(U,S)/area(U,S)) +@pure inductance(U::UnitSystem,S::UnitSystem) = unit(magneticflux(U,S)/current(U,S)*lorentz(U,S)) # electromagnetics -""" -$(convertext(:electricfluxdensity,"charge(U,S)*rationalization(U,S)/area(U,S)")) - -Electric field displacement or surface `electricfluxdensity` (C⋅m⁻²), unit conversion factor. - -```Julia -julia> electricfluxdensity(EMU,Metric) # C⋅cm²⋅abC⁻¹⋅m⁻² -$(electricfluxdensity(EMU,Metric)) - -julia> electricfluxdensity(ESU,Metric) # C⋅cm²⋅statC⁻¹⋅m⁼² -$(electricfluxdensity(ESU,Metric)) - -julia> electricfluxdensity(Metric,SI2019) # C⋅C⁻¹ -$(electricfluxdensity(Metric,SI2019)) -``` -""" @pure electricfluxdensity(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)*rationalization(U,S)/area(U,S)) - -""" -$(convertext(:chargedensity,"charge(U,S)/volume(U,S)")) - -Volume `chargedensity` or `charge` per `volume` (C⋅m⁻³), unit conversion factor. - -```Julia -julia> chargedensity(EMU,Metric) # C⋅cm³⋅abC⁻¹⋅m⁻³ -$(chargedensity(EMU,Metric)) - -julia> chargedensity(ESU,Metric) # C⋅cm³⋅statC⁻¹⋅m⁼³ -$(chargedensity(ESU,Metric)) - -julia> chargedensity(Metric,SI2019) # C⋅C⁻¹ -$(chargedensity(Metric,SI2019)) -``` -""" @pure chargedensity(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/volume(U,S)) - -""" -$(convertext(:currentdensity,"current(U,S)/area(U,S)")) - -Cross-section `currentdensity` or `current` per `area` (A⋅m⁻²), unit conversion factor. - -```Julia -julia> currentdensity(EMU,Metric) # A⋅cm²⋅Bi⁻¹⋅m⁻² -$(currentdensity(EMU,Metric)) - -julia> currentdensity(ESU,Metric) # A⋅cm²⋅statA⁻¹⋅m⁼² -$(currentdensity(ESU,Metric)) - -julia> currentdensity(Metric,SI2019) # A⋅A⁻¹ -$(currentdensity(Metric,SI2019)) -``` -""" @pure currentdensity(U::UnitSystem,S::UnitSystem) = unit(current(U,S)/area(U,S)) - -""" -$(convertext(:conductivity,"conductance(U,S)/length(U,S)")) - -Reciprocal `resistivity` or electrical `conductivity` (S⋅m⁻¹), unit conversion factor. - -```Julia -julia> conductivity(EMU,Metric) # S⋅cm⋅abS⁻¹⋅m⁻¹ -$(conductivity(EMU,Metric)) - -julia> conductivity(ESU,Metric) # S⋅cm⋅statS⁻¹⋅m⁼¹ -$(conductivity(ESU,Metric)) - -julia> conductivity(Metric,SI2019) # S⋅S⁻¹ -$(conductivity(Metric,SI2019)) -``` -""" @pure conductivity(U::UnitSystem,S::UnitSystem) = unit(conductance(U,S)/length(U,S)) - -""" -$(convertext(:permittivity,"capacitance(U,S)*rationalization(U,S)/length(U,S)")) - -Absolute `permittivity` or `capacitance` per `length` (F⋅m⁻¹), unit conversion factor. - -```Julia -julia> permittivity(EMU,Metric) # F⋅cm⋅abF⁻¹⋅m⁻¹ -$(permittivity(EMU,Metric)) - -julia> permittivity(ESU,Metric) # F⋅m⁼¹ -$(permittivity(ESU,Metric)) - -julia> permittivity(Metric,SI2019) # F⋅F⁻¹ -$(permittivity(Metric,SI2019)) -``` -""" @pure permittivity(U::UnitSystem,S::UnitSystem) = unit(capacitance(U,S)*rationalization(U,S)/length(U,S)) - -@doc """ -$(convertext(:permeability,"permeability(S)/permeability(U)")) - -Magnetic `permeability` or `inductance` per `length` (H⋅m⁻¹), unit conversion factor. - -```Julia -julia> permeability(EMU,Metric) # H⋅cm⋅abH⁻¹⋅m⁻¹ -$(permeability(EMU,Metric)) - -julia> permeability(ESU,Metric) # H⋅cm⋅statH⁻¹⋅m⁼¹ -$(permeability(ESU,Metric)) - -julia> permeability(Metric,SI2019) # H⋅H⁻¹ -$(permeability(Metric,SI2019)) -``` -""" permeability(::UnitSystem,::UnitSystem) - -""" -$(convertext(:electricfield,"electricpotential(U,S)/length(U,S)")) - -The `electricpotential` per `length` or `electricfield` (V⋅m⁻¹), unit conversion factor. - -```Julia -julia> electricfield(EMU,Metric) # V⋅cm⋅abV⁻¹⋅m⁻¹ -$(electricfield(EMU,Metric)) - -julia> electricfield(EMU,ESU) # statV⋅abV⁻¹ -$(electricfield(EMU,ESU)) - -julia> electricfield(ESU,Metric) # V⋅cm⋅statV⁻¹⋅m⁻¹ -$(electricfield(ESU,Metric)) - -julia> electricfield(Metric,SI2019) # V⋅V⁻¹ -$(electricfield(Metric,SI2019)) -``` -""" @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)")) - -Magnetization or `magneticfield` or `current` per `length` (A⋅m⁻¹), unit conversion factor. - -```Julia -julia> magneticfield(EMU,Metric) # A⋅m⁻¹⋅Oe⁻¹ -$(magneticfield(EMU,Metric)) - -julia> magneticfield(ESU,Metric) # A⋅cm⋅m⁻¹⋅statA⁻¹ -$(magneticfield(ESU,Metric)) - -julia> magneticfield(Metric,SI2019) # A⋅A⁻¹ -$(magneticfield(Metric,SI2019)) -``` -""" @pure magneticfield(U::UnitSystem,S::UnitSystem) = unit(current(U,S)*rationalization(U,S)*lorentz(U,S)/length(U,S)) - -""" -$(convertext(:exposure,"charge(U,S)/mass(U,S)")) - -Ionizing radiation `exposure` or `charge` per `mass` (C⋅kg⁻¹), unit conversion factor. - -```Julia -julia> exposure(EMU,Metric) # C⋅g⋅abC⁻¹⋅kg -$(exposure(EMU,Metric)) - -julia> exposure(EMU,ESU) # statC⋅abC⁻¹ -$(exposure(EMU,ESU)) - -julia> expsure(ESU,Metric) # C⋅g⋅statC⁻¹⋅kg -$(exposure(ESU,Metric)) - -julia> exposure(Metric,SI2019) # C⋅C⁻¹ -$(exposure(Metric,SI2019)) -``` -""" @pure exposure(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/mass(U,S)) - -""" -$(convertext(:resistivity,"resistance(U,S)*length(U,S)")) - -Electrical `resistivity` or `resistance` by `length` (Ω⋅m), unit conversion factor. - -```Julia -julia> resistance(EMU,Metric) # Ω⋅m⋅abΩ⁻¹⋅cm⁻¹ -$(resistance(EMU,Metric)) - -julia> resistance(ESU,Metric) # Ω⋅m⋅statΩ⁻¹⋅cm⁻¹ -$(resistance(ESU,Metric)) - -julia> resistance(Metric,SI2019) # Ω⋅Ω⁻¹ -$(resistance(Metric,SI2019)) -``` -""" @pure resistivity(U::UnitSystem,S::UnitSystem) = unit(resistance(U,S)*length(U,S)) - -""" -$(convertext(:linearchargedensity,"charge(U,S)/length(U,S)")) - -Amount of `linearchargedensity` or `charge` per `length` (C⋅m⁻¹), unit conversion factor. - -```Julia -julia> linearchargedensity(EMU,Metric) # C⋅cm⋅abC⁻¹⋅m⁻¹ -$(linearchargedensity(EMU,Metric)) - -julia> linearchargedensity(ESU,Metric) # C⋅cm⋅statC⁻¹⋅m⁼¹ -$(linearchargedensity(ESU,Metric)) - -julia> linearchargedensity(Metric,SI2019) # C⋅C⁻¹ -$(linearchargedensity(Metric,SI2019)) -``` -""" @pure linearchargedensity(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)/length(U,S)) - -""" -$(convertext(:magneticdipolemoment,"current(U,S)*lorentz(U,S)/area(U,S)")) - -Magnetic dipole moment or `magneticdipolemoment` (J⋅T⁻¹, A⋅m²), unit conversion factor. - -```Julia -julia> magneticdipolemoment(EMU,Metric) # J⋅G⋅T⁻¹⋅erg⁻¹ -$(magneticdipolemoment(EMU,Metric)) - -julia> magneticdipolemoment(ESU,Metric) # J⋅statT⋅T⁻¹⋅erg⁼¹ -$(magneticdipolemoment(ESU,Metric)) - -julia> magneticdipolemoment(Metric,SI2019) # A⋅A⁻¹⋅ -$(magneticdipolemoment(Metric,SI2019)) -``` -""" @pure magneticdipolemoment(U::UnitSystem,S::UnitSystem) = unit(current(U,S)*lorentz(U,S)*area(U,S)) - -""" -$(convertext(:mobility,"charge(U,S)*time(U,S)/mass(U,S)")) - -Electron `mobility` in solid state physics (m²⋅V⁻¹⋅s⁻¹, A⋅s²⋅kg⁻¹), unit conversion factor. - -```Julia -julia> mobility(EMU,Metric) # C⋅g⋅abC⁻¹⋅kg -$(mobility(EMU,Metric)) - -julia> mobility(EMU,ESU) # statC⋅abC⁻¹ -$(mobility(EMU,ESU)) - -julia> mobility(ESU,Metric) # C⋅g⋅statC⁻¹⋅kg -$(mobility(ESU,Metric)) - -julia> mobility(Metric,SI2019) # C⋅C⁻¹ -$(mobility(Metric,SI2019)) -``` -""" @pure mobility(U::UnitSystem,S::UnitSystem) = unit(charge(U,S)*time(U,S)/mass(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. - -```Julia -julia> reluctance(EMU,Metric) # abH⋅H⁻¹ -$(reluctance(EMU,Metric)) - -julia> reluctance(ESU,Metric) # statH⋅H⁻¹ -$(reluctance(ESU,Metric)) - -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(rationalization(U,S)*lorentz(U,S)^2/inductance(U,S)) - -""" -$(convertext(:vectorpotential,"magneticflux(U,S)/length(U,S)")) - -Magnetic `vectorpotential` (Wb⋅m⁻¹), unit conversion factor. - -```julia -julia> vectorpotential(EMU,Metric) # Wb⋅cm⋅Mx⁻¹⋅m⁻¹ -$(vectorpotential(EMU,Metric)) - -julia> vectorpotential(ESU,Metric) # Wb⋅cm⋅statWb⁻¹⋅m⁻¹ -$(vectorpotential(ESU,Metric)) - -julia> vectorpotential(Metric,SI2019) # Wb⋅Wb⁻¹ -$(vectorpotential(Metric,SI2019)) -``` -""" @pure vectorpotential(U::UnitSystem,S::UnitSystem) = unit(magneticflux(U,S)/length(U,S)) - -""" -$(convertext(:magneticmoment,"magneticflux(U,S)*length(U,S)")) - -Amount of `magneticmoment` or `magneticflux` by `length` (Wb⋅m), unit conversion factor. - -```Julia -julia> magneticmoment(EMU,Metric) # Wb⋅m⋅Mx⁻¹⋅cm⁻¹ -$(magneticmoment(EMU,Metric)) - -julia> magneticmoment(ESU,Metric) # Wb⋅m⋅statWb⁻¹⋅cm⁻¹ -$(magneticmoment(ESU,Metric)) - -julia> magneticmoment(Metric,SI2019) # Wb⋅Wb⁻¹ -$(magneticmoment(Metric,SI2019)) -``` -""" @pure magneticmoment(U::UnitSystem,S::UnitSystem) = unit(magneticflux(U,S)*length(U,S)) - -""" -$(convertext(:rigidity,"magneticfluxdensity(U,S)*length(U,S)")) - -Electromagnetic `rigidity` (T⋅m), unit conversion factor. - -```Julia -julia> rigidity(EMU,Metric) # T⋅m⋅G⁻¹⋅cm⁻¹ -$(rigidity(EMU,Metric)) - -julia> rigidity(EMU,ESU) # statT⋅G⁻¹ -$(rigidity(EMU,ESU)) - -julia> rigidity(Metric,SI2019) # T⋅T⁻¹ -$(rigidity(Metric,SI2019)) -``` -""" @pure rigidity(U::UnitSystem,S::UnitSystem) = unit(magneticfluxdensity(U,S)*length(U,S)) - -""" -$(convertext(:susceptibility,"1/rationalization(U,S)")) - -Magnetic/electric volume `susceptibility` (dimensionless), unit conversion factor. - -```Julia -julia> susceptibility(EMU,Metric) -$(susceptibility(EMU,Metric)) - -julia> susceptibility(ESU,Metric) -$(susceptibility(ESU,Metric)) - -julia> susceptibility(Metric,SI2019) -$(susceptibility(Metric,SI2019)) -``` -""" # 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, linearchargedensity, exposure # CGS extra: polarizability, permeance, magnetic-current? + density, magneticresistance -""" -$(convertext(:electricflux,"electricpotential(U,S)*length(U,S)")) - -Amount of `electricflux` or `electricpotential` by `length` (V⋅m), unit conversion factor. - -```Julia -julia> electricflux(EMU,Metric) # V⋅m⋅abV⁻¹⋅cm⁻¹ -$(electricflux(EMU,Metric)) - -julia> electricflux(EMU,ESU) # statV⋅abV⁻¹ -$(electricflux(EMU,ESU)) - -julia> electricflux(ESU,Metric) # V⋅m⋅statV⁻¹⋅cm⁻¹ -$(electricflux(ESU,Metric)) - -julia> electricflux(Metric,SI2019) # V⋅V⁻¹ -$(electricflux(Metric,SI2019)) -``` -""" @pure electricflux(U::UnitSystem,S::UnitSystem) = unit(electricpotential(U,S)*length(U,S)) - -""" -$(convertext(:electricdipolemoment,"charge(U,S)*length(U,S)")) - -Electric dipole moment or `electricdipolemoment` (C⋅m), unit conversion factor. - -```Julia -julia> electricdipolemoment(EMU,Metric) # C⋅m⋅abC⁻¹⋅cm⁻¹ -$(electricdipolemoment(EMU,Metric)) - -julia> electricdipolemoment(ESU,Metric) # C⋅m⋅statC⁻¹⋅cm⁼¹ -$(electricdipolemoment(ESU,Metric)) - -julia> electricdipolemoment(Metric,Gauss)/1e-18 # D⋅C⁻¹⋅m⁻¹ -$(electricdipolemoment(Metric,Gauss)/1e-18) - -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 + +include("electromagneticdocs.jl") diff --git a/src/electromagneticdocs.jl b/src/electromagneticdocs.jl new file mode 100644 index 0000000..84c3688 --- /dev/null +++ b/src/electromagneticdocs.jl @@ -0,0 +1,715 @@ + +# This file is part of UnitSystems.jl +# It is licensed under the MIT license +# UnitSystems Copyright (C) 2020 Michael Reed +# _ _ _ +# | | | | | | +# ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ +# / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | +# | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | +# \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| +# +# https://github.com/chakravala +# https://crucialflow.com + +@doc """ +$(convertext(:charge,"sqrt(action(U,S)*current(U,S)/electricpotential(U,S))")) + +Electric `charge` quantization (C, A⋅s), unit conversion factor. + +```Julia +julia> charge(EMU,Metric) # C⋅abC⁻¹ +$(charge(EMU,Metric)) + +julia> charge(EMU,ESU) # stC⋅abC⁻¹ +$(charge(EMU,ESU)) + +julia> charge(ESU,Metric) # C⋅stC⁻¹ +$(charge(ESU,Metric)) + +julia> charge(Metric,SI2019) # C⋅C⁻¹ +$(charge(Metric,SI2019)) + +julia> charge(Hartree,SI2019) # C⋅𝘦⁻¹ +$(charge(Hartree,SI2019)) +``` +""" charge(U::UnitSystem,S::UnitSystem), Q + +@doc """ +$(convertext(:current,"charge(U,S)/time(U,S)")) + +Flow of electric `charge` per `time` or `current` (A, C⋅s⁻¹), unit conversion factor. + +```Julia +julia> current(EMU,Metric) # A⋅Bi⁻¹ +$(current(EMU,Metric)) + +julia> current(EMU,ESU) # statA⋅Bi⁻¹ +$(current(EMU,ESU)) + +julia> current(ESU,Metric) # A⋅statA⁻¹ +$(current(ESU,Metric)) + +julia> current(Metric,SI2019) # A⋅A⁻¹ +$(current(Metric,SI2019)) +``` +""" current + +@doc """ +$(convertext(:electricpotential,"energy(U,S)/charge(U,S)")) + +Voltage or `electricpotential` or `energy` per `charge` (V, J⋅C⁻¹), unit conversion factor. + +```Julia +julia> electricpotential(EMU,Metric) # V⋅abV⁻¹ +$(electricpotential(EMU,Metric)) + +julia> electricpotential(EMU,ESU) # statV⋅abV⁻¹ +$(electricpotential(EMU,ESU)) + +julia> electricpotential(ESU,Metric) # V⋅statV⁻¹ +$(electricpotential(ESU,Metric)) + +julia> electricpotential(Metric,SI2019) # V⋅V⁻¹ +$(electricpotential(Metric,SI2019)) +``` +""" electricpotential + +@doc """ +$(convertext(:capacitance,"charge(U,S)/electricpotential(U,S)")) + +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⋅cm⁻¹ +$(capacitance(ESU,Metric)) + +julia> capactiance(Metric,SI2019) # F⋅F⁻¹ +$(capacitance(Metric,SI2019)) +``` +""" capacitance + +@doc """ +$(convertext(:resistance,"electricpotential(U,S)/current(U,S)")) + +Electrical `resistance` or `electricpotential` per `current` (Ω, S⁻¹, V⋅A⁻¹), unit conversion factor. + +```Julia +julia> resistance(EMU,Metric) # Ω⋅abΩ⁻¹ +$(resistance(EMU,Metric)) + +julia> resistance(ESU,Metric) # Ω⋅statΩ⁻¹ +$(resistance(ESU,Metric)) + +julia> resistance(Metric,SI2019) # Ω⋅Ω⁻¹ +$(resistance(Metric,SI2019)) +``` +""" resistance + +@doc """ +$(convertext(:conductance,"current(U,S)/electricpotential(U,S)")) + +Electrical `conductance` or `current` per `electricpotential` (S, Ω⁻¹, A⋅V⁻¹), unit conversion factor. + +```Julia +julia> conductance(EMU,Metric) # S⋅abS⁻¹ +$(conductance(EMU,Metric)) + +julia> conductance(ESU,Metric) # S⋅statS⁻¹ +$(conductance(ESU,Metric)) + +julia> conductance(Metric,SI2019) # S⋅S⁻¹ +$(conductance(Metric,SI2019)) +``` +""" conductance(U::UnitSystem,S::UnitSystem) + +@doc """ +$(convertext(:magneticflux,"energy(U,S)/lorentz(U,S)/current(U,S)")) + +Surface `magneticflux` or `energy` per `current` (Wb, J⋅A⁻¹, V⋅s), unit conversion factor. + +```Julia +julia> magneticflux(EMU,Metric) # Wb⋅Mx⁻¹ +$(magneticflux(EMU,Metric)) + +julia> magneticflux(ESU,Metric) # Wb⋅statWb⁻¹ +$(magneticflux(ESU,Metric)) + +julia> magneticflux(Metric,SI2019) # Wb⋅Wb⁻¹ +$(magneticflux(Metric,SI2019)) +``` +""" magneticflux(U::UnitSystem,S::UnitSystem) + +@doc """ +$(convertext(:magneticfluxdensity,"magneticflux(U,S)/area(U,S)")) + +Magnetic induction or surface `magneticfluxdensity` (T, Wb⋅m⁻²), unit conversion factor. + +```Julia +julia> magneticfluxdensity(EMU,Metric) # T⋅G⁻¹ +$(magneticfluxdensity(EMU,Metric)) + +julia> magneticfluxdensity(EMU,ESU) # statT⋅G⁻¹ +$(magneticfluxdensity(EMU,ESU)) + +julia> magneticfluxdensity(Metric,SI2019) # T⋅T⁻¹ +$(magneticfluxdensity(Metric,SI2019)) +``` +""" magneticfluxdensity + +@doc """ +$(convertext(:inductance,"magneticflux(U,S)/current(U,S)")) + +Electro-`magneticflux` per `current` or `inductance` (H, Ω⋅s, Wb⋅A⁻¹), unit conversion factor. + +```Julia +julia> inductance(EMU,Metric) # H⋅abH⁻¹ +$(inductance(EMU,Metric)) + +julia> inductance(ESU,Metric) # H⋅statH⁻¹ +$(inductance(ESU,Metric)) + +julia> inductance(Metric,SI2019) # H⋅H⁻¹ +$(inductance(Metric,SI2019)) +``` +""" inductance + +# electromagnetics + +@doc """ +$(convertext(:electricfluxdensity,"charge(U,S)*rationalization(U,S)/area(U,S)")) + +Electric field displacement or surface `electricfluxdensity` (C⋅m⁻²), unit conversion factor. + +```Julia +julia> electricfluxdensity(EMU,Metric) # C⋅cm²⋅abC⁻¹⋅m⁻² +$(electricfluxdensity(EMU,Metric)) + +julia> electricfluxdensity(ESU,Metric) # C⋅cm²⋅statC⁻¹⋅m⁼² +$(electricfluxdensity(ESU,Metric)) + +julia> electricfluxdensity(Metric,SI2019) # C⋅C⁻¹ +$(electricfluxdensity(Metric,SI2019)) +``` +""" electricfluxdensity + +@doc """ +$(convertext(:chargedensity,"charge(U,S)/volume(U,S)")) + +Volume `chargedensity` or `charge` per `volume` (C⋅m⁻³), unit conversion factor. + +```Julia +julia> chargedensity(EMU,Metric) # C⋅cm³⋅abC⁻¹⋅m⁻³ +$(chargedensity(EMU,Metric)) + +julia> chargedensity(ESU,Metric) # C⋅cm³⋅statC⁻¹⋅m⁼³ +$(chargedensity(ESU,Metric)) + +julia> chargedensity(Metric,SI2019) # C⋅C⁻¹ +$(chargedensity(Metric,SI2019)) +``` +""" chargedensity + +@doc """ +$(convertext(:currentdensity,"current(U,S)/area(U,S)")) + +Cross-section `currentdensity` or `current` per `area` (A⋅m⁻²), unit conversion factor. + +```Julia +julia> currentdensity(EMU,Metric) # A⋅cm²⋅Bi⁻¹⋅m⁻² +$(currentdensity(EMU,Metric)) + +julia> currentdensity(ESU,Metric) # A⋅cm²⋅statA⁻¹⋅m⁼² +$(currentdensity(ESU,Metric)) + +julia> currentdensity(Metric,SI2019) # A⋅A⁻¹ +$(currentdensity(Metric,SI2019)) +``` +""" currentdensity + +@doc """ +$(convertext(:conductivity,"conductance(U,S)/length(U,S)")) + +Reciprocal `resistivity` or electrical `conductivity` (S⋅m⁻¹), unit conversion factor. + +```Julia +julia> conductivity(EMU,Metric) # S⋅cm⋅abS⁻¹⋅m⁻¹ +$(conductivity(EMU,Metric)) + +julia> conductivity(ESU,Metric) # S⋅cm⋅statS⁻¹⋅m⁼¹ +$(conductivity(ESU,Metric)) + +julia> conductivity(Metric,SI2019) # S⋅S⁻¹ +$(conductivity(Metric,SI2019)) +``` +""" conductivity + +@doc """ +$(convertext(:permittivity,"capacitance(U,S)*rationalization(U,S)/length(U,S)")) + +Absolute `permittivity` or `capacitance` per `length` (F⋅m⁻¹), unit conversion factor. + +```Julia +julia> permittivity(EMU,Metric) # F⋅cm⋅abF⁻¹⋅m⁻¹ +$(permittivity(EMU,Metric)) + +julia> permittivity(ESU,Metric) # F⋅m⁼¹ +$(permittivity(ESU,Metric)) + +julia> permittivity(Metric,SI2019) # F⋅F⁻¹ +$(permittivity(Metric,SI2019)) +``` +""" permittivity(U::UnitSystem,S::UnitSystem) + +@doc """ +$(convertext(:permeability,"permeability(S)/permeability(U)")) + +Magnetic `permeability` or `inductance` per `length` (H⋅m⁻¹), unit conversion factor. + +```Julia +julia> permeability(EMU,Metric) # H⋅cm⋅abH⁻¹⋅m⁻¹ +$(permeability(EMU,Metric)) + +julia> permeability(ESU,Metric) # H⋅cm⋅statH⁻¹⋅m⁼¹ +$(permeability(ESU,Metric)) + +julia> permeability(Metric,SI2019) # H⋅H⁻¹ +$(permeability(Metric,SI2019)) +``` +""" permeability(::UnitSystem,::UnitSystem) + +@doc """ +$(convertext(:electricfield,"electricpotential(U,S)/length(U,S)")) + +The `electricpotential` per `length` or `electricfield` (V⋅m⁻¹), unit conversion factor. + +```Julia +julia> electricfield(EMU,Metric) # V⋅cm⋅abV⁻¹⋅m⁻¹ +$(electricfield(EMU,Metric)) + +julia> electricfield(EMU,ESU) # statV⋅abV⁻¹ +$(electricfield(EMU,ESU)) + +julia> electricfield(ESU,Metric) # V⋅cm⋅statV⁻¹⋅m⁻¹ +$(electricfield(ESU,Metric)) + +julia> electricfield(Metric,SI2019) # V⋅V⁻¹ +$(electricfield(Metric,SI2019)) +``` +""" electricfield + +@doc """ +$(convertext(:magneticfield,"current(U,S)*rationalization(U,S)*lorentz(U,S)/length(U,S)")) + +Magnetization or `magneticfield` or `current` per `length` (A⋅m⁻¹), unit conversion factor. + +```Julia +julia> magneticfield(EMU,Metric) # A⋅m⁻¹⋅Oe⁻¹ +$(magneticfield(EMU,Metric)) + +julia> magneticfield(ESU,Metric) # A⋅cm⋅m⁻¹⋅statA⁻¹ +$(magneticfield(ESU,Metric)) + +julia> magneticfield(Metric,SI2019) # A⋅A⁻¹ +$(magneticfield(Metric,SI2019)) +``` +""" magneticfield + +@doc """ +$(convertext(:exposure,"charge(U,S)/mass(U,S)")) + +Ionizing radiation `exposure` or `charge` per `mass` (C⋅kg⁻¹), unit conversion factor. + +```Julia +julia> exposure(EMU,Metric) # C⋅g⋅abC⁻¹⋅kg +$(exposure(EMU,Metric)) + +julia> exposure(EMU,ESU) # statC⋅abC⁻¹ +$(exposure(EMU,ESU)) + +julia> expsure(ESU,Metric) # C⋅g⋅statC⁻¹⋅kg +$(exposure(ESU,Metric)) + +julia> exposure(Metric,SI2019) # C⋅C⁻¹ +$(exposure(Metric,SI2019)) +``` +""" exposure + +@doc """ +$(convertext(:resistivity,"resistance(U,S)*length(U,S)")) + +Electrical `resistivity` or `resistance` by `length` (Ω⋅m), unit conversion factor. + +```Julia +julia> resistance(EMU,Metric) # Ω⋅m⋅abΩ⁻¹⋅cm⁻¹ +$(resistance(EMU,Metric)) + +julia> resistance(ESU,Metric) # Ω⋅m⋅statΩ⁻¹⋅cm⁻¹ +$(resistance(ESU,Metric)) + +julia> resistance(Metric,SI2019) # Ω⋅Ω⁻¹ +$(resistance(Metric,SI2019)) +``` +""" resistivity + +@doc """ +$(convertext(:linearchargedensity,"charge(U,S)/length(U,S)")) + +Amount of `linearchargedensity` or `charge` per `length` (C⋅m⁻¹), unit conversion factor. + +```Julia +julia> linearchargedensity(EMU,Metric) # C⋅cm⋅abC⁻¹⋅m⁻¹ +$(linearchargedensity(EMU,Metric)) + +julia> linearchargedensity(ESU,Metric) # C⋅cm⋅statC⁻¹⋅m⁼¹ +$(linearchargedensity(ESU,Metric)) + +julia> linearchargedensity(Metric,SI2019) # C⋅C⁻¹ +$(linearchargedensity(Metric,SI2019)) +``` +""" linearchargedensity + +@doc """ +$(convertext(:magneticdipolemoment,"current(U,S)*lorentz(U,S)/area(U,S)")) + +Magnetic dipole moment or `magneticdipolemoment` (J⋅T⁻¹, A⋅m²), unit conversion factor. + +```Julia +julia> magneticdipolemoment(EMU,Metric) # J⋅G⋅T⁻¹⋅erg⁻¹ +$(magneticdipolemoment(EMU,Metric)) + +julia> magneticdipolemoment(ESU,Metric) # J⋅statT⋅T⁻¹⋅erg⁼¹ +$(magneticdipolemoment(ESU,Metric)) + +julia> magneticdipolemoment(Metric,SI2019) # A⋅A⁻¹⋅ +$(magneticdipolemoment(Metric,SI2019)) +``` +""" magneticdipolemoment + +@doc """ +$(convertext(:mobility,"charge(U,S)*time(U,S)/mass(U,S)")) + +Electron `mobility` in solid state physics (m²⋅V⁻¹⋅s⁻¹, A⋅s²⋅kg⁻¹), unit conversion factor. + +```Julia +julia> mobility(EMU,Metric) # C⋅g⋅abC⁻¹⋅kg +$(mobility(EMU,Metric)) + +julia> mobility(EMU,ESU) # statC⋅abC⁻¹ +$(mobility(EMU,ESU)) + +julia> mobility(ESU,Metric) # C⋅g⋅statC⁻¹⋅kg +$(mobility(ESU,Metric)) + +julia> mobility(Metric,SI2019) # C⋅C⁻¹ +$(mobility(Metric,SI2019)) +``` +""" mobility + +@doc """ +$(convertext(:reluctance,"rationalization(U,S)*lorentz(U,S)^2/inductance(U,S)")) + +Magnetic `reluctance` or magnetic resistance (H⁻¹, Gb⋅Mx⁻¹), unit conversion factor. + +```Julia +julia> reluctance(EMU,Metric) # abH⋅H⁻¹ +$(reluctance(EMU,Metric)) + +julia> reluctance(ESU,Metric) # statH⋅H⁻¹ +$(reluctance(ESU,Metric)) + +julia> reluctance(Metric,SI2019) # H⋅H⁻¹ +$(reluctance(Metric,SI2019)) +``` +""" reluctance # reciprocal: permeance -- different concept from inductace but same units + +@doc """ +$(convertext(:vectorpotential,"magneticflux(U,S)/length(U,S)")) + +Magnetic `vectorpotential` (Wb⋅m⁻¹), unit conversion factor. + +```julia +julia> vectorpotential(EMU,Metric) # Wb⋅cm⋅Mx⁻¹⋅m⁻¹ +$(vectorpotential(EMU,Metric)) + +julia> vectorpotential(ESU,Metric) # Wb⋅cm⋅statWb⁻¹⋅m⁻¹ +$(vectorpotential(ESU,Metric)) + +julia> vectorpotential(Metric,SI2019) # Wb⋅Wb⁻¹ +$(vectorpotential(Metric,SI2019)) +``` +""" vectorpotential + +@doc """ +$(convertext(:magneticmoment,"magneticflux(U,S)*length(U,S)")) + +Amount of `magneticmoment` or `magneticflux` by `length` (Wb⋅m), unit conversion factor. + +```Julia +julia> magneticmoment(EMU,Metric) # Wb⋅m⋅Mx⁻¹⋅cm⁻¹ +$(magneticmoment(EMU,Metric)) + +julia> magneticmoment(ESU,Metric) # Wb⋅m⋅statWb⁻¹⋅cm⁻¹ +$(magneticmoment(ESU,Metric)) + +julia> magneticmoment(Metric,SI2019) # Wb⋅Wb⁻¹ +$(magneticmoment(Metric,SI2019)) +``` +""" magneticmoment + +@doc """ +$(convertext(:rigidity,"magneticfluxdensity(U,S)*length(U,S)")) + +Electromagnetic `rigidity` (T⋅m), unit conversion factor. + +```Julia +julia> rigidity(EMU,Metric) # T⋅m⋅G⁻¹⋅cm⁻¹ +$(rigidity(EMU,Metric)) + +julia> rigidity(EMU,ESU) # statT⋅G⁻¹ +$(rigidity(EMU,ESU)) + +julia> rigidity(Metric,SI2019) # T⋅T⁻¹ +$(rigidity(Metric,SI2019)) +``` +""" rigidity + +@doc """ +$(convertext(:susceptibility,"1/rationalization(U,S)")) + +Magnetic/electric volume `susceptibility` (dimensionless), unit conversion factor. + +```Julia +julia> susceptibility(EMU,Metric) +$(susceptibility(EMU,Metric)) + +julia> susceptibility(ESU,Metric) +$(susceptibility(ESU,Metric)) + +julia> susceptibility(Metric,SI2019) +$(susceptibility(Metric,SI2019)) +``` +""" susceptibility # magneticdipolemoment(U,S)/magneticfield(U,S)/volume(U,S) + +# WARNING unchecked: rigidity, magneticmoment, vectorpotential, mobility, linearchargedensity, exposure + +# CGS extra: polarizability, permeance, magnetic-current? + density, magneticresistance + +@doc """ +$(convertext(:electricflux,"electricpotential(U,S)*length(U,S)")) + +Amount of `electricflux` or `electricpotential` by `length` (V⋅m), unit conversion factor. + +```Julia +julia> electricflux(EMU,Metric) # V⋅m⋅abV⁻¹⋅cm⁻¹ +$(electricflux(EMU,Metric)) + +julia> electricflux(EMU,ESU) # statV⋅abV⁻¹ +$(electricflux(EMU,ESU)) + +julia> electricflux(ESU,Metric) # V⋅m⋅statV⁻¹⋅cm⁻¹ +$(electricflux(ESU,Metric)) + +julia> electricflux(Metric,SI2019) # V⋅V⁻¹ +$(electricflux(Metric,SI2019)) +``` +""" electricflux + +@doc """ +$(convertext(:electricdipolemoment,"charge(U,S)*length(U,S)")) + +Electric dipole moment or `electricdipolemoment` (C⋅m), unit conversion factor. + +```Julia +julia> electricdipolemoment(EMU,Metric) # C⋅m⋅abC⁻¹⋅cm⁻¹ +$(electricdipolemoment(EMU,Metric)) + +julia> electricdipolemoment(ESU,Metric) # C⋅m⋅statC⁻¹⋅cm⁼¹ +$(electricdipolemoment(ESU,Metric)) + +julia> electricdipolemoment(Metric,SI2019) # C⋅C⁻¹ +$(electricdipolemoment(Metric,SI2019)) +``` +""" electricdipolemoment +#julia> electricdipolemoment(Metric,Gauss)/1e-18 # D⋅C⁻¹⋅m⁻¹ +#$(electricdipolemoment(Metric,Gauss)/1e-18) + +@doc """ +$(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)) +``` +""" magneticpotential + +@doc """ +$(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)) +``` +""" polestrength + +@doc """ +$(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)) +``` +""" permeance + +@doc """ +$(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)) +``` +""" specificsusceptibility + +@doc """ +$(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)) +``` +""" magnetizability + +@doc """ +$(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)) +``` +""" electricpolarizability + +@doc """ +$(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)) +``` +""" magneticpolarizability + +@doc """ +$(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)) +``` +""" magnetization + +# specificmagnetization, mass magnetization = 1? +# magneticfluxdensity(Metric,EMU)/density(Metric,EMU) +@doc """ +$(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)) +``` +""" specificmagnetization + +@doc """ +$(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)) +``` +""" demagnetizingfactor + +# 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/initdata.jl b/src/initdata.jl new file mode 100644 index 0000000..055fd5d --- /dev/null +++ b/src/initdata.jl @@ -0,0 +1,132 @@ + +# This file is part of UnitSystems.jl +# It is licensed under the MIT license +# UnitSystems Copyright (C) 2020 Michael Reed +# _ _ _ +# | | | | | | +# ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ +# / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | +# | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | +# \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| +# +# https://github.com/chakravala +# https://crucialflow.com + +const centi,milli,HOUR = inv((𝟐*𝟓)^2),inv((𝟐*𝟓)^3),𝟐^4*𝟑^2*𝟓^2 +const fur,slug,slugUS,°R,K = 𝟐^2*𝟑*𝟓*𝟏𝟏*ft,lb*g₀/ft,lb*g₀/ftUS,𝟓/𝟑^2,𝟑^2/𝟓 +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,𝟐^4*𝟓^5/𝟑^3 # nautical mile +const GM☉ =au^3*k^2/DAY^2; const th = 𝟏𝟎^3*pc/H0; const ΛC = 𝟑*ΩΛ*(th*𝘤)^-2 +const lc,mc,ρΛ = 𝟐*sqrt(τ/ΛC),𝘤^2/(𝟐*sqrt(τ*ΛC*G)),ΛC*𝘤^4/(𝟐^2*τ)/G +const lcq,mcq = sqrt.(sqrt.((𝘤*ħ/ρΛ,ρΛ*ħ^3/𝘤^5))) +const tcq = lcq*sqrt(mcq/sqrt(sqrt(ρΛ*(𝘤*ħ)^3))) + +const Universe = Coupling(αG,α,μₑᵤ,μₚᵤ,ΩΛ) + +Constant(::UnitSystem{a,b,c,d,e,f,g}) where {a,b,c,d,e,f,g} = UnitSystem(Constant(a),Constant(b),Constant(c),Constant(d),Constant(e),Constant(f),Constant(g[1]),Constant(g[2]),Constant(g[3]),Constant(g[4]),Constant(g[5]),Universe,Constant(g[7]),𝟐,𝟑,𝟓,𝟕,𝟏𝟏,𝟏𝟗,𝟒𝟑) + +export MetricSystem, ConventionalSystem, RankineSystem +export AstronomicalSystem, ElectricSystem, GaussSystem, EntropySystem + +""" + MetricSystem(Mu=Mᵤ,μ0=μ₀,Ru=Rᵤ,g0=𝟏,h=𝘩) + +Constructs new `UnitSystem` from `molarmass` constant, `vacuumpermeability`, `universal` gas constant, `gravity` force reference, and `planck` constant. + +Examples include `SI2019`, `Metric`, `SI2019Engineering`, `MetricEngineering`, `SI1976`. In addition, the `ConventionalSystem` constructor further builds on `MetricSystem`, resulting in variations. +""" +MetricSystem(Mu=Mᵤ,μ0=μ₀,Ru=Rᵤ,g0=𝟏,h=𝘩,me=αinv^2*R∞*𝟐*h/𝘤/g0) = 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(0.001,𝟐*RK/𝘤*α,Ru,g0,𝟒/RK/KJ^2) + +Constructs new `UnitSystem` from von `klitzing` constant and `josephson` constant, with an optional specification of `universal` gas constant and `gravity` reference constant. + +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,𝟐*τ,1000molarmass(U),g0) + +Constructs new `UnitSystem` from `U` rescaled along `length` and `mass` with optional `gravity` reference constant used to define technical and engineering units. + +Examples: `British`, `British2019`, `Survey`, `Survey2019`, `English`, `English2019`, `FPS`, `FPS2019`. +""" +RankineSystem(u,l,m,g0=𝟏) = EntropySystem(u,𝟏,l,m,°R,𝟐*τ,UnitSystems.unit(𝟏𝟎^3*UnitSystems.molarmass(u)),g0) + +# historical units + +const SI2019 = Quantity(MetricSystem()) +const Metric = Quantity(MetricSystem(milli,𝟐*τ/𝟏𝟎^7)) +const SI2019Engineering = Quantity(MetricSystem(Mᵤ,μ₀,Rᵤ,g₀)) +const MetricEngineering = Quantity(MetricSystem(milli,𝟐*τ/𝟏𝟎^7,Rᵤ,g₀)) +const SI1976 = Quantity(MetricSystem(milli,𝟐*τ/𝟏𝟎^7,Constant(8.31432))) +const CODATA = Quantity(ConventionalSystem(RK2014,KJ2014,Rᵤ2014)) +const Conventional = Quantity(ConventionalSystem(RK1990,KJ1990)) +const International = Quantity(ElectricSystem(Metric,Ωᵢₜ,Vᵢₜ)) +const InternationalMean = Quantity(ElectricSystem(Metric,Constant(1.00049),Constant(1.00034))) + +const EMU = Quantity(GaussSystem(Metric,𝟏,𝟐*τ)) +const ESU = Quantity(GaussSystem(Metric,(𝟏𝟎^2*𝘤)^-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 British = Quantity(RankineSystem(Metric,ft,slug)) +const British2019 = Quantity(RankineSystem(SI2019,ft,slug)) +const Survey = Quantity(RankineSystem(Metric,ftUS,lb,g₀/ftUS)) +const Survey2019 = Quantity(RankineSystem(SI2019,ftUS,lb,g₀/ftUS)) +const English = Quantity(RankineSystem(Metric,ft,lb,g₀/ft)) +const English2019 = Quantity(RankineSystem(SI2019,ft,lb,g₀/ft)) +const FPS = Quantity(RankineSystem(Metric,ft,lb)) +const FPS2019 = Quantity(RankineSystem(SI2019,ft,lb)) + +const Astronomical = Quantity(AstronomicalSystem(Metric)) +const Hubble = Quantity(EntropySystem(Metric,th,𝘤*th,𝟏)) +const Cosmological = Quantity(EntropySystem(Metric,lc/𝘤,lc,mc)) +const CosmologicalQuantum = Quantity(EntropySystem(Metric,tcq,lcq,mcq)) +const EMU2019 = Quantity(EntropySystem(SI2019,𝟏,centi,milli)) +const ESU2019 = Quantity(EntropySystem(SI2019,𝟏,centi,milli,𝟏,𝟏𝟎^3*μ₀/𝘤^2)) +const Mixed = Quantity(EntropySystem(Metric,𝟏,𝟏,𝟏,𝟏,μ₀)) +const GravitationalSI2019 = Quantity(EntropySystem(SI2019,𝟏,𝟏,g₀)) +const GravitationalMetric = Quantity(EntropySystem(Metric,𝟏,𝟏,g₀)) +const IAU☉ = Quantity(EntropySystem(Metric,DAY,au,GM☉/G)) +const IAUE = Quantity(EntropySystem(Metric,DAY,au,GME/G)) +const IAUJ = Quantity(EntropySystem(Metric,DAY,au,GMJ/G)) +const MTS = Quantity(EntropySystem(Metric,𝟏,𝟏,𝟏𝟎^3)) +const KKH = Quantity(EntropySystem(Metric,HOUR,𝟏𝟎^3,𝟏)) +const MPH = Quantity(EntropySystem(English,HOUR,𝟐^5*𝟑*𝟓*𝟏𝟏,𝟏)) +const Nautical = Quantity(EntropySystem(English,HOUR,𝟐^6*𝟓*𝟏𝟗,𝟏)) +const FFF = Quantity(EntropySystem(Metric,𝟕*𝟐*DAY,fur,(𝟐*𝟑^2*𝟓)*lb,°R,Constant(0.),𝟏)) + +# natural units + +const Planck = Quantity(UnitSystem(𝟏,𝟏,𝟏,𝟏,√(𝟐*τ*αG))) +const PlanckGauss = Quantity(UnitSystem(𝟏,𝟏,𝟏,𝟐*τ,√αG)) +const Stoney = Quantity(UnitSystem(𝟏,αinv,𝟏,𝟐*τ,√(αG*αinv))) +const Hartree = Quantity(UnitSystem(𝟏,𝟏,αinv,𝟐*τ*α^2,𝟏)) +const Rydberg = Quantity(UnitSystem(𝟏,𝟏,𝟐*αinv,τ/𝟐*α^2,inv(𝟐))) +const Schrodinger = Quantity(UnitSystem(𝟏,𝟏,αinv,𝟐*τ*α^2,√(αG*αinv))) +const Electronic = Quantity(UnitSystem(𝟏,αinv,𝟏,𝟐*τ,𝟏)) +const Natural = Quantity(UnitSystem(𝟏,𝟏,𝟏,𝟏,𝟏)) +const NaturalGauss = Quantity(UnitSystem(𝟏,𝟏,𝟏,𝟐*τ,𝟏)) +const QCD = Quantity(UnitSystem(𝟏,𝟏,𝟏,𝟏,inv(μₚₑ))) +const QCDGauss = Quantity(UnitSystem(𝟏,𝟏,𝟏,𝟐*τ,inv(μₚₑ))) +const QCDoriginal = Quantity(UnitSystem(𝟏,𝟏,𝟏,𝟐*τ*α,inv(μₚₑ))) + +export SI, MKS, SIE, ME, GSI2019, GSI, GM, CGS, CGS2019, CGSm, CGSe, HLU, FFF, AE, EE, BG +export EnglishEngineering, BritishGravitational, AbsoluteEnglish, EnglishUS, EE2019, IAU +const SI, MKS, SIE, ME, IAU = SI2019, Metric, SI2019Engineering, MetricEngineering, IAU☉ +const GSI2019, GSI, GM = GravitationalSI2019, GravitationalSI2019, GravitationalMetric +const CGS, CGS2019, CGSm, CGSe, HLU = Gauss, EMU2019, EMU, ESU, LorentzHeaviside +const EnglishEngineering, BritishGravitational, BG = English, British, British +const EnglishUS, AbsoluteEnglish, AE, EE, EE2019 = Survey, FPS, FPS, English, English2019 +const EnglishEngineering2019,BritishGravitational2019,BG2019 = English2019,British2019,British2019 +const AbsoluteEnglish2019,AE2019 = FPS2019,FPS2019 + +for u ∈ Systems + @eval unitname(::typeof(normal($u))) = $(string(u)) +end diff --git a/src/kinematic.jl b/src/kinematic.jl index 14b5e77..688437d 100644 --- a/src/kinematic.jl +++ b/src/kinematic.jl @@ -1,20 +1,30 @@ -# This file is part of UnitSystems.jl. It is licensed under the MIT license +# This file is part of UnitSystems.jl +# It is licensed under the MIT license # UnitSystems Copyright (C) 2020 Michael Reed +# _ _ _ +# | | | | | | +# ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ +# / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | +# | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | +# \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| +# +# https://github.com/chakravala +# https://crucialflow.com """ kilograms(m::Real) = $(slug)m Converts mass `m` from slugs to kilogram (kg). """ -@pure kilograms(m::Real,U::UnitSystem=English) = mass(m,Metric,U) +@pure kilograms(m::Number,U::UnitSystem=English) = mass(m,Metric,U) """ slugs(m::Real) = $(1/slug)m Converts mass `m` from kilograms to slugs (slug). """ -@pure slugs(m::Real,U::UnitSystem=Metric) = mass(m,English,U) +@pure slugs(m::Number,U::UnitSystem=Metric) = mass(m,English,U) """ feet(d) = $(1/ft)d @@ -33,41 +43,32 @@ Converts distance `d` from feet to meters (m). # special exact cases # IAU to SI -@pure length(U::UnitSystem{kB,ħ,𝘤} where {kB,ħ},S::UnitSystem{kB,ħ,day*𝘤/au} where {kB,ħ}) = length(U,S,1/au) -@pure time(U::UnitSystem{kB,ħ,𝘤} where {kB,ħ},S::UnitSystem{kB,ħ,day*𝘤/au} where {kB,ħ}) = time(U,S,1/day) +@pure length(U::UnitSystem{kB,ħ,𝘤} where {kB,ħ},S::UnitSystem{kB,ħ,DAY*𝘤/au} where {kB,ħ}) = length(U,S,1/au) +@pure time(U::UnitSystem{kB,ħ,𝘤} where {kB,ħ},S::UnitSystem{kB,ħ,DAY*𝘤/au} where {kB,ħ}) = time(U,S,1/DAY) # SI to IAU -@pure length(U::UnitSystem{kB,ħ,day*𝘤/au} where {kB,ħ},S::UnitSystem{kB,ħ,𝘤} where {kB,ħ}) = length(U,S,au) -@pure time(U::UnitSystem{kB,ħ,day*𝘤/au} where {kB,ħ},S::UnitSystem{kB,ħ,𝘤} where {kB,ħ}) = time(U,S,day) +@pure length(U::UnitSystem{kB,ħ,DAY*𝘤/au} where {kB,ħ},S::UnitSystem{kB,ħ,𝘤} where {kB,ħ}) = length(U,S,au) +@pure time(U::UnitSystem{kB,ħ,DAY*𝘤/au} where {kB,ħ},S::UnitSystem{kB,ħ,𝘤} where {kB,ħ}) = time(U,S,DAY) # IAU to CGS -@pure length(::UnitSystem{kB,ħ,100𝘤} where {kB,ħ},S::UnitSystem{kB,ħ,day*𝘤/au} where {kB,ħ}) = length(U,S,1/au) -@pure time(::UnitSystem{kB,ħ,100𝘤} where {kB,ħ},S::UnitSystem{kB,ħ,day*𝘤/au} where {kB,ħ}) = time(U,S,1/day) +@pure length(::UnitSystem{kB,ħ,100𝘤} where {kB,ħ},S::UnitSystem{kB,ħ,DAY*𝘤/au} where {kB,ħ}) = length(U,S,1/au) +@pure time(::UnitSystem{kB,ħ,100𝘤} where {kB,ħ},S::UnitSystem{kB,ħ,DAY*𝘤/au} where {kB,ħ}) = time(U,S,1/DAY) # CGS to IAU -@pure length(U::UnitSystem{kB,ħ,day*𝘤/au} where {kB,ħ},S::UnitSystem{kB,ħ,100𝘤} where {kB,ħ}) = length(U,S,au) -@pure time(U::UnitSystem{kB,ħ,day*𝘤/au} where {kB,ħ},S::UnitSystem{kB,ħ,100𝘤} where {kB,ħ}) = time(U,S,day) +@pure length(U::UnitSystem{kB,ħ,DAY*𝘤/au} where {kB,ħ},S::UnitSystem{kB,ħ,100𝘤} where {kB,ħ}) = length(U,S,au) +@pure time(U::UnitSystem{kB,ħ,DAY*𝘤/au} where {kB,ħ},S::UnitSystem{kB,ħ,100𝘤} where {kB,ħ}) = time(U,S,DAY) # IAU to English -@pure length(U::UnitSystem{kB,ħ,𝘤/ft} where {kB,ħ},S::UnitSystem{kB,ħ,day*𝘤/au} where {kB,ħ}) = length(U,S,ft/au) -@pure time(U::UnitSystem{kB,ħ,𝘤/ft} where {kB,ħ},S::UnitSystem{kB,ħ,day*𝘤/au} where {kB,ħ}) = time(U,S,1/day) +@pure length(U::UnitSystem{kB,ħ,𝘤/ft} where {kB,ħ},S::UnitSystem{kB,ħ,DAY*𝘤/au} where {kB,ħ}) = length(U,S,ft/au) +@pure time(U::UnitSystem{kB,ħ,𝘤/ft} where {kB,ħ},S::UnitSystem{kB,ħ,DAY*𝘤/au} where {kB,ħ}) = time(U,S,1/DAY) # English to IAU -@pure length(U::UnitSystem{kB,ħ,day*𝘤/au} where {kB,ħ},S::UnitSystem{kB,ħ,𝘤/ft} where {kB,ħ}) = length(U,S,au/ft) -@pure time(U::UnitSystem{kB,ħ,day*𝘤/au} where {kB,ħ},S::UnitSystem{kB,ħ,𝘤/ft} where {kB,ħ}) = time(U,S,day) +@pure length(U::UnitSystem{kB,ħ,DAY*𝘤/au} where {kB,ħ},S::UnitSystem{kB,ħ,𝘤/ft} where {kB,ħ}) = length(U,S,au/ft) +@pure time(U::UnitSystem{kB,ħ,DAY*𝘤/au} where {kB,ħ},S::UnitSystem{kB,ħ,𝘤/ft} where {kB,ħ}) = time(U,S,DAY) # base unit conversions -convertext(unit,fun) = """ -```Julia -$unit(U::UnitSystem,S::UnitSystem) = $fun -$unit(v::Real,U::UnitSystem,S::UnitSystem) = v/$unit(U,S) -``` -""" - -# spacetime - -@pure length(U::UnitSystem,S::UnitSystem,l=1) = unit((planckreduced(S)*electronmass(U)*lightspeed(U))/(planckreduced(U)*electronmass(S)*lightspeed(S)),l) +@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)")) @@ -83,81 +84,15 @@ $(length(IAU,Metric)) julia> length(English,Metric) # m⋅ft⁻¹ $(length(English,Metric)) -julia> length(EnglishUS,English) # ft⋅ftUS⁻¹ -$(length(EnglishUS,English)) +julia> length(Survey,English) # ft⋅ftUS⁻¹ +$(length(Survey,English)) julia> length(PlanckGauss,Metric) # m⋅ℓP⁻¹ $(length(PlanckGauss,Metric)) ``` -""" length, ft, ftUS, au - -""" -$(convertext(:area,"length(U,S)^2")) - -Extent of two-dimensional shape or `area` (m²), unit conversion factor. - -```Julia -julia> area(CGS,Metric) # m²⋅cm⁻² -$(area(CGS,Metric)) - -julia> area(English,Metric) # m²⋅ft⁻² -$(area(English,Metric)) - -julia> area(EnglishUS,English) # ft²⋅ftUS⁻² -$(area(EnglishUS,English)) -``` -""" -@pure area(U::UnitSystem,S::UnitSystem) = unit(length(U,S)^2) - -""" -$(convertext(:volume,"length(U,S)^3")) - -Extent of three-dimensional shape or `volume` (m³), unit conversion factor. - -```Julia -julia> volume(CGS,Metric) # m³⋅cm⁻³ -$(volume(CGS,Metric)) - -julia> volume(English,Metric) # m³⋅ft⁻³ -$(volume(English,Metric)) - -julia> volume(EnglishUS,English) # ft³⋅ftUS⁻³ -$(volume(EnglishUS,English)) -``` -""" -@pure volume(U::UnitSystem,S::UnitSystem) = unit(length(U,S)^3) - -""" -$(convertext(:wavenumber,"1/length(U,S)")) - -Number of occurences per unit of space (m⁻¹), unit conversion factor. - -```Julia -julia> wavenumber(CGS,Metric) # cm⋅m⁻¹ -$(wavenumber(CGS,Metric)) - -julia> wavenumber(English,Metric) # ft⋅m⁻¹ -$(wavenumber(English,Metric)) -``` -""" -@pure wavenumber(U::UnitSystem,S::UnitSystem) = unit(length(S,U)) - -""" -$(convertext(:fuelefficiency,"1/area(U,S)")) - -Distance per volume or `fuelefficiency` (m⋅m⁻³, m⁻²), unit conversion factor. - -```Julia -julia> fuelefficiency(CGS,Metric) # cm²⋅m⁻² -$(fuelefficiency(CGS,Metric)) - -julia> fuelefficiency(English,Metric) # ft²⋅m⁻² -$(fuelefficiency(English,Metric)) -``` -""" -@pure fuelefficiency(U::UnitSystem,S::UnitSystem) = area(S,U) +""" length, ft, ftUS, L -@pure time(U::UnitSystem,S::UnitSystem,t=1) = unit(length(U,S)/lightspeed(U,S),1) +@pure time(U::UnitSystem,S::UnitSystem,t=1) = isquantity(U,S) ? evaldim(time)(U,S) : unit(length(U,S)/lightspeed(U,S),1) @doc """ $(convertext(:time,"length(U,S)/speed(U,S)")) @@ -170,695 +105,66 @@ $(time(IAU,Metric)) julia> time(PlanckGauss,Metric) # s⋅tP⁻¹ $(time(PlanckGauss,Metric)) ``` -""" time, day - -""" -$(convertext(:frequency,"1/time(U,S)")) +""" time(::UnitSystem,::UnitSystem), T -Number of occurences per unit of time (Hz or s⁻¹), unit conversion factor. +# spacetime -```Julia -julia> frequency(IAU,Metric) day⋅s⁻¹ -$(frequency(IAU,Metric)) -``` -""" +@pure area(U::UnitSystem,S::UnitSystem) = unit(length(U,S)^2) +@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 fuelefficiency(U::UnitSystem,S::UnitSystem) = area(S,U) @pure frequency(U::UnitSystem,S::UnitSystem) = time(S,U) - -""" -$(convertext(:frequencydrift,"1/time(U,S)^2")) - -Drift of `frequency` per `time` or `frequencydrift` (Hz⋅s⁻¹, s⁻²), unit conversion factor. -```Julia -julia> frequencydrift(IAU,Metric) day²⋅Hz⋅s⁻¹ -$(frequencydrift(IAU,Metric)) -``` -""" +@pure angularfrequency(U::UnitSystem,S::UnitSystem) = unit(angle(U,S)*time(S,U)) @pure frequencydrift(U::UnitSystem,S::UnitSystem) = unit(time(S,U)^2) - -""" -$(convertext(:speed,"lightspeed(S)/lightspeed(U)")) - -Velocity or `length` per `time` or `speed` (m⋅s⁻¹), unit conversion factor. - -```Julia -julia> speed(CGS,Metric) # m⋅cm⁻¹ -$(speed(CGS,Metric)) - -julia> speed(IAU,Metric) # m⋅day⋅s⁻¹⋅au⁻¹ -$(speed(IAU,Metric)) - -julia> speed(English,Metric) # m⋅ft⁻¹ -$(speed(English,Metric)) - -julia> speed(EnglishUS,English) # ft⋅ftUS⁻¹ -$(speed(EnglishUS,English)) -``` -""" @pure speed(U::UnitSystem,S::UnitSystem) = lightspeed(U,S) - -@doc """ -$(convertext(:acceleration,"speed(U,S)/time(U,S)")) - -Specific force or `speed` per `time` or `acceleration` (m⋅s⁻²), unit conversion factor. - -```Julia -julia> acceleration(CGS,Metric) # m⋅s⁻¹⋅gal⁻¹ -$(acceleration(CGS,Metric)) - -julia> acceleration(IAU,Metric) # m⋅day²⋅s⁻²⋅au⁻¹ -$(acceleration(IAU,Metric)) - -julia> acceleration(English,Metric) # m⋅ft⁻¹ -$(acceleration(English,Metric)) - -julia> acceleration(EnglishUS,English) # ft⋅ftUS⁻¹ -$(acceleration(EnglishUS,English)) -``` -""" @pure acceleration(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)/time(U,S)) - -""" -$(convertext(:jerk,"speed(U,S)/time(U,S)^2")) - -Jolt or `acceleration` per `time` or `jerk` (m⋅s⁻³), unit conversion factor. - -```Julia -julia> jerk(CGS,Metric) # m⋅cm⁻¹ -$(jerk(CGS,Metric)) - -julia> jerk(IAU,Metric) # m⋅day³⋅s⁻³⋅au⁻¹ -$(jerk(IAU,Metric)) - -julia> jerk(English,Metric) # m⋅ft⁻¹ -$(jerk(English,Metric)) - -julia> jerk(EnglishUS,English) # ft⋅ftUS⁻¹ -$(jerk(EnglishUS,English)) -``` -""" @pure jerk(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)/time(U,S)^2) - -""" -$(convertext(:snap,"speed(U,S)/time(U,S)^3")) - -Jounce or `jerk` per `time` or `snap` (m⋅s⁻⁴), unit conversion factor. - -```Julia -julia> snap(CGS,Metric) # m⋅cm⁻¹ -$(snap(CGS,Metric)) - -julia> snap(IAU,Metric) # m⋅day⁴⋅s⁻⁴⋅au⁻¹ -$(snap(IAU,Metric)) - -julia> snap(English,Metric) # m⋅ft⁻¹ -$(snap(English,Metric)) - -julia> snap(EnglishUS,English) # ft⋅ftUS⁻¹ -$(snap(EnglishUS,English)) -``` -""" @pure snap(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)/time(U,S)^3) - -""" -$(convertext(:volumeflow,"area(U,S)*speed(U,S)")) - -Volumetric flow rate or `volumeflow` (m³⋅s⁻¹), unit conversion factor. - -```Julia -julia> volumeflow(CGS,Metric) # m³⋅cm⁻³ -$(volume(CGS,Metric)) - -julia> volumeflow(English,Metric) # m³⋅ft⁻³ -$(volume(English,Metric)) - -julia> volumeflow(EnglishUS,English) # ft³⋅ftUS⁻³ -$(volume(EnglishUS,English)) -``` -""" +@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)) - -""" -$(convertext(:specificenergy,"speed(U,S)^2")) - -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(EnglishUS,English) # ft²⋅ftUS⁻² -$(specificenergy(EnglishUS,English)) -``` -""" -@pure specificenergy(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)^2) +@pure specificenergy(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)^2/gravity(U,S)) # kinematic -@doc """ -$(convertext(:mass,"electronmass(S)/electronmass(U)")) - -Inertal `mass` or matter quantity or resistance to aceleration (kg), unit conversion factor. - -```Julia -julia> mass(CGS,Metric) # kg⋅g⁻¹ -$(mass(CGS,Metric)) - -julia> mass(CODATA,Metric) # kg⋅kg⁻¹ -$(mass(CODATA,Metric)) - -julia> mass(Conventional,Metric) # kg⋅kg⁻¹ -$(mass(Conventional,Metric)) - -julia> mass(English,Metric) # kg⋅slug⁻¹ -$(mass(English,Metric)) - -julia> mass(IAU,Metric) # kg⋅m⊙⁻¹ -$(mass(IAU,Metric)) - -julia> mass(PlanckGauss,Metric) # kg⋅mP⁻¹ -$(mass(PlanckGauss,Metric)) -``` -""" mass, slug, mₛ - +@pure inertia(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/gravity(U,S)) @pure energy(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)*specificenergy(U,S)) -""" -$(convertext(:energy,"mass(U,S)*specificenergy(U,S)")) - -Work or heat or `energy` (J, N⋅m, kg⋅m²⋅s⁻²), unit conversion factor. - -```Julia -julia> energy(CGS,Metric) # J⋅erg⁻¹ -$(energy(CGS,Metric)) - -julia> energy(CGS,English) # ft⋅lb⋅erg⁻¹ -$(energy(CGS,English)) - -julia> energy(English,Metric) # J⋅ft⁻¹⋅lb⁻¹ -$(energy(English,Metric)) - -julia> 0.001/3600 # J⋅kW⁻¹⋅h⁻¹ -$(0.001/3600) - -julia> 1/kcal # J⋅kcalₜₕ⁻¹ -$(1/kcal) - -julia> 1/BTUJ # J⋅BTU⁻¹ -$(1/1055.036345118633) - -julia> 1/charge(SI2019) # J⋅eV⁻¹ -$(1/charge(SI2019)) -``` -""" energy, cal, kcal, BTUJ, BTUftlb - -""" -$(convertext(:power,"energy(U,S)/time(U,S))")) - -Radiant flux or `power` or `energy` per `time` (W, J⋅s⁻¹, kg⋅m²⋅s⁻³), unit conversion factor. - -```Julia -julia> power(CGS,Metric) # W⋅s⋅erg⁻¹ -$(power(CGS,Metric)) - -julia> power(English,Metric) # W⋅s⋅ft⁻¹⋅lb⁻¹ -$(power(English,Metric)) -``` -""" @pure power(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)/time(U,S)) - -@pure force(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)*acceleration(U,S)) -""" -$(convertext(:force,"mass(U,S)*acceleration(U,S)")) - -Weight or force or `mass` times `acceleration` (N, kg⋅m⋅s⁻²), unit conversion factor. - -```Julia -julia> force(CGS,Metric) # N⋅dyn⁻¹ -$(force(CGS,Metric)) - -julia> force(CGS,English) # lb⋅dyn⁻¹ -$(force(CGS,English)) - -julia> force(English,Metric) # N⋅lb⁻¹ -$(force(English,Metric)) - -julia> force(1/lbm,Metric,English) # pdl⋅N⁻¹ -$(force(1/lbm,Metric,English)) - -julia> g₀ # kp⋅N⁻¹ -$g₀ -``` -""" force, g₀, g0, lbm - -@pure pressure(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/length(U,S)/time(U,S)^2) -@doc """ -$(convertext(:pressure,"energy(U,S)/volume(U,S)")) - -Pressure or stress or `force` per `area` (Pa, N⋅m⁻², kg⋅m⁻¹⋅s⁻²), unit conversion factor. - -```Julia -julia> pressure(CGS,Metric) # Pa⋅Ba⁻¹ -$(pressure(CGS,Metric)) - -julia> 1/atm # Pa⋅atm⁻¹ -$(1/atm) - -julia> pressure(English,Metric) # Pa⋅ft²⋅lb⁻¹ -$(pressure(English,Metric)) - -julia> pressure(Metric,English)/12^2 # psi⋅Pa⁻¹ -$(pressure(Metric,English)/12^2) -``` -""" pressure, atm +@pure force(U::UnitSystem,S::UnitSystem) = unit(inertia(U,S)*acceleration(U,S)) +@pure gforce(U::UnitSystem,S::UnitSystem) = unit(acceleration(U,S)/gravity(U,S)) +@pure pressure(U::UnitSystem,S::UnitSystem) = unit(force(U,S)/area(U,S)) # mechanical -""" -$(convertext(:momentum,"mass(U,S)*speed(U,S)")) - -Linear `momentum` or `mass` times `speed` (N⋅s, kg⋅m⋅s⁻¹), unit conversion factor. - -```Julia -julia> momentum(CGS,Metric) # N⋅dyn⁻¹ -$(momentum(CGS,Metric)) - -julia> momentum(CGS,English) # lb⋅dyn⁻¹ -$(momentum(CGS,English)) - -julia> momentum(English,Metric) # N⋅lb⁻¹ -$(momentum(English,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)) - -""" -$(convertext(:angularmomentum,"momentum(U,S)*length(U,S)")) - -Rotational momentum or `angularmomentum` (N⋅m⋅s, kg⋅m²⋅s⁻¹), unit conversion factor. - -```Julia -julia> momentum(CGS,Metric) # N⋅m⋅dyn⁻¹⋅cm⁻¹ -$(momentum(CGS,Metric)) - -julia> momentum(CGS,English) # lb⋅ft⋅dyn⁻¹⋅cm⁻¹ -$(momentum(CGS,English)) - -julia> momentum(English,Metric) # N⋅m⋅lb⁻¹⋅ft⁻¹ -$(momentum(English,Metric)) -``` -""" -@pure angularmomentum(U::UnitSystem,S::UnitSystem) = unit(momentum(U,S)*length(U,S)) - -""" -$(convertext(:yank,"mass(U,S)*jerk(U,S)")) - -Rate of change of `force` or `yank` (N⋅s⁻¹, kg⋅m⋅s⁻³), unit conversion factor. - -```Julia -julia> yank(CGS,Metric) # N⋅dyn⁻¹ -$(yank(CGS,Metric)) - -julia> yank(CGS,English) # lb⋅dyn⁻¹ -$(yank(CGS,English)) - -julia> yank(English,Metric) # N⋅lb⁻¹⋅ -$(yank(English,Metric)) -``` -""" +@pure angularmomentum(U::UnitSystem,S::UnitSystem) = unit(momentum(U,S)*length(U,S)*angle(U,S)) @pure yank(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)*jerk(U,S)) - -""" -$(convertext(:areadensity,"mass(U,S)/area(U,S)")) - -Surface or `areadensity` or `mass` per `area` (kg⋅m⁻²), unit conversion factor. - -```Julia -julia> areadensity(CGS,Metric) # kg⋅cm²⋅g⁻¹⋅m⁻² -$(areadensity(CGS,Metric)) - -julia> areadensity(CGS,English) # slug⋅cm²⋅g⁻¹⋅ft⁻² -$(areadensity(CGS,English)) - -julia> areadensity(English,Metric) # kg⋅ft²⋅slug⁻¹⋅m⁻² -$(areadensity(English,Metric)) -``` -""" @pure areadensity(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/area(U,S)) - -""" -$(convertext(:density,"mass(U,S)/volume(U,S)")) - -Specific mass or `mass` per `volume` or `density` (kg⋅m⁻³), unit conversion factor. - -```Julia -julia> density(CGS,Metric) # kg⋅cm³⋅g⁻¹⋅m⁻³ -$(density(CGS,Metric)) - -julia> density(CGS,English) # slug⋅cm³⋅g⁻¹⋅ft⁻³ -$(density(CGS,English)) - -julia> density(English,Metric) # kg⋅ft³⋅slug⁻¹⋅m⁻³ -$(density(English,Metric)) -``` -""" @pure density(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/volume(U,S)) - -""" -$(convertext(:specificvolume,"volume(U,S)/mass(U,S)")) - -Reciprocal `density` or `volume` per `mass` or `specificvolume` (m³⋅kg), unit conversion factor. - -```Julia -julia> specificvolume(CGS,Metric) # g⋅m³⋅kg⁻¹⋅cm⁻³ -$(specificvolume(CGS,Metric)) - -julia> specificvolume(CGS,English) # kg⋅ft³⋅slug⁻¹⋅cm⁻³ -$(specificvolume(CGS,English)) - -julia> specificvolume(English,Metric) # slug⋅m³⋅kg⁻¹⋅ft⁻³ -$(specificvolume(English,Metric)) -``` -""" +@pure specificweight(U::UnitSystem,S::UnitSystem) = unit(pressure(U,S)/speed(U,S)^2) @pure specificvolume(U::UnitSystem,S::UnitSystem) = unit(volume(U,S)/mass(U,S)) - -""" -$(convertext(:action,"energy(U,S)*time(U,S)")) - -Integrated `momentum` over `length` or `action` (J⋅s, N⋅m⋅s), unit conversion factor. - -```Julia -julia> action(CGS,Metric) # J⋅erg⁻¹ -$(action(CGS,Metric)) - -julia> action(CGS,English) # ft⋅lb⋅erg⁻¹ -$(action(CGS,English)) - -julia> action(English,Metric) # J⋅ft⁻¹⋅lb⁻¹ -$(action(English,Metric)) -``` -""" -@pure action(U::UnitSystem,S::UnitSystem) = unit(momentum(U,S)*length(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. - -```Julia -julia> stiffness(CGS,Metric) # kg⋅g⁻¹ -$(stiffness(CGS,Metric)) - -julia> stiffness(CGS,English) # slug⋅g⁻¹ -$(stiffness(CGS,English)) - -julia> stiffness(English,Metric) # kg⋅slug⁻¹ -$(stiffness(English,Metric)) -``` -""" -@pure stiffness(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)/area(U,S)) - -""" -$(convertext(:intensity,"power(U,S)/area(U,S)")) - -Heat flux density or irradiance or `power` per `area` (W⋅m⁻², kg⋅s⁻³), unit conversion factor. - -```Julia -julia> intensity(CGS,Metric) # kg⋅g⁻¹ -$(intensity(CGS,Metric)) - -julia> intensity(CGS,English) # slug⋅g⁻¹ -$(intensity(CGS,English)) - -julia> intensity(English,Metric) # kg⋅slug⁻¹ -$(intensity(English,Metric)) -``` -""" +@pure action(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)*time(U,S)) +@pure stiffness(U::UnitSystem,S::UnitSystem) = unit(force(U,S)/length(U,S)) @pure intensity(U::UnitSystem,S::UnitSystem) = unit(power(U,S)/area(U,S)) - -""" -$(convertext(:diffusivity,"planck(U,S)/mass(U,S)")) - -Thermal `diffusivity` or kinematic viscostiy (m²⋅s⁻¹), unit conversion factor. - -```Julia -julia> diffusivity(CGS,Metric) # m²⋅cm⁻² -$(diffusivity(CGS,Metric)) - -julia> diffusivity(English,Metric) # m²⋅ft⁻² -$(diffusivity(English,Metric)) - -julia> diffusivity(EnglishUS,English) # ft²⋅ftUS⁻² -$(diffusivity(EnglishUS,English)) -``` -""" -@pure diffusivity(U::UnitSystem,S::UnitSystem) = unit((planckreduced(S)*electronmass(U))/(planckreduced(U)*electronmass(S))) - -""" -$(convertext(:viscosity,"mass(U,S)/length(U,S)/time(U,S)^2")) - -Resistance to deformation or `viscosity` (Pa⋅s, kg⋅m⁻¹⋅s⁻¹), unit conversion factor. - -```Julia -julia> viscosity(CGS,Metric) # Pa⋅Ba⁻¹ -$(viscosity(CGS,Metric)) - -julia> viscosity(English,Metric) # Pa⋅ft²⋅lb⁻¹ -$(viscosity(English,Metric)) -``` -""" -@pure viscosity(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/length(U,S)/time(U,S)) - -""" -$(convertext(:lineardensity,"mass(U,S)/length(U,S)")) - -Amount of `lineardensity` or `mass` per `length` (kg⋅m⁻¹), unit conversion factor. - -```Julia -julia> lineardensity(CGS,Metric) # kg⋅cm¹⋅g⁻¹⋅m⁻¹ -$(lineardensity(CGS,Metric)) - -julia> lineardensity(CGS,English) # slug⋅cm¹⋅g⁻¹⋅ft⁻¹ -$(lineardensity(CGS,English)) - -julia> lineardensity(English,Metric) # kg⋅ft¹⋅slug⁻¹⋅m⁻¹ -$(lineardensity(English,Metric)) -``` -""" +@pure diffusivity(U::UnitSystem,S::UnitSystem) = unit(speed(U,S)*length(U,S)) +@pure viscosity(U::UnitSystem,S::UnitSystem) = unit(force(U,S)/speed(U,S)/length(U,S)) @pure lineardensity(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/length(U,S)) - -""" -$(convertext(:massflow,"mass(U,S)/time(U,S)")) - -Rate of `massflow` or `mass` per `time` (kg⋅s⁻¹), unit conversion factor. - -```Julia -julia> massflow(CGS,Metric) # kg⋅g⁻¹ -$(massflow(CGS,Metric)) - -julia> massflow(CODATA,Metric) # kg⋅kg⁻¹ -$(massflow(CODATA,Metric)) - -julia> massflow(Conventional,Metric) # kg⋅kg⁻¹ -$(massflow(Conventional,Metric)) - -julia> massflow(English,Metric) # kg⋅slug⁻¹ -$(massflow(English,Metric)) -``` -""" @pure massflow(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)/time(U,S)) - -""" -$(convertext(:spectralflux,"power(U,S)/length(U,S)")) - -Spectral power or `radiantflux` per wave `length` (W⋅m⁻¹), unit conversion factor. - -```Julia -julia> spectralflux(CGS,Metric) # kg⋅m⋅g⁻¹⋅cm⁻¹ -$(spectralflux(CGS,Metric)) - -julia> spectralflux(CGS,English) # slug⋅ft⋅g⁻¹⋅cm⁻¹ -$(spectralflux(CGS,English)) - -julia> spectralflux(English,Metric) # kg⋅m⋅slug⁻¹⋅ft⁻¹ -$(spectralflux(English,Metric)) -``` -""" @pure spectralflux(U::UnitSystem,S::UnitSystem) = unit(power(U,S)/length(U,S)) - -""" -$(convertext(:powerdensity,"power(U,S)/volume(U,S)")) - -Spectral irradiance (volume) or `powerdensity` (W⋅m⁻³), unit conversion factor. - -```Julia -julia> powerdensity(CGS,Metric) # kg⋅cm⋅g⁻¹⋅m⁻¹ -$(powerdensity(CGS,Metric)) - -julia> powerdensity(CGS,English) # slug⋅cm⋅g⁻¹⋅ft⁻¹ -$(powerdensity(CGS,English)) - -julia> powerdensity(English,Metric) # kg⋅ft⋅slug⁻¹⋅m⁻¹ -$(powerdensity(English,Metric)) -``` -""" @pure powerdensity(U::UnitSystem,S::UnitSystem) = unit(power(U,S)/volume(U,S)) - -""" -$(convertext(:compressibility,"1/pressure(U,S)")) - -Relative volume change or `compressibility` (Pa⁻¹), unit conversion factor. - -```Julia -julia> compressibility(CGS,Metric) # Ba⋅Pa⁻¹ -$(compressibility(CGS,Metric)) - -julia> compressibility(English,Metric) # lb⋅ft⁻²⋅Pa⁻¹ -$(compressibility(English,Metric)) - -julia> compressibility(Metric,English)/12^2 # Pa⋅psi⁻¹ -$(compressibility(Metric,English)/12^2) -``` -""" @pure compressibility(U::UnitSystem,S::UnitSystem) = pressure(S,U) - -""" -$(convertext(:fluence,"energy(U,S)/area(U,S")) - -Radiant exposure or `energy` per `area` or `fluence` (J⋅m⁻²), unit conversion factor. - -```Julia -julia> fluence(CGS,Metric) # kg⋅g⁻¹ -$(mass(CGS,Metric)) - -julia> fluence(CODATA,Metric) # kg⋅kg⁻¹ -$(mass(CODATA,Metric)) - -julia> fluence(Conventional,Metric) # kg⋅kg⁻¹ -$(fluence(Conventional,Metric)) - -julia> fluence(English,Metric) # kg⋅slug⁻¹ -$(fluence(English,Metric)) -``` -""" @pure fluence(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)/area(U,S)) - -""" -$(convertext(:rotationalinertia,"mass(U,S)*area(U,S)")) - -Moment of inertia or `rotationalinertia` (kg⋅m²), unit conversion factor. - -```Julia -julia> rotationalinertia(CGS,Metric) # kg⋅m²⋅g⁻¹⋅cm⁻² -$(rotationalinertia(CGS,Metric)) - -julia> rotationalinertia(CGS,English) # slug⋅ft²⋅g⁻¹⋅cm⁻² -$(rotationalinertia(CGS,English)) - -julia> rotationalinertia(English,Metric) # kg⋅m²⋅slug⁻¹⋅ft⁻² -$(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) = unit(time(U,S)*pressure(U,S)^2) - -""" -$(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) + +include("kinematicdocs.jl") diff --git a/src/kinematicdocs.jl b/src/kinematicdocs.jl new file mode 100644 index 0000000..f560816 --- /dev/null +++ b/src/kinematicdocs.jl @@ -0,0 +1,886 @@ + +# This file is part of UnitSystems.jl +# It is licensed under the MIT license +# UnitSystems Copyright (C) 2020 Michael Reed +# _ _ _ +# | | | | | | +# ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ +# / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | +# | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | +# \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| +# +# https://github.com/chakravala +# https://crucialflow.com + +@doc """ +$(convertext(:angle,"angle(U,S)")) + +Extent of one-dimensional angle or `angle` (rad), unit conversion factor. + +```Julia +julia> angle(CGS,Metric) # rad⋅rad⁻¹ +$(angle(CGS,Metric)) +``` +""" angle, A + +@doc """ +$(convertext(:solidangle,"angle(U,S)^2")) + +Extent of two-dimensional angle or `solidangle` (rad²), unit conversion factor. + +```Julia +julia> solidangle(CGS,Metric) # rad²⋅rad⁻² +$(solidangle(CGS,Metric)) +``` +""" solidangle + +# spacetime + +@doc """ +$(convertext(:area,"length(U,S)^2")) + +Extent of two-dimensional shape or `area` (m²), unit conversion factor. + +```Julia +julia> area(CGS,Metric) # m²⋅cm⁻² +$(area(CGS,Metric)) + +julia> area(English,Metric) # m²⋅ft⁻² +$(area(English,Metric)) + +julia> area(Survey,English) # ft²⋅ftUS⁻² +$(area(Survey,English)) +``` +""" area + +@doc """ +$(convertext(:volume,"length(U,S)^3")) + +Extent of three-dimensional shape or `volume` (m³), unit conversion factor. + +```Julia +julia> volume(CGS,Metric) # m³⋅cm⁻³ +$(volume(CGS,Metric)) + +julia> volume(English,Metric) # m³⋅ft⁻³ +$(volume(English,Metric)) + +julia> volume(Survey,English) # ft³⋅ftUS⁻³ +$(volume(Survey,English)) +``` +""" volume + +@doc """ +$(convertext(:wavenumber,"1/length(U,S)")) + +Number of occurences per unit of space (m⁻¹), unit conversion factor. + +```Julia +julia> wavenumber(CGS,Metric) # cm⋅m⁻¹ +$(wavenumber(CGS,Metric)) + +julia> wavenumber(English,Metric) # ft⋅m⁻¹ +$(wavenumber(English,Metric)) +``` +""" wavenumber + +@doc """ +$(convertext(:angularwavenumber,"angle(U,S)/length(U,S)")) + +Number of occurences per unit of space (m⁻¹), unit conversion factor. + +```Julia +julia> angularwavenumber(CGS,Metric) # cm⋅m⁻¹ +$(angularwavenumber(CGS,Metric)) + +julia> angularwavenumber(English,Metric) # ft⋅m⁻¹ +$(angularwavenumber(English,Metric)) +``` +""" angularwavenumber + +@doc """ +$(convertext(:fuelefficiency,"1/area(U,S)")) + +Distance per volume or `fuelefficiency` (m⋅m⁻³, m⁻²), unit conversion factor. + +```Julia +julia> fuelefficiency(CGS,Metric) # cm²⋅m⁻² +$(fuelefficiency(CGS,Metric)) + +julia> fuelefficiency(English,Metric) # ft²⋅m⁻² +$(fuelefficiency(English,Metric)) +``` +""" fuelefficiency + +@doc """ +$(convertext(:frequency,"1/time(U,S)")) + +Number of occurences per unit of time (Hz or s⁻¹), unit conversion factor. + +```Julia +julia> frequency(IAU,Metric) day⋅s⁻¹ +$(frequency(IAU,Metric)) +``` +""" frequency + +@doc """ +$(convertext(:angularfrequency,"angle(U,S)/time(U,S)")) + +Circular radian frequency (rad⋅Hz or rad⋅s⁻¹), unit conversion factor. + +```Julia +julia> angularfrequency(IAU,Metric) day⋅s⁻¹ +$(frequency(IAU,Metric)) +``` +""" angularfrequency + +@doc """ +$(convertext(:frequencydrift,"1/time(U,S)^2")) + +Drift of `frequency` per `time` or `frequencydrift` (Hz⋅s⁻¹, s⁻²), unit conversion factor. +```Julia +julia> frequencydrift(IAU,Metric) day²⋅Hz⋅s⁻¹ +$(frequencydrift(IAU,Metric)) +``` +""" frequencydrift + +@doc """ +$(convertext(:speed,"lightspeed(S)/lightspeed(U)")) + +Velocity or `length` per `time` or `speed` (m⋅s⁻¹), unit conversion factor. + +```Julia +julia> speed(CGS,Metric) # m⋅cm⁻¹ +$(speed(CGS,Metric)) + +julia> speed(IAU,Metric) # m⋅day⋅s⁻¹⋅au⁻¹ +$(speed(IAU,Metric)) + +julia> speed(English,Metric) # m⋅ft⁻¹ +$(speed(English,Metric)) + +julia> speed(Survey,English) # ft⋅ftUS⁻¹ +$(speed(Survey,English)) +``` +""" speed + +@doc """ +$(convertext(:acceleration,"speed(U,S)/time(U,S)")) + +Specific force or `speed` per `time` or `acceleration` (m⋅s⁻²), unit conversion factor. + +```Julia +julia> acceleration(CGS,Metric) # m⋅s⁻¹⋅gal⁻¹ +$(acceleration(CGS,Metric)) + +julia> acceleration(IAU,Metric) # m⋅day²⋅s⁻²⋅au⁻¹ +$(acceleration(IAU,Metric)) + +julia> acceleration(English,Metric) # m⋅ft⁻¹ +$(acceleration(English,Metric)) + +julia> acceleration(Survey,English) # ft⋅ftUS⁻¹ +$(acceleration(Survey,English)) +``` +""" acceleration + +@doc """ +$(convertext(:jerk,"speed(U,S)/time(U,S)^2")) + +Jolt or `acceleration` per `time` or `jerk` (m⋅s⁻³), unit conversion factor. + +```Julia +julia> jerk(CGS,Metric) # m⋅cm⁻¹ +$(jerk(CGS,Metric)) + +julia> jerk(IAU,Metric) # m⋅day³⋅s⁻³⋅au⁻¹ +$(jerk(IAU,Metric)) + +julia> jerk(English,Metric) # m⋅ft⁻¹ +$(jerk(English,Metric)) + +julia> jerk(Survey,English) # ft⋅ftUS⁻¹ +$(jerk(Survey,English)) +``` +""" jerk + +@doc """ +$(convertext(:snap,"speed(U,S)/time(U,S)^3")) + +Jounce or `jerk` per `time` or `snap` (m⋅s⁻⁴), unit conversion factor. + +```Julia +julia> snap(CGS,Metric) # m⋅cm⁻¹ +$(snap(CGS,Metric)) + +julia> snap(IAU,Metric) # m⋅day⁴⋅s⁻⁴⋅au⁻¹ +$(snap(IAU,Metric)) + +julia> snap(English,Metric) # m⋅ft⁻¹ +$(snap(English,Metric)) + +julia> snap(Survey,English) # ft⋅ftUS⁻¹ +$(snap(Survey,English)) +``` +""" snap + +@doc """ +$(convertext(:crackle,"speed(U,S)/time(U,S)^4")) + +A `snap` per `time` or `crackle` (m⋅s⁻⁵), unit conversion factor. + +```Julia +julia> crackle(CGS,Metric) # m⋅cm⁻¹ +$(crackle(CGS,Metric)) + +julia> crackle(IAU,Metric) # m⋅day⁵⋅s⁻⁵⋅au⁻¹ +$(crackle(IAU,Metric)) + +julia> crackle(English,Metric) # m⋅ft⁻¹ +$(crackle(English,Metric)) + +julia> crackle(Survey,English) # ft⋅ftUS⁻¹ +$(crackle(Survey,English)) +``` +""" crackle + +@doc """ +$(convertext(:pop,"speed(U,S)/time(U,S)^5")) + +A `crackle` per `time` or `pop` (m⋅s⁻⁶), unit conversion factor. + +```Julia +julia> pop(CGS,Metric) # m⋅cm⁻¹ +$(pop(CGS,Metric)) + +julia> pop(IAU,Metric) # m⋅day⁶⋅s⁻⁶⋅au⁻¹ +$(pop(IAU,Metric)) + +julia> pop(English,Metric) # m⋅ft⁻¹ +$(pop(English,Metric)) + +julia> pop(Survey,English) # ft⋅ftUS⁻¹ +$(pop(Survey,English)) +``` +""" pop + +@doc """ +$(convertext(:volumeflow,"area(U,S)*speed(U,S)")) + +Volumetric flow rate or `volumeflow` (m³⋅s⁻¹), unit conversion factor. + +```Julia +julia> volumeflow(CGS,Metric) # m³⋅cm⁻³ +$(volume(CGS,Metric)) + +julia> volumeflow(English,Metric) # m³⋅ft⁻³ +$(volume(English,Metric)) + +julia> volumeflow(Survey,English) # ft³⋅ftUS⁻³ +$(volume(Survey,English)) +``` +""" volumeflow + +@doc """ +$(convertext(:specificenergy,"speed(U,S)^2")) + +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 + +# kinematic + +@doc """ +$(convertext(:mass,"electronmass(S)/electronmass(U)")) + +Inertal `mass` or matter quantity or resistance to aceleration (kg), unit conversion factor. + +```Julia +julia> mass(CGS,Metric) # kg⋅g⁻¹ +$(mass(CGS,Metric)) + +julia> mass(CODATA,Metric) # kg⋅kg⁻¹ +$(mass(CODATA,Metric)) + +julia> mass(Conventional,Metric) # kg⋅kg⁻¹ +$(mass(Conventional,Metric)) + +julia> mass(English,Metric) # kg⋅slug⁻¹ +$(mass(English,Metric)) + +julia> mass(IAU,Metric) # kg⋅m⊙⁻¹ +$(mass(IAU,Metric)) + +julia> mass(PlanckGauss,Metric) # kg⋅mP⁻¹ +$(mass(PlanckGauss,Metric)) +``` +""" mass, slug, M + +@doc """ +$(convertext(:inertia,"mass(U,S)/gravity(U,S)")) + +Inertal `mass` or matter quantity or resistance to aceleration (kg), unit conversion factor. + +```Julia +julia> inertia(CGS,Metric) # kg⋅g⁻¹ +$(inertia(CGS,Metric)) + +julia> inertia(CODATA,Metric) # kg⋅kg⁻¹ +$(inertia(CODATA,Metric)) + +julia> inertia(Conventional,Metric) # kg⋅kg⁻¹ +$(inertia(Conventional,Metric)) + +julia> inertia(English,Metric) # kg⋅slug⁻¹ +$(inertia(English,Metric)) + +julia> inertia(IAU,Metric) # kg⋅m⊙⁻¹ +$(inertia(IAU,Metric)) + +julia> inertia(PlanckGauss,Metric) # kg⋅mP⁻¹ +$(inertia(PlanckGauss,Metric)) +``` +""" inertia + +@doc """ +$(convertext(:energy,"mass(U,S)*specificenergy(U,S)")) + +Work or heat or `energy` (J, N⋅m, kg⋅m²⋅s⁻²), unit conversion factor. + +```Julia +julia> energy(CGS,Metric) # J⋅erg⁻¹ +$(energy(CGS,Metric)) + +julia> energy(CGS,English) # ft⋅lb⋅erg⁻¹ +$(energy(CGS,English)) + +julia> energy(English,Metric) # J⋅ft⁻¹⋅lb⁻¹ +$(energy(English,Metric)) + +julia> 0.001/3600 # J⋅kW⁻¹⋅h⁻¹ +$(0.001/3600) + +julia> 1/elementarycharge(SI2019) # J⋅eV⁻¹ +$(inv(elementarycharge(SI2019))) +``` +""" energy +#julia> inv(kilocalorie(SI2019) # J⋅kcalₜₕ⁻¹ +#$(inv(kilocalorie(SI2019))) +#julia> 1/BTUJ # J⋅BTU⁻¹ +#$(1/1055.036345118633) + +@doc """ +$(convertext(:power,"energy(U,S)/time(U,S))")) + +Radiant flux or `power` or `energy` per `time` (W, J⋅s⁻¹, kg⋅m²⋅s⁻³), unit conversion factor. + +```Julia +julia> power(CGS,Metric) # W⋅s⋅erg⁻¹ +$(power(CGS,Metric)) + +julia> power(English,Metric) # W⋅s⋅ft⁻¹⋅lb⁻¹ +$(power(English,Metric)) +``` +""" power + +@doc """ +$(convertext(:force,"inertia(U,S)*acceleration(U,S)")) + +Weight or force or `inertia` times `acceleration` (N, kg⋅m⋅s⁻²), unit conversion factor. + +```Julia +julia> force(CGS,Metric) # N⋅dyn⁻¹ +$(force(CGS,Metric)) + +julia> force(CGS,English) # lb⋅dyn⁻¹ +$(force(CGS,English)) + +julia> force(English,Metric) # N⋅lb⁻¹ +$(force(English,Metric)) + +julia> force(FPS,Metric) # pdl⋅N⁻¹ +$(force(FPS,Metric)) + +julia> force(MetricEngineering,Metric) # kp⋅N⁻¹ +$(force(MetricEngineering,Metric)) +``` +""" force, F + +@doc """ +$(convertext(:gforce,"acceleration(U,S)/gravity(U,S)")) + +Weight or force per `mass` or `gforce` (N/kg, m⋅s⁻²), unit conversion factor. +""" gforce + +@doc """ +$(convertext(:pressure,"force(U,S)/area(U,S)")) + +Pressure or stress or `force` per `area` (Pa, N⋅m⁻², kg⋅m⁻¹⋅s⁻²), unit conversion factor. + +```Julia +julia> pressure(CGS,Metric) # Pa⋅Ba⁻¹ +$(pressure(CGS,Metric)) + +julia> 1/atm # Pa⋅atm⁻¹ +$(inv(atm)) + +julia> pressure(English,Metric) # Pa⋅ft²⋅lb⁻¹ +$(pressure(English,Metric)) +``` +""" pressure +#julia> pressure(Metric,English)/12^2 # psi⋅Pa⁻¹ +#$(pressure(Metric,English)/(𝟐^2*𝟑)^2) + +# mechanical + +@doc """ +$(convertext(:impulse,"force(U,S)*time(U,S)")) + +Linear `impulse` or `force` times `time` (N⋅s, kg⋅m⋅s⁻¹), unit conversion factor. + +```Julia +julia> impulse(CGS,Metric) # N⋅dyn⁻¹ +$(impulse(CGS,Metric)) + +julia> impulse(CGS,English) # lb⋅dyn⁻¹ +$(impulse(CGS,English)) + +julia> impulse(English,Metric) # N⋅lb⁻¹ +$(impulse(English,Metric)) +``` +""" impulse + +@doc """ +$(convertext(:momentum,"mass(U,S)*speed(U,S)")) + +Linear `momentum` or `mass` times `speed` (N⋅s, kg⋅m⋅s⁻¹), unit conversion factor. + +```Julia +julia> momentum(CGS,Metric) # N⋅dyn⁻¹ +$(momentum(CGS,Metric)) + +julia> momentum(CGS,English) # lb⋅dyn⁻¹ +$(momentum(CGS,English)) + +julia> momentum(British,Metric) # N⋅lb⁻¹ +$(momentum(British,Metric)) +``` +""" momentum + +@doc """ +$(convertext(:angularmomentum,"momentum(U,S)*lengt(U,S)*angle(U,S)")) + +Rotational momentum or `angularmomentum` (N⋅m⋅s, kg⋅m²⋅s⁻¹), unit conversion factor. + +```Julia +julia> momentum(CGS,Metric) # N⋅m⋅dyn⁻¹⋅cm⁻¹ +$(momentum(CGS,Metric)) + +julia> momentum(CGS,English) # lb⋅ft⋅dyn⁻¹⋅cm⁻¹ +$(momentum(CGS,English)) + +julia> momentum(British,Metric) # N⋅m⋅lb⁻¹⋅ft⁻¹ +$(momentum(British,Metric)) +``` +""" angularmomentum + +@doc """ +$(convertext(:yank,"mass(U,S)*jerk(U,S)")) + +Rate of change of `force` or `yank` (N⋅s⁻¹, kg⋅m⋅s⁻³), unit conversion factor. + +```Julia +julia> yank(CGS,Metric) # N⋅dyn⁻¹ +$(yank(CGS,Metric)) + +julia> yank(CGS,English) # lb⋅dyn⁻¹ +$(yank(CGS,English)) + +julia> yank(British,Metric) # N⋅lb⁻¹⋅ +$(yank(British,Metric)) +``` +""" yank + +@doc """ +$(convertext(:areadensity,"mass(U,S)/area(U,S)")) + +Surface or `areadensity` or `mass` per `area` (kg⋅m⁻²), unit conversion factor. + +```Julia +julia> areadensity(CGS,Metric) # kg⋅cm²⋅g⁻¹⋅m⁻² +$(areadensity(CGS,Metric)) + +julia> areadensity(CGS,English) # lb⋅cm²⋅g⁻¹⋅ft⁻² +$(areadensity(CGS,English)) + +julia> areadensity(English,Metric) # kg⋅ft²⋅lb⁻¹⋅m⁻² +$(areadensity(English,Metric)) + +julia> areadensity(British,Metric) # kg⋅ft²⋅slug⁻¹⋅m⁻² +$(areadensity(British,Metric)) +``` +""" areadensity + +@doc """ +$(convertext(:density,"mass(U,S)/volume(U,S)")) + +Specific mass or `mass` per `volume` or `density` (kg⋅m⁻³), unit conversion factor. + +```Julia +julia> density(CGS,Metric) # kg⋅cm³⋅g⁻¹⋅m⁻³ +$(density(CGS,Metric)) + +julia> density(CGS,Brtish) # slug⋅cm³⋅g⁻¹⋅ft⁻³ +$(density(CGS,British)) + +julia> density(English,Metric) # kg⋅ft³⋅lb⁻¹⋅m⁻³ +$(density(English,Metric)) +``` +""" density + +@doc """ +$(convertext(:specificweight,"pressure(U,S)/speed(U,S)^2")) + +Specific weight or `force` per `volume` or `density` (N⋅m⁻³), unit conversion factor. +```Julia +julia> density(CGS,Metric) # N⋅cm³⋅dyn⁻¹⋅m⁻³ +$(density(CGS,Metric)) + +julia> density(CGS,Brtish) # lb⋅cm³⋅dyn⁻¹⋅ft⁻³ +$(density(CGS,British)) + +julia> density(English,Metric) # N⋅ft³⋅lb⁻¹⋅m⁻³ +$(density(English,Metric)) +``` +""" specificweight + +@doc """ +$(convertext(:specificvolume,"volume(U,S)/mass(U,S)")) + +Reciprocal `density` or `volume` per `mass` or `specificvolume` (m³⋅kg), unit conversion factor. + +```Julia +julia> specificvolume(CGS,Metric) # g⋅m³⋅kg⁻¹⋅cm⁻³ +$(specificvolume(CGS,Metric)) + +julia> specificvolume(CGS,British) # kg⋅ft³⋅slug⁻¹⋅cm⁻³ +$(specificvolume(CGS,British)) + +julia> specificvolume(English,Metric) # lb⋅m³⋅kg⁻¹⋅ft⁻³ +$(specificvolume(English,Metric)) +``` +""" specificvolume + +@doc """ +$(convertext(:action,"energy(U,S)*time(U,S)")) + +Integrated `momentum` over `length` or `action` (J⋅s, N⋅m⋅s), unit conversion factor. + +```Julia +julia> action(CGS,Metric) # J⋅erg⁻¹ +$(action(CGS,Metric)) + +julia> action(CGS,English) # ft⋅lb⋅erg⁻¹ +$(action(CGS,English)) + +julia> action(English,Metric) # J⋅ft⁻¹⋅lb⁻¹ +$(action(English,Metric)) +``` +""" action + +@doc """ +$(convertext(:stiffness,"force(U,S)/length(U,S)")) + +Amount of `force` per `length` or `stiffness` (N⋅m⁻¹, J⋅m⁻², kg⋅s⁻²), unit conversion factor. + +```Julia +julia> stiffness(CGS,Metric) # kg⋅g⁻¹ +$(stiffness(CGS,Metric)) + +julia> stiffness(CGS,English) # lb⋅g⁻¹ +$(stiffness(CGS,English)) + +julia> stiffness(English,Metric) # kg⋅lb⁻¹ +$(stiffness(English,Metric)) +``` +""" stiffness + +@doc """ +$(convertext(:intensity,"power(U,S)/area(U,S)")) + +Heat flux density or irradiance or `power` per `area` (W⋅m⁻², kg⋅s⁻³), unit conversion factor. + +```Julia +julia> intensity(CGS,Metric) # kg⋅g⁻¹ +$(intensity(CGS,Metric)) + +julia> intensity(CGS,English) # lb⋅g⁻¹ +$(intensity(CGS,English)) + +julia> intensity(English,Metric) # kg⋅lb⁻¹ +$(intensity(English,Metric)) +``` +""" intensity + +@doc """ +$(convertext(:diffusivity,"speed(U,S)*length(U,S)")) + +Thermal `diffusivity` or kinematic viscostiy (m²⋅s⁻¹), unit conversion factor. + +```Julia +julia> diffusivity(CGS,Metric) # m²⋅cm⁻² +$(diffusivity(CGS,Metric)) + +julia> diffusivity(English,Metric) # m²⋅ft⁻² +$(diffusivity(English,Metric)) + +julia> diffusivity(Survey,English) # ft²⋅ftUS⁻² +$(diffusivity(Survey,English)) +``` +""" diffusivity + +@doc """ +$(convertext(:viscosity,"inertia(U,S)/length(U,S)/time(U,S)")) + +Resistance to deformation or `viscosity` (Pa⋅s, kg⋅m⁻¹⋅s⁻¹), unit conversion factor. + +```Julia +julia> viscosity(CGS,Metric) # Pa⋅Ba⁻¹ +$(viscosity(CGS,Metric)) + +julia> viscosity(English,Metric) # Pa⋅ft²⋅lb⁻¹ +$(viscosity(English,Metric)) + +julia> viscosity(British,Metric) # Pa⋅ft²⋅lb⁻¹ +$(viscosity(British,Metric)) +``` +""" viscosity + +@doc """ +$(convertext(:lineardensity,"mass(U,S)/length(U,S)")) + +Amount of `lineardensity` or `mass` per `length` (kg⋅m⁻¹), unit conversion factor. + +```Julia +julia> lineardensity(CGS,Metric) # kg⋅cm¹⋅g⁻¹⋅m⁻¹ +$(lineardensity(CGS,Metric)) + +julia> lineardensity(CGS,British) # slug⋅cm¹⋅g⁻¹⋅ft⁻¹ +$(lineardensity(CGS,British)) + +julia> lineardensity(English,Metric) # kg⋅ft¹⋅lb⁻¹⋅m⁻¹ +$(lineardensity(English,Metric)) +``` +""" lineardensity + +@doc """ +$(convertext(:massflow,"mass(U,S)/time(U,S)")) + +Rate of `massflow` or `mass` per `time` (kg⋅s⁻¹), unit conversion factor. + +```Julia +julia> massflow(CGS,Metric) # kg⋅g⁻¹ +$(massflow(CGS,Metric)) + +julia> massflow(CODATA,Metric) # kg⋅kg⁻¹ +$(massflow(CODATA,Metric)) + +julia> massflow(Conventional,Metric) # kg⋅kg⁻¹ +$(massflow(Conventional,Metric)) + +julia> massflow(English,Metric) # kg⋅slug⁻¹ +$(massflow(English,Metric)) +``` +""" massflow + +@doc """ +$(convertext(:spectralflux,"power(U,S)/length(U,S)")) + +Spectral power or `radiantflux` per wave `length` (W⋅m⁻¹), unit conversion factor. + +```Julia +julia> spectralflux(CGS,Metric) # kg⋅m⋅g⁻¹⋅cm⁻¹ +$(spectralflux(CGS,Metric)) + +julia> spectralflux(CGS,English) # lb⋅ft⋅g⁻¹⋅cm⁻¹ +$(spectralflux(CGS,English)) + +julia> spectralflux(English,Metric) # kg⋅m⋅lb⁻¹⋅ft⁻¹ +$(spectralflux(English,Metric)) +``` +""" spectralflux + +@doc """ +$(convertext(:powerdensity,"power(U,S)/volume(U,S)")) + +Spectral irradiance (volume) or `powerdensity` (W⋅m⁻³), unit conversion factor. + +```Julia +julia> powerdensity(CGS,Metric) # kg⋅cm⋅g⁻¹⋅m⁻¹ +$(powerdensity(CGS,Metric)) + +julia> powerdensity(CGS,English) # lb⋅cm⋅g⁻¹⋅ft⁻¹ +$(powerdensity(CGS,English)) + +julia> powerdensity(English,Metric) # kg⋅ft⋅lb⁻¹⋅m⁻¹ +$(powerdensity(English,Metric)) +``` +""" powerdensity + +@doc """ +$(convertext(:compressibility,"1/pressure(U,S)")) + +Relative volume change or `compressibility` (Pa⁻¹), unit conversion factor. + +```Julia +julia> compressibility(CGS,Metric) # Ba⋅Pa⁻¹ +$(compressibility(CGS,Metric)) + +julia> compressibility(English,Metric) # lb⋅ft⁻²⋅Pa⁻¹ +$(compressibility(English,Metric)) +``` +""" compressibility +#julia> compressibility(Metric,English)/12^2 # Pa⋅psi⁻¹ +#$(compressibility(Metric,English)/12^2) + +@doc """ +$(convertext(:fluence,"energy(U,S)/area(U,S")) + +Radiant exposure or `energy` per `area` or `fluence` (J⋅m⁻²), unit conversion factor. + +```Julia +julia> fluence(CGS,Metric) # kg⋅g⁻¹ +$(mass(CGS,Metric)) + +julia> fluence(CODATA,Metric) # kg⋅kg⁻¹ +$(mass(CODATA,Metric)) + +julia> fluence(Conventional,Metric) # kg⋅kg⁻¹ +$(fluence(Conventional,Metric)) + +julia> fluence(English,Metric) # kg⋅lb⁻¹ +$(fluence(English,Metric)) +``` +""" fluence + +@doc """ +$(convertext(:rotationalinertia,"mass(U,S)*area(U,S)")) + +Moment of inertia or `rotationalinertia` (kg⋅m²), unit conversion factor. + +```Julia +julia> rotationalinertia(CGS,Metric) # kg⋅m²⋅g⁻¹⋅cm⁻² +$(rotationalinertia(CGS,Metric)) + +julia> rotationalinertia(CGS,British) # slug⋅ft²⋅g⁻¹⋅cm⁻² +$(rotationalinertia(CGS,British)) + +julia> rotationalinertia(English,Metric) # kg⋅m²⋅lb⁻¹⋅ft⁻² +$(rotationalinertia(English,Metric)) +``` +""" rotationalinertia + +# acoustic + +@doc """ +$(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)) +``` +""" soundexposure + +@doc """ +$(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)) +``` +""" specificimpedance + +@doc """ +$(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)) +``` +""" impedance(U::UnitSystem,S::UnitSystem) + +@doc """ +$(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)) +``` +""" admittance + +@doc """ +$(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⋅lb⁻¹ +$(compliance(English,Metric)) +``` +""" compliance + +@doc """ +$(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⁴⋅lb⁻¹⋅m⁻⁴ +$(inertance(English,Metric)) +``` +""" inertance diff --git a/src/physics.jl b/src/physics.jl index 21cf7d1..6d11e8d 100644 --- a/src/physics.jl +++ b/src/physics.jl @@ -1,921 +1,93 @@ -# This file is part of UnitSystems.jl. It is licensed under the MIT license +# This file is part of UnitSystems.jl +# It is licensed under the MIT license # UnitSystems Copyright (C) 2020 Michael Reed - -@doc """ - μₑᵤ, μₚᵤ, μₚₑ, αinv, αG - -Physical measured dimensionless `Coupling` values with uncertainty are the electron to proton mass ratio `μₑᵤ`, proton to atomic mass ratio `μₚᵤ`, proton to electron mass ratio `μₚₑ`, inverted fine structure constant `αinv`, and the gravitaional coupling constant `αG`. - -```Julia -julia> μₑᵤ # electronunit(Universe) -$μₑᵤ - -julia> μₚᵤ # protonunit(Universe) -$μₚᵤ - -julia> μₚₑ # protonelectron(Universe) -$μₚₑ - -julia> αinv # 1/finestructure(Universe) -$αinv - -julia> αG # coupling(Universe) -$αG -``` -""" Universe, μₑᵤ, μₚᵤ, μₚₑ, αinv, αG, meu, mpu, mpe, ainv, aG, electronunit, protonunit, protonelectron, finestructure, coupling - -@pure hyperfine(U::UnitSystem) = frequency(ΔνCs,U) -@doc """ - hyperfine(U::UnitSystem) = frequency($ΔνCs,U) - -Unperturbed groundstate hyperfine transition frequency `ΔνCs` of caesium-133 atom (Hz). -```Julia -julia> hyperfine(Metric) # Hz -$(hyperfine(Metric)) -``` -""" hyperfine, ΔνCs - -@doc """ -```Julia -luminousefficacy(U::UnitSystem{1}) = 1 -luminousefficacy(U::UnitSystem) = $(Kcd)power(U) -``` - -Luminous efficacy of monochromatic radiation `Kcd` of frequency 540 THz (lm⋅W⁻¹). -```Julia -julia> luminousefficacy(Metric) # lm⋅W⁻¹ -$(luminousefficacy(Metric)) - -julia> luminousefficacy(CODATA) # lm⋅W⁻¹ -$(luminousefficacy(CODATA)) - -julia> luminousefficacy(Conventional) # lm⋅W⁻¹ -$(luminousefficacy(Conventional)) - -julia> luminousefficacy(CGS) # lm⋅s⋅erg⁻¹ -$(luminousefficacy(CGS)) - -julia> luminousefficacy(English) # lm⋅s³⋅slug⋅ft⁻² -$(luminousefficacy(English)) -``` -""" luminousefficacy, Kcd - -@doc """ - molarmass(U::UnitSystem) = avogadro(U)*electronmass(U)/electronunit(U) - -Molar mass constant `Mᵤ` is the ratio of the `molarmass` and `relativemass` of a chemical. -```Julia -julia> molarmass(CGS) # g⋅mol⁻¹ -$(molarmass(CGS)) - -julia> molarmass(CGS2019) # g⋅mol⁻¹ -$(molarmass(CGS2019)) - -julia> molarmass(Metric) # kg⋅mol⁻¹ -$(molarmass(Metric)) - -julia> molarmass(SI2019) # kg⋅mol⁻¹ -$(molarmass(SI2019)) -``` -""" molarmass, Mᵤ, Mu +# _ _ _ +# | | | | | | +# ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ +# / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | +# | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | +# \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| +# +# https://github.com/chakravala +# https://crucialflow.com @pure avogadro(U::UnitSystem,C::Coupling=universe(U)) = molarmass(U,C)*electronunit(C)/electronmass(U,C) -@doc """ - avogadro(x) = universal(x)/boltzmann(x) # Mᵤ/atomicmass(x), Mᵤ ≈ 0.001-3.5e-13 - -Avogadro `NA` is `molarmass(x)/atomicmass(x)` number of atoms in a 12 g sample of C₁₂. -```Julia -julia> avogadro(SI2019) # mol⁻¹ -$(avogadro(SI2019)) - -julia> avogadro(Metric) # mol⁻¹ -$(avogadro(Metric)) - -julia> avogadro(English) # slug-mol⁻¹ -$(avogadro(English)) -``` -""" avogadro, NA - -@doc """ - planckreduced(x) = planck(x)/2π - -Reduced Planck constant `ħ` is a Planck per radian (J⋅s⋅rad⁻¹ or ft⋅lb⋅s⋅rad⁻¹). - -```Julia -julia> planckreduced(SI2019) # J⋅s⋅rad⁻¹ -$(planckreduced(SI2019)) - -julia> planckreduced(SI2019)*lightspeed(SI2019) # J⋅m⋅rad⁻¹ -$(planckreduced(SI2019)*lightspeed(SI2019)) - -julia> planckreduced(CODATA) # J⋅s⋅rad⁻¹ -$(planckreduced(CODATA)) - -julia> planckreduced(Conventional) # J⋅s⋅rad⁻¹ -$(planckreduced(Conventional)) - -julia> planckreduced(SI2019)/charge(SI2019) # eV⋅s⋅rad⁻¹ -$(planckreduced(SI2019)/charge(SI2019)) - -julia> planckreduced(SI2019)*lightspeed(SI2019)/charge(SI2019) # eV⋅m⋅rad⁻¹ -$(planckreduced(SI2019)*lightspeed(SI2019)/charge(SI2019)) - -julia> planckreduced(English) # ft⋅lb⋅s⋅rad⁻¹ -$(planckreduced(English)) -``` -""" planckreduced, ħ - -@doc """ - planck(x) = 2π*planckreduced(x) - -Planck constant `𝘩` is energy per electromagnetic frequency (J⋅s or ft⋅lb⋅s). - -```Julia -julia> planck(SI2019) # J⋅s -$(planck(SI2019)) - -julia> planck(SI2019)*lightspeed(SI2019) # J⋅m -$(planck(SI2019)*lightspeed(SI2019)) - -julia> planck(CODATA) # J⋅s -$(planck(CODATA)) - -julia> planck(Conventional) # J⋅s -$(planck(Conventional)) - -julia> planck(SI2019)/charge(SI2019) # eV⋅s⋅rad⁻¹ -$(planck(SI2019)/charge(SI2019)) - -julia> planck(SI2019)*lightspeed(SI2019)/charge(SI2019) # eV⋅m⋅rad⁻¹ -$(planck(SI2019)*lightspeed(SI2019)/charge(SI2019)) - -julia> planck(English) # ft⋅lb⋅s -$(planck(English)) -``` -""" planck, 𝘩, hh - -@doc """ - boltzmann(x) = universal(x)/avogadro(x) - -Boltzmann constant `kB` is the entropy amount of a unit number microstate permutation. -```Julia -pressure*molecularmass == density*boltzmann*temperature -``` -It satisfies the ideal gas law. - -```Julia -julia> boltzmann(SI2019) # J⋅K⁻¹ -$(boltzmann(SI2019)) - -julia> boltzmann(Metric) # J⋅K⁻¹ -$(boltzmann(Metric)) - -julia> boltzmann(SI2019)/charge(SI2019) # eV⋅K⁻¹ -$(boltzmann(SI2019)/charge(SI2019)) - -julia> boltzmann(SI2019)/planck(SI2019) # Hz⋅K⁻¹ -$(boltzmann(SI2019)/planck(SI2019)) - -julia> boltzmann(CGS) # erg⋅K⁻¹ -$(boltzmann(CGS)) - -julia> boltzmann(SI2019)/calᵢₜ # calᵢₜ⋅K⁻¹ -$(boltzmann(SI2019)/calᵢₜ) - -julia> boltzmann(SI2019)*rankine/calᵢₜ # calᵢₜ⋅°R⁻¹ -$(boltzmann(SI2019)*rankine/calᵢₜ) - -julia> boltzmann(English) # ft⋅lb⋅°R⁻¹ -$(boltzmann(English)) - -julia> boltzmann(SI2019)/planck(SI2019)/lightspeed(SI2019) # m⁻¹⋅K⁻¹ -$(boltzmann(SI2019)/planck(SI2019)/lightspeed(SI2019)) - -julia> avogadro(SI2019)*boltzmann(SI2019)/calᵢₜ # calᵢₜ⋅mol⁻¹⋅K⁻¹ -$(avogadro(SI2019)*boltzmann(SI2019)/calᵢₜ) - -julia> 10log10(boltzmann(SI2019)/1) # dB(W⋅K⁻¹⋅Hz⁻¹) -$(10log10(boltzmann(SI2019))) -``` -""" boltzmann, kB - -@doc """ - lightspeed(U::UnitSystem) = 1/sqrt(permeability(U)*permittivity(U))/lorentz(U) - -Speed of light in a vacuum `𝘤` for massless particles (m⋅s⁻¹ or ft⋅s⁻¹). - -```Julia -julia> lightspeed(Metric) # m⋅s⁻¹ -$(lightspeed(Metric)) - -julia> lightspeed(English) # ft⋅s⁻¹ -$(lightspeed(English)) -``` -""" lightspeed, 𝘤, cc - -@doc """ - permeability(U::UnitSystem) = 1/permittivity(U)/(lightspeed(U)*lorentz(U))^2 - -Magnetic permeability in a classical vacuum defined as `μ₀` in SI units (H⋅m⁻¹, kg⋅m²⋅C⁻²). - -```Julia -julia> permeability(Metric) # H⋅m⁻¹ -$(permeability(Metric)) - -julia> permeability(Conventional) # H⋅m⁻¹ -$(permeability(Conventional)) - -julia> permeability(CODATA) # H⋅m⁻¹ -$(permeability(CODATA)) - -julia> permeability(SI2019) # H⋅m⁻¹ -$(permeability(SI2019)) - -julia> permeability(EMU) # abH⋅cm⁻¹ -$(permeability(EMU)) - -julia> permeability(ESU) # statH⋅cm⁻¹ -$(permeability(ESU)) -``` -""" permeability, μ₀, m0 - -@doc """ - lorentz(U::UnitSystem) = 4π*biotsavart(U)/permeability(U)/rationalization(U) - -Electromagnetic proportionality constant `αL` for the Lorentz's law force (dimensionless). - -```Julia -julia> lorentz(Metric) -$(lorentz(Metric)) - -julia> lorentz(Thomson) -$(lorentz(Thomson)) - -julia> lorentz(Gauss) -$(lorentz(Gauss)) -``` -""" lorentz, αL, aL - -@doc """ - rationalization(U::UnitSystem) = 4π*biotsavart(U)/permeability(U)/lorentz(U) - -Constant of magnetization and polarization density or `4π*coulomb(U)*permittivity(U)`. - -```Julia -julia> rationalization(Metric) -$(rationalization(Metric)) - -julia> rationalization(Gauss) -$(rationalization(Gauss)) -``` -""" rationalization - -@doc """ - electronmass(U::UnitSystem) = protonmass(U)/protonelectron(U) # αinv^2*R∞*2𝘩/𝘤 - -Electron rest mass `mₑ` of subatomic particle with `-𝘦` elementary charge (kg or slugs). -```Julia -julia> electronmass(Metric) # kg -$(electronmass(Metric)) - -julia> electronmass(Metric)/atomicmass(Metric) # Da -$μₑᵤ - -julia> electronmass(Metric)*lightspeed(Metric)^2 # J -$(electronmass(Metric)*lightspeed(Metric)^2) - -julia> electronmass(SI2019)*lightspeed(SI2019)^2/charge(SI2019) # eV⋅𝘤⁻² -$(electronmass(SI2019)*lightspeed(SI2019)^2/charge(SI2019)) - -julia> electronmass(English) # slugs -$(electronmass(English)) -``` -""" electronmass, mₑ, me - @pure atomicmass(U::UnitSystem,C::Coupling=universe(U)) = electronmass(U,C)/electronunit(C) -@doc """ - atomicmass(U::UnitSystem) = Mᵤ/avogadro(U) # $(molarmass(SI2019)) ≈ 0.001-3.5e-13 - -Atomic mass unit `mᵤ` of 1/12 of the C₁₂ carbon-12 atom's mass (kg or slugs). -```Julia -julia> atomicmass(Metric) # kg -$(atomicmass(Metric)) - -julia> atomicmass(Metric)/electronmass(Metric) # mₑ -$(atomicmass(Metric)/electronmass(Metric)) - -julia> atomicmass(Metric)*lightspeed(Metric)^2 # J -$(atomicmass(Metric)*lightspeed(Metric)^2) - -julia> atomicmass(SI2019)*lightspeed(SI2019)^2/charge(SI2019) # eV⋅𝘤⁻² -$(atomicmass(SI2019)*lightspeed(SI2019)^2/charge(SI2019)) - -julia> atomicmass(English) # slugs -$(atomicmass(English)) -``` -""" atomicmass, mᵤ, mu - @pure protonmass(U::UnitSystem,C::Coupling=universe(U)) = protonelectron(C)*electronmass(U,C) -@doc """ - protonmass(U::UnitSystem) = protonunit(U)*atomicmass(U) - -Proton mass `mₚ` of subatomic particle with `+𝘦` elementary charge (kg or mass). -```Julia -julia> protonmass(Metric) # kg -$(protonmass(Metric)) - -julia> protonmass(SI2019)*lightspeed(SI2019)^2/charge(SI2019) # eV⋅𝘤⁻² -$(protonmass(SI2019)*lightspeed(SI2019)^2/charge(SI2019)) - -julia> protonmass(Metric)/atomicmass(Metric) # mᵤ -$(protonmass(Metric)/atomicmass(Metric)) - -julia> protonmass(Metric)/electronmass(Metric) # mₑ -$(protonmass(Metric)/electronmass(Metric)) -``` -""" protonmass, mₚ, mp - -@doc """ - planckmass(U::UnitSystem) = electronmass(U)/sqrt(coupling(U)) - -Planck mass factor `mP` from the gravitational coupling constant `αG` (kg or slugs). -```Julia -juila> planckmass(Metric)*lightspeed(Metric)^2/charge(Metric) # eV⋅𝘤⁻² -$(planckmass(Metric)*lightspeed(Metric)^2/charge(Metric)) - -juila> planckmass(Metric) # kg -$(planckmass(Metric)) - -juila> planckmass(Metric)/atomicmass(Metric) # mᵤ -$(planckmass(Metric)/atomicmass(Metric)) - -juila> planckmass(Metric)*lightspeed(Metric)^2/charge(Metric)/sqrt(8π) # eV⋅𝘤⁻² -$(planckmass(Metric)*lightspeed(Metric)^2/charge(Metric)/sqrt(8π)) - -juila> planckmass(Metric)/sqrt(8π) # kg -$(planckmass(Metric)/sqrt(8π)) -``` -""" planckmass, mP - -@doc """ - newton(U::UnitSystem) = lightspeed(U)*planckreduced(U)/planckmass(U)^2 - -Universal gravitational constant `GG` of Newton's law (m³⋅kg⁻¹⋅s⁻² or ft³⋅slug⁻¹⋅s⁻²). -```Julia -juila> newton(Metric) # m³⋅kg⁻¹⋅s⁻² -$(newton(Metric)) - -julia> newton(English) # ft³⋅slug⁻¹⋅s⁻² -$(newton(English)) -``` -""" newton, GG - -@pure einstein(U::UnitSystem,C::Coupling=universe(U)) = 8π*newton(U,C)/lightspeed(U,C)^4 -@doc """ - einstein(U::UnitSystem) = 8π*newton(U)/lightspeed(U)^4 - -Einstein's gravitational constant from the Einstein field equations (s⋅²⋅m⁻¹⋅kg⁻¹). -```Julia -julia> einstein(Metric) # s⋅²⋅m⁻¹⋅kg⁻¹ -$(einstein(Metric)) -``` -""" einstein, κ - -@pure universal(U::UnitSystem,C::Coupling=universe(U)) = boltzmann(U,C)*avogadro(U,C) -@doc """ - universal(x) = boltzmann(x)*avogadro(x) - -Universal gas constant `Rᵤ` is factored into specific `gasconstant(x)*molarmass(x)` values. -```Julia -pressure*molarmass == density*universal*temperature -``` -It satisfies the ideal gas law. - -```Julia -julia> universal(SI2019) # J⋅K⁻¹⋅mol⁻¹ -$(universal(SI2019)) - -julia> universal(English)*lbm/2116.2 # atm⋅ft³⋅R⁻¹⋅lb-mol⁻¹ -$(universal(English)*lbm/2116.2) - -julia> universal(Metric)/cal # cal⋅K⁻¹⋅mol⁻¹ -$(universal(Metric)/cal) - -julia> universal(Metric)/pressure(Earth1959) # atm⋅m³⋅K⁻¹⋅mol⁻¹ -$(universal(Metric)/atm) - -julia> universal(CGS) # erg⋅K⁻¹⋅mol⁻¹ -$(universal(CGS)) - -julia> universal(English) # ft⋅lb⋅°R⁻¹⋅slug-mol⁻¹ -$(universal(English)) -``` -The 1976 United States Standard Atmosphere used R* = 8.31432 exactly. -""" universal, Rᵤ, Ru - -@pure stefan(U::UnitSystem,C::Coupling=universe(U)) = 2π^5*boltzmann(U,C)^4/(15planck(U,C)^3*lightspeed(U,C)^2) -@doc """ - stefan(U::UnitSystem) = 2π^5*boltzmann(U)^4/(15planck(U)^3*lightspeed(U)^2) - -Stefan-Boltzmann proportionality `σ` of black body radiation (W⋅m⁻²⋅K⁻⁴ or ?⋅ft⁻²⋅°R⁻⁴). - -```Julia -julia> stefan(Metric) # W⋅m⁻²⋅K⁻⁴ -$(stefan(Metric)) - -julia> stefan(CGS) # erg⋅cm⁻²⋅s⁻¹⋅K⁻⁴ -$(stefan(CGS)) - -julia> stefan(Metric)*24*60^2/(cal*100^2) # cal⋅cm⁻²⋅day⁻¹⋅K⁻⁴ -$(stefan(Metric)*24*0.6^2/cal) - -julia> stefan(English) # lb⋅s⁻¹⋅ft⁻³⋅°R⁻⁴ -$(stefan(English)) -``` -""" stefan, σ, SB - -""" - radiationdensity(U::UnitSystem) = 4stefan(U)/lightspeed(U) - -Raditation density constant of black body radiation (J⋅m⁻³⋅K⁻⁴ or lb⋅ft⁻²⋅°R⁻⁴). - -```Julia -julia> radiationdensity(Metric) # J⋅m⁻³⋅K⁻⁴ -$(radiationdensity(Metric)) - -julia> radiationdensity(CGS) # erg⋅cm⁻³⋅K⁻⁴ -$(radiationdensity(CGS)) - -julia> radiationdensity(English) # lb⋅ft⁻²⋅°R⁻⁴ -$(radiationdensity(English)) -``` -""" -@pure radiationdensity(U::UnitSystem,C::Coupling=universe(U)) = 4stefan(U,C)/lightspeed(U,C) - -@pure permittivity(U::UnitSystem,C::Coupling=universe(U)) = inv(permeability(U,C)*(lightspeed(U,C)*lorentz(U))^2) -@doc """ - permittivity(U::UnitSystem) = 1/permeability(U)/(lightspeed(U)*lorentz(U))^2 - -Dielectric permittivity constant `ε₀` of a classical vacuum (C²⋅N⁻¹⋅m⁻²). - -```Julia -julia> permittivity(Metric) # F⋅m⁻¹ -$(permittivity(Metric)) - -julia> permittivity(Conventional) # F⋅m⁻¹ -$(permittivity(Conventional)) - -julia> permittivity(CODATA) # F⋅m⁻¹ -$(permittivity(CODATA)) - -julia> permittivity(SI2019) # F⋅m⁻¹ -$(permittivity(SI2019)) - -julia> permittivity(EMU) # abF⋅cm⁻¹ -$(permittivity(EMU)) - -julia> permittivity(ESU) # statF⋅cm⁻¹ -$(permittivity(ESU)) - -julia> permittivity(SI2019)/charge(SI2019) # 𝘦²⋅eV⁻¹⋅m⁻¹ -$(permittivity(SI2019)/charge(SI2019)) -``` -""" permittivity, ε₀, ϵ₀, e0 - -@pure coulomb(U::UnitSystem,C::Coupling=universe(U)) = rationalization(U)/4π/permittivity(U,C) -@doc """ - coulomb(U::UnitSystem) = rationalization(U)/4π/permittivity(U) - -Electrostatic proportionality constant `kₑ` for the Coulomb's law force (N⋅m²⋅C⁻²). - -```Julia -julia> coulomb(Metric) # N⋅m²⋅C⁻² -$(coulomb(Metric)) - -julia> coulomb(CODATA) # N·m²⋅C⁻² -$(coulomb(CODATA)) - -julia> coulomb(SI2019) # N·m²⋅C⁻² -$(coulomb(SI2019)) - -julia> coulomb(Conventional) # N·m²⋅C⁻² -$(coulomb(Conventional)) - -julia> coulomb(EMU) # dyn⋅cm²⋅abC⁻² -$(coulomb(EMU)) - -julia> coulomb(ESU) # dyn⋅cm²⋅statC⁻² -$(coulomb(ESU)) - -julia> coulomb(HLU) # dyn⋅cm²⋅hlC⁻² -$(coulomb(HLU)) -``` -""" coulomb, kₑ, ke - -@pure biotsavart(U::UnitSystem,C::Coupling=universe(U)) = permeability(U,C)*lorentz(U)*(rationalization(U)/4π) -@doc """ - biotsavart(U::UnitSystem) = permeability(U)*lorentz(U)*rationalization(U)/4π - -Magnetostatic proportionality constant `αB` for the Biot-Savart's law (H/m). - -```Julia -julia> biotsavart(Metric) # H⋅m⁻¹ -$(biotsavart(Metric)) - -julia> biotsavart(CODATA) # H⋅m⁻¹ -$(biotsavart(CODATA)) - -julia> biotsavart(SI2019) # H⋅m⁻¹ -$(biotsavart(SI2019)) - -julia> biotsavart(Conventional) # H⋅m⁻¹ -$(biotsavart(Conventional)) - -julia> biotsavart(EMU) # abH⋅cm⁻¹ -$(biotsavart(EMU)) - -julia> biotsavart(ESU) # statH⋅cm⁻¹ -$(biotsavart(ESU)) - -julia> biotsavart(Gauss) # abH⋅cm⁻¹ -$(biotsavart(Gauss)) - -julia> biotsavart(HLU) # hlH⋅cm⁻¹ -$(biotsavart(HLU)) -``` -""" biotsavart, αB, aB - +@pure einstein(U::UnitSystem,C::Coupling=universe(U)) = two(U)*sphere(U)*newton(U,C)/lightspeed(U,C)^4 +@pure einstein2(U::UnitSystem,C::Coupling=universe(U)) = two(U)*sphere(U)*newton(U,C)/lightspeed(U,C)^2 +@pure universalgas(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*sphere(U)*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 coulomb(U::UnitSystem,C::Coupling=universe(U)) = rationalization(U)/sphere(U)/vacuumpermittivity(U,C) +@pure biotsavart(U::UnitSystem,C::Coupling=universe(U)) = vacuumpermeability(U,C)*lorentz(U)*(rationalization(U)/sphere(U)) @pure ampere(U::UnitSystem) = lorentz(U)*biotsavart(U) -@doc """ - ampere(U::UnitSystem) = lorentz(U)*biotsavart(U) # coulomb(U)/lightspeed(U)^2 - -Magnetic proportionality constant `kₘ` for the Ampere's law force (N·s²⋅C⁻²). - -```Julia -julia> ampere(Metric) # H⋅m⁻¹ -$(ampere(Metric)) - -julia> ampere(CODATA) # H⋅m⁻¹ -$(ampere(CODATA)) - -julia> ampere(SI2019) # H⋅m⁻¹ -$(ampere(SI2019)) - -julia> ampere(Conventional) # H⋅m⁻¹ -$(ampere(Conventional)) - -julia> ampere(EMU) # abH⋅m⁻¹ -$(ampere(EMU)) - -julia> ampere(ESU) # statH⋅m⁻¹ -$(ampere(ESU)) - -julia> ampere(HLU) # hlH⋅m⁻¹ -$(ampere(HLU)) -``` -""" ampere, kₘ, km - -@pure impedance(U::UnitSystem,C::Coupling=universe(U)) = permeability(U,C)*lightspeed(U,C)*rationalization(U)*lorentz(U)^2 -@doc """ - impedance(U::UnitSystem) = permeability(U)*lightspeed(U)*rationalization(U)*lorentz(U)^2 - -Vacuum impedance of free space `Z₀` is magnitude ratio of electric to magnetic field (Ω). -```Julia -julia> impedance(Metric) # Ω -$(impedance(Metric)) - -julia> impedance(Conventional) # Ω -$(impedance(Conventional)) - -julia> impedance(CODATA) # Ω -$(impedance(CODATA)) - -julia> impedance(SI2019) # Ω -$(impedance(SI2019)) - -julia> 120π # 3e8*μ₀ # Ω -$(120π) - -julia> impedance(EMU) # abΩ -$(impedance(EMU)) - -julia> impedance(ESU) # statΩ -$(impedance(ESU)) - -julia> impedance(HLU) # hlΩ -$(impedance(HLU)) -``` -""" impedance, Z₀, Z0 - -@doc """ - charge(U::UnitSystem) = √(2planck(U)*finestructure(U)/impedance(U)) # faraday(U)/avogadro(U) - -Quantized elementary charge `𝘦` of a proton or electron `2/(klitzing(U)*josephson(U))` (C). -```Julia -julia> charge(SI2019) # C -$(charge(SI2019)) - -julia> charge(Metric) # C -$(charge(Metric)) - -julia> charge(CODATA) # C -$(charge(CODATA)) - -julia> charge(Conventional) # C -$(charge(Conventional)) - -julia> charge(EMU) # abC -$(charge(EMU)) - -julia> charge(ESU) # statC -$(charge(ESU)) - -julia> charge(Planck) # sqrt(4π/αinv) -$(charge(Planck)) -``` -""" charge, 𝘦, ee - -@pure faraday(U::UnitSystem,C::Coupling=universe(U)) = charge(U,C)*avogadro(U,C) -@doc """ - faraday(U::UnitSystem) = charge(U)*avogadro(U) - -Electric charge per mole of electrons `𝔉` based on elementary charge (C⋅mol⁻¹). -```Julia -julia> faraday(SI2019) # C⋅mol⁻¹ -$(faraday(SI2019)) - -julia> faraday(Metric) # C⋅mol⁻¹ -$(faraday(Metric)) - -julia> faraday(CODATA) # C⋅mol⁻¹ -$(faraday(CODATA)) - -julia> faraday(Conventional) # C⋅mol⁻¹ -$(faraday(Conventional)) - -julia> faraday(EMU) # abC⋅mol⁻¹ -$(faraday(EMU)) - -julia> faraday(ESU) # statC⋅mol⁻¹ -$(faraday(ESU)) - -julia> faraday(Metric)/kcal # kcal⋅(V-g-e)⁻¹ -$(faraday(Metric)/kcal) - -julia> faraday(Metric)/3600 # A⋅h⋅mol⁻¹ -$(faraday(Metric)/3600) -``` -""" faraday, 𝔉, FF - -@pure josephson(U::UnitSystem,C::Coupling=universe(U)) = 2charge(U,C)*lorentz(U)/planck(U,C) -@doc """ - josephson(U::UnitSystem) = 2charge(U)*lorentz(U)/planck(U) # 1/magneticflux(U) - -Josephson constant `KJ` relating potential difference to irradiation frequency (Hz⋅V⁻¹). -```Julia -julia> josephson(SI2019) # Hz⋅V⁻¹ -$(josephson(SI2019)) - -julia> josephson(Metric) # Hz⋅V⁻¹ -$(josephson(Metric)) - -julia> josephson(Conventional) # Hz⋅V⁻¹ -$(josephson(Conventional)) - -julia> josephson(CODATA) # Hz⋅V⁻¹ -$(josephson(CODATA)) - -julia> josephson(EMU) # Hz⋅abV⁻¹ -$(josephson(EMU)) - -julia> josephson(ESU) # Hz⋅statV⁻¹ -$(josephson(ESU)) -``` -""" josephson, KJ - -@pure magneticflux(U::UnitSystem,C::Coupling=universe(U)) = inv(josephson(U,C)) -@doc """ - magneticflux(U::UnitSystem) = planck(U)/2charge(U)/lorentz(U) - -Magnetic flux quantum `Φ₀` is `1/josephson(U)` (Wb). -```Julia -julia> magneticflux(SI2019) # Wb -$(magneticflux(SI2019)) - -julia> magneticflux(Metric) # Wb -$(magneticflux(Metric)) - -julia> magneticflux(Conventional) # Wb -$(magneticflux(Conventional)) - -julia> magneticflux(EMU) # Mx -$(magneticflux(EMU)) - -julia> magneticflux(ESU) # statWb -$(magneticflux(ESU)) -``` -""" magneticflux, Φ₀ - -@pure klitzing(U::UnitSystem,C::Coupling=universe(U)) = planck(U,C)/charge(U,C)^2 -@doc """ - klitzing(U::UnitSystem) = planck(U)/charge(U)^2 - -Quantized Hall resistance `RK` (Ω). -```Julia -julia> klitzing(SI2019) # Ω -$(klitzing(SI2019)) - -julia> klitzing(Metric) # Ω -$(klitzing(Metric)) - -julia> klitzing(Conventional) # Ω -$(klitzing(Conventional)) - -julia> klitzing(CODATA) # Ω -$(klitzing(CODATA)) - -julia> klitzing(EMU) # abΩ -$(klitzing(EMU)) - -julia> klitzing(ESU) # statΩ -$(klitzing(ESU)) -``` -""" klitzing, RK - -@pure conductance(U::UnitSystem,C::Coupling=universe(U)) = 2charge(U,C)^2/planck(U,C) -@doc """ - conductance(U::UnitSystem) = 2charge(U)^2/planck(U) # 2/klitzing(U) - -Conductance quantum `G₀` is a quantized unit of electrical conductance (S). -```Julia -julia> conductance(SI2019) # S -$(conductance(SI2019)) - -julia> conductance(Metric) # S -$(conductance(Metric)) - -julia> conductance(Conventional) # S -$(conductance(Conventional)) - -julia> conductance(CODATA) # S -$(conductance(CODATA)) - -julia> conductance(EMU) # abS -$(conductance(EMU)) - -julia> conductance(ESU) # statS -$(conductance(ESU)) -``` -""" conductance, G₀, G0 - +@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) +@pure josephson(U::UnitSystem,C::Coupling=universe(U)) = two(U)*elementarycharge(U,C)*lorentz(U)/planck(U,C) +@pure magneticfluxquantum(U::UnitSystem,C::Coupling=universe(U)) = inv(josephson(U,C)) +@pure klitzing(U::UnitSystem,C::Coupling=universe(U)) = planck(U,C)/elementarycharge(U,C)^2 +@pure conductancequantum(U::UnitSystem,C::Coupling=universe(U)) = two(U)*elementarycharge(U,C)^2/planck(U,C) @pure hartree(U::UnitSystem,C::Coupling=universe(U)) = electronmass(U,C)*(lightspeed(U,C)*finestructure(C))^2 -@doc """ - hartree(U::UnitSystem) = electronmass(U)*(lightspeed(U)*finestructure(U))^2 # mₑ*(𝘤/αinv)^2 - -Hartree electric potential energy `Eₕ` of the hydrogen atom at ground state is `2R∞*𝘩*𝘤` (J). -```Julia -julia> hartree(SI2019)/charge(SI2019) # eV -$(hartree(SI2019)/charge(SI2019)) - -julia> hartree(Metric) # J -$(hartree(Metric)) - -julia> hartree(CGS) # erg -$(hartree(CGS)) - -julia> hartree(Metric)*avogadro(Metric)/1000 # kJ⋅mol⁻¹ -$(hartree(Metric)*avogadro(Metric)/1000) - -julia> hartree(Metric)*avogadro(Metric)/kcal # kcal⋅mol⁻¹ -$(hartree(Metric)*avogadro(Metric)/kcal) - -julia> 2rydberg(Metric)/100 # Eₕ/𝘩/𝘤/100 cm⁻¹ -$(hartree(Metric)/planck(Metric)/lightspeed(Metric)/100) - -julia> hartree(Metric)/planck(Metric)/10^12 # THz -$(hartree(Metric)/planck(Metric)) - -julia> hartree(Metric)/boltzmann(Metric) # K -$(hartree(Metric)/boltzmann(Metric)) -``` -In a Gaussian unit system where `4π*ε₀ == 1` the Hartree energy is `𝘦^2/a₀`. -""" hartree, Eₕ, Eh - -@pure rydberg(U::UnitSystem,C::Coupling=universe(U)) = hartree(U,C)/2planck(U,C)/lightspeed(U,C) -@doc """ - rydberg(U::UnitSystem) = hartree(U)/2planck(U)/lightspeed(U) # Eₕ/2𝘩/𝘤 - -Rydberg constant `R∞` is lowest energy photon capable of ionizing atom at ground state (m⁻¹). -```Julia -julia> rydberg(Metric) # m⁻¹ -$(rydberg(Metric)) -``` -The Rydberg constant for hydrogen `RH` is `R∞*mₚ/(mₑ+mₚ)` (m⁻¹). -```Julia -julia> rydberg(Metric)*protonmass(Metric)/(electronmass(Metric)+protonmass(Metric)) # m⁻¹ -$(rydberg(Metric)*protonmass(Metric)/(electronmass(Metric)+protonmass(Metric))) -``` -Rydberg unit of photon energy `Ry` is `𝘩*𝘤*R∞` or `Eₕ/2` (J). -```Julia -julia> hartree(Metric)/2 # J -$(hartree(Metric)/2) - -julia> hartree(SI2019)/2charge(SI2019) # eV -$(hartree(SI2019)/2charge(SI2019)) -``` -Rydberg photon frequency `𝘤*R∞` or `Eₕ/2𝘩` (Hz). -```Julia -julia> lightspeed(Metric)*rydberg(Metric) # Hz -$(lightspeed(Metric)*rydberg(Metric)) -``` -Rydberg wavelength `1/R∞` (m). -```Julia -julia> 1/rydberg(Metric) # m -$(1/rydberg(Metric)) - -julia> 1/rydberg(Metric)/2π # m⋅rad⁻¹ -$(1/rydberg(Metric)/2π) -``` -Precision measurements of the Rydberg constants are within a relative standard uncertainty of under 2 parts in 10¹², and is chosen to constrain values of other physical constants. -""" rydberg, R∞, RH, Ry - +@pure rydberg(U::UnitSystem,C::Coupling=universe(U)) = hartree(U,C)/(two(U)*planck(U,C))/lightspeed(U,C) @pure bohr(U::UnitSystem,C::Coupling=universe(U)) = planckreduced(U,C)/electronmass(U,C)/lightspeed(U,C)/finestructure(C) -@doc """ - bohr(U) = planckreduced(U)/electronmass(U)/lightspeed(U)/finestructure(U) - -Bohr radius of the hydrogen atom in its ground state `a₀` (m). -```Julia -julia> bohr(Metric) # m -$(bohr(Metric)) - -julia> 12bohr(English) # in -$(12bohr(English)) - -julia> bohr(Metric)/length(PlanckGauss) # ℓP -$(bohr(Metric)/length(PlanckGauss)) -``` -""" bohr, a₀, a0 - -""" - bohrreduced(U::UnitSystem) = bohr(U)*(1+1/protonelectron(U)) - -Reduced Bohr radius including the effect of reduced mass in hydrogen atom (m). -```Julia -julia> bohrreduced(Metric) # m -$(bohrreduced(Metric)) - -julia> bohrreduced(Metric) # a₀ -$(bohrreduced(Metric)/bohr(Metric)) -``` -""" -@pure bohrreduced(U::UnitSystem,C::Coupling=universe(U)) = bohr(U,C)*(1+1/protonelectron(C)) - +@pure bohrreduced(U::UnitSystem,C::Coupling=universe(U)) = bohr(U,C)*(one(U)+inv(protonelectron(C))) @pure electronradius(U::UnitSystem,C::Coupling=universe(U)) = finestructure(C)*planckreduced(U,C)/electronmass(U,C)/lightspeed(U,C) -@doc """ - electronradius(U) = finestructure(U)*planckreduced(U)/electronmass(U)/lightspeed(U) - -Classical electron radius or Lorentz radius or Thomson scattering length (m). -```Julia -julia> electronradius(Metric) # m -$(electronradius(Metric)) - -julia> electronradius(CODATA) # m -$(electronradius(CODATA)) - -julia> electronradius(Conventional) # m -$(electronradius(Conventional)) -``` -""" electronradius, rₑ, re - -@pure magneton(U::UnitSystem,C::Coupling=universe(U)) = charge(U,C)*planckreduced(U,C)*lorentz(U)/2electronmass(U,C) -""" - magneton(U::UnitSystem) = charge(U)*planckreduced(U)*lorentz(U)/2electronmass(U) - -Bohr magneton `μB` natural unit for expressing magnetic moment of electron (J⋅T⁻¹). -```Julia -julia> magneton(SI2019) # J⋅T⁻¹ -$(magneton(SI2019)) - -julia> magneton(Metric) # J⋅T⁻¹ -$(magneton(Metric)) - -julia> magneton(CODATA) # J⋅T⁻¹ -$(magneton(CODATA)) - -julia> magneton(Conventional) # J⋅T⁻¹ -$(magneton(Conventional)) - -julia> magneton(EMU2019) # erg⋅G⁻¹ -$(magneton(EMU2019)) - -julia> magneton(ESU2019) # statA⋅cm² -$(magneton(ESU2019)) - -julia> magneton(SI2019)/charge(SI2019) # eV⋅T⁻¹ -$(magneton(SI2019)/charge(SI2019)) - -julia> magneton(Hartree) # 𝘤⋅ħ⋅mₑ⁻¹ -$(magneton(Hartree)) -``` -""" magneton, μB +@pure magneton(U::UnitSystem,C::Coupling=universe(U)) = elementarycharge(U,C)*planckreduced(U,C)*lorentz(U)/(two(U)*electronmass(U,C)) + +@pure hyperfine(U::UnitSystem) = frequency(ΔνCs,U,Metric) +@pure hubble(U::UnitSystem) = time(one(U),Hubble,U) +@pure cosmological(U::UnitSystem,C::Coupling=universe(U)) = three(U)*darkenergydensity(C)*(hubble(U)/lightspeed(U,C))^2 +@pure standardgravity(U::UnitSystem) = acceleration(g₀,U,Metric) +@pure standardpressure(U::UnitSystem) = pressure(atm,U,Metric) +@pure standardtemperature(U::UnitSystem) = temperature(Tₛ,U,Metric) +@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) +@pure lunarmass(U::UnitSystem) = earthmass(U)/μE☾ +@pure astronomicalunit(U::UnitSystem) = length(𝟏,U,IAU) +@pure lunardistance(U::UnitSystem) = length(LD,U,Metric) +@pure mile(U::UnitSystem) = length(two(U)^5*three(U)*five(U)*eleven(U),U,English) +@pure clarkemile(U::UnitSystem) = length(two(U)^6*five(U)*nineteen(U),U,English) +@pure nauticalmile(U::UnitSystem) = length(two(U)^4*five(U)^5/three(U)^3,U,Metric) +@pure meancalorie(U::UnitSystem) = energy(two(U)^2*five(U)*three(U)^2/fourtythree(U),U,InternationalMean) +@pure kilocalorie(U::UnitSystem) = energy(two(U)^5*five(U)^4*three(U)^2/fourtythree(U),U,International) +@pure calorie(U::UnitSystem) = kilocalorie(U)/(two(U)*five(U))^3 + +@pure thermalunit(U::UnitSystem) = mass(temperature(kilocalorie(U),Metric,English),Metric,English) +@pure tonsrefrigeration(U::UnitSystem) = frequency(two(U)*five(U)/three(U),U,Metric)*thermalunit(U) +@pure boilerhorsepower(U::UnitSystem) = frequency(Constant(1339)/(two(U)^4*three(U)^2),U,Metric)*thermalunit(U) +# thermalconductivity_water(British) ≈ 0.5778 +@pure thermalconductivity_water(U::UnitSystem) = thermalconductivity((two(U)^2*three(U)*five(U))^2/thermalunit(U),U,Metric) + +@pure gallon(U::UnitSystem) = volume(seven(U)*eleven(U)/two(U)^2,U,English) +@pure litre(U::UnitSystem) = volume(inv((two(U)*five(U))^3),U,Metric) +@pure horsepower(U::UnitSystem) = power(two(U)*five(U)^2*eleven(U),U,British) +@pure horsepowerwatt(U::UnitSystem) = power(two(U)^4*three(U)^3/five(U)*normal(twopi(U)),U,British) +@pure horsepowermetric(U::UnitSystem) = power(three(U)*five(U)^2,U,GravitationalMetric) +@pure electricalhorsepower(U::UnitSystem) = power(Constant(746),U,Metric) +@pure inchmercury(U::UnitSystem) = pressure(inHg,U,Metric) +@pure torr(U::UnitSystem) = pressure(atm/(two(U)^3*five(U)*nineteen(U)),U,Metric) + +@pure second(U::UnitSystem) = time(one(U),U,Metric) +@pure minute(U::UnitSystem) = two(U)^2*three(U)*five(U)*second(U) +@pure hour(U::UnitSystem) = two(U)^2*three(U)*five(U)*minute(U) +@pure day(U::UnitSystem) = two(U)^3*three(U)*hour(U) +@pure year(U::UnitSystem) = aⱼ*day(U) +@pure gaussianyear(U::UnitSystem) = (τ/k)*day(U) +@pure siderealyear(U::UnitSystem) = (τ/k/√(solarmass(IAU)+earthmass(IAU)+lunarmass(IAU)))*day(U) +@pure lightyear(U::UnitSystem) = year(U)*lightspeed(U) +@pure parsec(U::UnitSystem) = astronomicalunit(U)*two(U)^7*three(U)^4*five(U)^3/turn(U) + +include("physicsdocs.jl") + +#=@pure kilogram(U::UnitSystem) = mass(Metric,U) +@pure slug(U::UnitSystem) = mass(English,U) + +@pure meter(U::UnitSystem) = length(Metric,U) +@pure foot(U::UnitSystem) = length(English,U)=# + +#rankine, kelvin, moles/molecules +#add gravitional units of weight?? diff --git a/src/physicsdocs.jl b/src/physicsdocs.jl new file mode 100644 index 0000000..9456bfb --- /dev/null +++ b/src/physicsdocs.jl @@ -0,0 +1,1547 @@ + +# This file is part of UnitSystems.jl +# It is licensed under the MIT license +# UnitSystems Copyright (C) 2020 Michael Reed +# _ _ _ +# | | | | | | +# ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ +# / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | +# | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | +# \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| +# +# https://github.com/chakravala +# https://crucialflow.com + +@doc """ + μₑᵤ, μₚᵤ, μₚₑ, αinv, αG, ΩΛ + +Physical measured dimensionless `Coupling` values with uncertainty are the electron to proton mass ratio `μₑᵤ`, proton to atomic mass ratio `μₚᵤ`, proton to electron mass ratio `μₚₑ`, inverted fine structure constant `αinv`, and the gravitaional coupling constant `αG`. + +```Julia +julia> μₑᵤ # electronunit(Universe) +$μₑᵤ + +julia> μₚᵤ # protonunit(Universe) +$μₚᵤ + +julia> μₚₑ # protonelectron(Universe) +$μₚₑ + +julia> αinv # 1/finestructure(Universe) +$αinv + +julia> αG # coupling(Universe) +$αG + +julia> ΩΛ # darkenergydensity(Universe) +$ΩΛ +``` +""" Universe, μₑᵤ, μₚᵤ, μₚₑ, αinv, αG, meu, mpu, mpe, ainv, aG, ΩΛ, electronunit, protonunit, protonelectron, finestructure, coupling, darkenergydensity + +@doc """ + turn(U::UnitSystem) = 2π/angle(U) + +Complete rotation `angle` of revolution from a full circle. +```Julia +julia> turn(MetricEngineering) +$(turn(MetricEngineering)) +``` +""" turn + +@doc """ + sphere(U::UnitSystem) = turn(U)/angle(U) + +Complete spherical `solidangle` of from a full sphere. +```Julia +julia> sphere(MetricEngineering) +$(sphere(MetricEngineering)) +``` +""" sphere + +@doc """ +```Julia +luminousefficacy(U::UnitSystem{1}) = 1 +luminousefficacy(U::UnitSystem) = $(Kcd)power(U) +``` + +Luminous efficacy of monochromatic radiation `Kcd` of frequency 540 THz (lm⋅W⁻¹). +```Julia +julia> luminousefficacy(Metric) # lm⋅W⁻¹ +$(luminousefficacy(Metric)) + +julia> luminousefficacy(CODATA) # lm⋅W⁻¹ +$(luminousefficacy(CODATA)) + +julia> luminousefficacy(Conventional) # lm⋅W⁻¹ +$(luminousefficacy(Conventional)) + +julia> luminousefficacy(CGS) # lm⋅s⋅erg⁻¹ +$(luminousefficacy(CGS)) + +julia> luminousefficacy(British) # lm⋅s³⋅slug⋅ft⁻² +$(luminousefficacy(British)) +``` +""" luminousefficacy, Kcd + +@doc """ + molarmass(U::UnitSystem) = avogadro(U)*electronmass(U)/electronunit(U) + +Molar mass constant `Mᵤ` is the ratio of the `molarmass` and `relativemass` of a chemical. +```Julia +julia> molarmass(CGS) # g⋅mol⁻¹ +$(molarmass(CGS)) + +julia> molarmass(CGS2019) # g⋅mol⁻¹ +$(molarmass(CGS2019)) + +julia> molarmass(Metric) # kg⋅mol⁻¹ +$(molarmass(Metric)) + +julia> molarmass(SI2019) # kg⋅mol⁻¹ +$(molarmass(SI2019)) +``` +""" molarmass, Mᵤ, Mu + +@doc """ + avogadro(x) = universalgas(x)/boltzmann(x) # Mᵤ/atomicmass(x), Mᵤ ≈ 0.001-3.5e-13 + +Avogadro `NA` is `molarmass(x)/atomicmass(x)` number of atoms in a 12 g sample of C₁₂. +```Julia +julia> avogadro(SI2019) # mol⁻¹ +$(avogadro(SI2019)) + +julia> avogadro(Metric) # mol⁻¹ +$(avogadro(Metric)) + +julia> avogadro(English) # lb-mol⁻¹ +$(avogadro(English)) + +julia> avogadro(British) # slug-mol⁻¹ +$(avogadro(British)) +``` +""" avogadro, NA + +@doc """ + planckreduced(x) = planck(x)/turn(x) + +Reduced Planck constant `ħ` is a Planck per radian (J⋅s⋅rad⁻¹ or ft⋅lb⋅s⋅rad⁻¹). + +```Julia +julia> planckreduced(SI2019) # J⋅s⋅rad⁻¹ +$(planckreduced(SI2019)) + +julia> planckreduced(SI2019)*lightspeed(SI2019) # J⋅m⋅rad⁻¹ +$(planckreduced(SI2019)*lightspeed(SI2019)) + +julia> planckreduced(CODATA) # J⋅s⋅rad⁻¹ +$(planckreduced(CODATA)) + +julia> planckreduced(Conventional) # J⋅s⋅rad⁻¹ +$(planckreduced(Conventional)) + +julia> planckreduced(SI2019)/elementarycharge(SI2019) # eV⋅s⋅rad⁻¹ +$(planckreduced(SI2019)/elementarycharge(SI2019)) + +julia> planckreduced(SI2019)*lightspeed(SI2019)/elementarycharge(SI2019) # eV⋅m⋅rad⁻¹ +$(planckreduced(SI2019)*lightspeed(SI2019)/elementarycharge(SI2019)) + +julia> planckreduced(British) # ft⋅lb⋅s⋅rad⁻¹ +$(planckreduced(British)) +``` +""" planckreduced, ħ + +@doc """ + planck(x) = turn(x)*planckreduced(x) + +Planck constant `𝘩` is energy per electromagnetic frequency (J⋅s or ft⋅lb⋅s). + +```Julia +julia> planck(SI2019) # J⋅s +$(planck(SI2019)) + +julia> planck(SI2019)*lightspeed(SI2019) # J⋅m +$(planck(SI2019)*lightspeed(SI2019)) + +julia> planck(CODATA) # J⋅s +$(planck(CODATA)) + +julia> planck(Conventional) # J⋅s +$(planck(Conventional)) + +julia> planck(SI2019)/elementarycharge(SI2019) # eV⋅s +$(planck(SI2019)/elementarycharge(SI2019)) + +julia> planck(SI2019)*lightspeed(SI2019)/elementarycharge(SI2019) # eV⋅m +$(planck(SI2019)*lightspeed(SI2019)/elementarycharge(SI2019)) + +julia> planck(British) # ft⋅lb⋅s +$(planck(English)) +``` +""" planck, 𝘩, hh + +@doc """ + boltzmann(x) = universalgas(x)/avogadro(x) + +Boltzmann constant `kB` is the entropy amount of a unit number microstate permutation. +```Julia +pressure*molecularmass == density*boltzmann*temperature +``` +It satisfies the ideal gas law. + +```Julia +julia> boltzmann(SI2019) # J⋅K⁻¹ +$(boltzmann(SI2019)) + +julia> boltzmann(Metric) # J⋅K⁻¹ +$(boltzmann(Metric)) + +julia> boltzmann(SI2019)/elementarycharge(SI2019) # eV⋅K⁻¹ +$(boltzmann(SI2019)/elementarycharge(SI2019)) + +julia> boltzmann(SI2019)/planck(SI2019) # Hz⋅K⁻¹ +$(boltzmann(SI2019)/planck(SI2019)) + +julia> boltzmann(CGS) # erg⋅K⁻¹ +$(boltzmann(CGS)) + +julia> boltzmann(SI2019)/calorie(SI2019) # calᵢₜ⋅K⁻¹ +$(boltzmann(SI2019)/calorie(SI2019)) + +julia> boltzmann(SI2019)*°R/calorie(SI2019) # calᵢₜ⋅°R⁻¹ +$(boltzmann(SI2019)*°R/calorie(SI2019)) + +julia> boltzmann(Brtish) # ft⋅lb⋅°R⁻¹ +$(boltzmann(British)) + +julia> boltzmann(SI2019)/planck(SI2019)/lightspeed(SI2019) # m⁻¹⋅K⁻¹ +$(boltzmann(SI2019)/planck(SI2019)/lightspeed(SI2019)) + +julia> avogadro(SI2019)*boltzmann(SI2019)/calorie(SI2019) # calᵢₜ⋅mol⁻¹⋅K⁻¹ +$(avogadro(SI2019)*boltzmann(SI2019)/calorie(SI2019)) + +julia> dB(boltzmann(SI2019)) # dB(W⋅K⁻¹⋅Hz⁻¹) +$(dB(boltzmann(SI2019))) +``` +""" boltzmann, kB + +@doc """ + lightspeed(U::UnitSystem) = 1/sqrt(vacuumpermeability(U)*vacuumpermittivity(U))/lorentz(U) + +Speed of light in a vacuum `𝘤` for massless particles (m⋅s⁻¹ or ft⋅s⁻¹). + +```Julia +julia> lightspeed(Metric) # m⋅s⁻¹ +$(lightspeed(Metric)) + +julia> lightspeed(English) # ft⋅s⁻¹ +$(lightspeed(English)) +``` +""" lightspeed, 𝘤, cc + +@doc """ + vacuumpermeability(U::UnitSystem) = 1/vacuumpermittivity(U)/(lightspeed(U)*lorentz(U))^2 + +Magnetic permeability in a classical vacuum defined as `μ₀` in SI units (H⋅m⁻¹, kg⋅m²⋅C⁻²). + +```Julia +julia> vacuumpermeability(Metric) # H⋅m⁻¹ +$(vacuumpermeability(Metric)) + +julia> vacuumpermeability(Conventional) # H⋅m⁻¹ +$(vacuumpermeability(Conventional)) + +julia> vacuumpermeability(CODATA) # H⋅m⁻¹ +$(vacuumpermeability(CODATA)) + +julia> vacuumpermeability(SI2019) # H⋅m⁻¹ +$(vacuumpermeability(SI2019)) + +julia> vacuumpermeability(EMU) # abH⋅cm⁻¹ +$(vacuumpermeability(EMU)) + +julia> vacuumpermeability(ESU) # statH⋅cm⁻¹ +$(vacuumpermeability(ESU)) +``` +""" vacuumpermeability, μ₀, m0 + +@doc """ + lorentz(U::UnitSystem) = sphere(U)*biotsavart(U)/vacuumpermeability(U)/rationalization(U) + +Electromagnetic proportionality constant `αL` for the Lorentz's law force (dimensionless). + +```Julia +julia> lorentz(Metric) +$(lorentz(Metric)) + +julia> lorentz(Thomson) +$(lorentz(Thomson)) + +julia> lorentz(Gauss) +$(lorentz(Gauss)) +``` +""" lorentz, αL, aL, C + +@doc """ + rationalization(U::UnitSystem) = sphere(U)*biotsavart(U)/vacuumpermeability(U)/lorentz(U) + +Constant of magnetization and polarization density or `sphere(U)*coulomb(U)*permittivity(U)`. + +```Julia +julia> rationalization(Metric) +$(rationalization(Metric)) + +julia> rationalization(Gauss) +$(rationalization(Gauss)) +``` +""" rationalization, Λ + +@doc """ + electronmass(U::UnitSystem) = protonmass(U)/protonelectron(U) # αinv^2*R∞*2𝘩/𝘤 + +Electron rest mass `mₑ` of subatomic particle with `-𝘦` elementary charge (kg or slugs). +```Julia +julia> electronmass(Metric) # kg +$(electronmass(Metric)) + +julia> electronmass(Metric)/atomicmass(Metric) # Da +$μₑᵤ + +julia> electronmass(Metric)*lightspeed(Metric)^2 # J +$(electronmass(Metric)*lightspeed(Metric)^2) + +julia> electronmass(SI2019)*lightspeed(SI2019)^2/elementarycharge(SI2019) # eV⋅𝘤⁻² +$(electronmass(SI2019)*lightspeed(SI2019)^2/elementarycharge(SI2019)) + +julia> electronmass(English) # lb +$(electronmass(English)) +``` +""" electronmass, mₑ, me + +@doc """ + atomicmass(U::UnitSystem) = Mᵤ/avogadro(U) # $(molarmass(SI2019)) ≈ 0.001-3.5e-13 + +Atomic mass unit `mᵤ` of 1/12 of the C₁₂ carbon-12 atom's mass (kg or slugs). +```Julia +julia> atomicmass(Metric) # kg +$(atomicmass(Metric)) + +julia> atomicmass(Metric)/electronmass(Metric) # mₑ +$(atomicmass(Metric)/electronmass(Metric)) + +julia> atomicmass(Metric)*lightspeed(Metric)^2 # J +$(atomicmass(Metric)*lightspeed(Metric)^2) + +julia> atomicmass(SI2019)*lightspeed(SI2019)^2/elementarycharge(SI2019) # eV⋅𝘤⁻² +$(atomicmass(SI2019)*lightspeed(SI2019)^2/elementarycharge(SI2019)) + +julia> atomicmass(British) # lb +$(atomicmass(British)) +``` +""" atomicmass, mᵤ, mu + +@doc """ + protonmass(U::UnitSystem) = protonunit(U)*atomicmass(U) + +Proton mass `mₚ` of subatomic particle with `+𝘦` elementary charge (kg or mass). +```Julia +julia> protonmass(Metric) # kg +$(protonmass(Metric)) + +julia> protonmass(SI2019)*lightspeed(SI2019)^2/elementarycharge(SI2019) # eV⋅𝘤⁻² +$(protonmass(SI2019)*lightspeed(SI2019)^2/elementarycharge(SI2019)) + +julia> protonmass(Metric)/atomicmass(Metric) # mᵤ +$(protonmass(Metric)/atomicmass(Metric)) + +julia> protonmass(Metric)/electronmass(Metric) # mₑ +$(protonmass(Metric)/electronmass(Metric)) +``` +""" protonmass, mₚ, mp + +@doc """ + planckmass(U::UnitSystem) = electronmass(U)/sqrt(coupling(U)) + +Planck mass factor `mP` from the gravitational coupling constant `αG` (kg or slugs). +```Julia +juila> planckmass(Metric)*lightspeed(Metric)^2/elementarycharge(Metric) # eV⋅𝘤⁻² +$(planckmass(Metric)*lightspeed(Metric)^2/elementarycharge(Metric)) + +juila> planckmass(Metric) # kg +$(planckmass(Metric)) + +juila> planckmass(Metric)/atomicmass(Metric) # mᵤ +$(planckmass(Metric)/atomicmass(Metric)) + +juila> planckmass(Metric)*lightspeed(Metric)^2/elementarycharge(Metric)/sqrt(𝟐^2*τ) # eV⋅𝘤⁻² +$(planckmass(Metric)*lightspeed(Metric)^2/elementarycharge(Metric)/sqrt(𝟐^2*τ)) + +juila> planckmass(Metric)/sqrt(𝟐^2*τ) # kg +$(planckmass(Metric)/sqrt(𝟐^2*τ)) +``` +""" planckmass, mP + +@doc """ + newton(U::UnitSystem) = lightspeed(U)*planckreduced(U)/planckmass(U)^2 + +Universal gravitational constant `G` of Newton's law (m³⋅kg⁻¹⋅s⁻² or ft³⋅slug⁻¹⋅s⁻²). +```Julia +juila> newton(Metric) # m³⋅kg⁻¹⋅s⁻² +$(newton(Metric)) + +julia> newton(English) # ft³⋅lbm⁻¹⋅s⁻² +$(newton(English)) + +julia> newton(IAU) # au³⋅M☉⁻¹⋅day⁻² +$(newton(IAU)) + +julia> newton(Astronomical) # N⋅s⁴⋅m⁻⁴ +$(newton(Astronomical)) + +julia> newton(PlanckGauss) +$(newton(PlanckGauss)) +``` +""" newton, G, GG + +@doc """ + einstein(U::UnitSystem) = 2sphere(U)*newton(U)/lightspeed(U)^4 + +Einstein's gravitational constant from the Einstein field equations (s⋅²⋅m⁻¹⋅kg⁻¹). +```Julia +julia> einstein(Metric) # s²⋅m⁻¹⋅kg⁻¹ +$(einstein(Metric)) + +julia> einstein(IAU) # day²⋅au⁻¹⋅M☉⁻¹ +$(einstein(IAU)) +``` +""" einstein, κ + +@doc """ + einstein2(U::UnitSystem) = 2sphere(U)*newton(U)/lightspeed(U)^2 + +Einstein's gravitational constant from the Einstein field equations (m⋅kg⁻¹). +```Julia +julia> einstein2(Metric) # m⋅kg⁻¹ +$(einstein2(Metric)) + +julia> einstein2(IAU) # au⋅M☉⁻¹ +$(einstein2(IAU)) +``` +""" einstein2 + +@doc """ + gravity(U::UnitSystem) # mass*acceleration/force + +Gravitational force reference used in technical engineering units (kg⋅m⋅N⁻¹⋅s⁻²). +```Julia +julia> gravity(Metric) +$(gravity(Metric)) + +julia> gravity(MetricEngineering) # m⋅kg⋅N⁻¹⋅s⁻² +$(gravity(MetricEngineering)) + +julia> gravity(English) # ft⋅lbm⋅lbf⁻¹⋅s⁻² +$(gravity(English)) +``` +""" gravity + +@doc """ + universalgas(x) = boltzmann(x)*avogadro(x) + +Universal gas constant `Rᵤ` is factored into specific `gasconstant(x)*molarmass(x)` values. +```Julia +pressure*molarmass == density*universal*temperature +``` +It satisfies the ideal gas law. + +```Julia +julia> universalgas(SI2019) # J⋅K⁻¹⋅mol⁻¹ +$(universalgas(SI2019)) + +julia> universalgas(English)/𝟐^4/𝟑^2 # psi⋅ft³⋅°R⁻¹⋅lb-mol⁻¹ +$(universalgas(English)/𝟐^4/𝟑^2) + +julia> universalgas(English)/standardpressure(English) # atm⋅ft³⋅R⁻¹⋅lb-mol⁻¹ +$(universalgas(English)/standardpressure(English)) + +julia> universalgas(English)/thermalunit(English) # BTU⋅°R⁻¹⋅lb-mol⁻¹ +$(universalgas(English)/thermalunit(English)) + +julia> universalgas(Metric)/calorie(Metric) # cal⋅K⁻¹⋅mol⁻¹ +$(universalgas(Metric)/calorie(Metric)) + +julia> universalgas(Metric)/standardpressure(Metric) # atm⋅m³⋅K⁻¹⋅mol⁻¹ +$(universalgas(Metric)/standardpressure(Metric)) + +julia> universalgas(Metric)/torr(Metric) # m³⋅torr⋅K⁻¹⋅mol⁻¹ +$(universalgas(Metric)/torr(Metric)) + +julia> universalgas(English)/torr(English) # ft³⋅torr⋅°R⁻¹⋅lb-mol⁻¹ +$(universalgas(English)/torr(English)) + +julia> universalgas(CGS) # erg⋅K⁻¹⋅mol⁻¹ +$(universalgas(CGS)) + +julia> universalgas(British) # ft⋅lb⋅°R⁻¹⋅slug-mol⁻¹ +$(universalgas(British)) +``` +The 1976 United States Standard Atmosphere used R* = 8.31432 exactly. +""" universalgas, Rᵤ, Ru + +@doc """ + stefan(U::UnitSystem) = π^4/2*sphere(U)*boltzmann(U)^4/(15planck(U)^3*lightspeed(U)^2) + +Stefan-Boltzmann proportionality `σ` of black body radiation (W⋅m⁻²⋅K⁻⁴ or ?⋅ft⁻²⋅°R⁻⁴). + +```Julia +julia> stefan(Metric) # W⋅m⁻²⋅K⁻⁴ +$(stefan(Metric)) + +julia> stefan(CGS) # erg⋅cm⁻²⋅s⁻¹⋅K⁻⁴ +$(stefan(CGS)) + +julia> stefan(Metric)*day(Metric)/(calorie(Metric)*100^2) # cal⋅cm⁻²⋅day⁻¹⋅K⁻⁴ +$(stefan(Metric)*day(Metric)/calorie(Metric)) + +julia> stefan(English) # lb⋅s⁻¹⋅ft⁻³⋅°R⁻⁴ +$(stefan(English)) +``` +""" stefan, σ, SB + +@doc """ + radiationdensity(U::UnitSystem) = 4stefan(U)/lightspeed(U) + +Raditation density constant of black body radiation (J⋅m⁻³⋅K⁻⁴ or lb⋅ft⁻²⋅°R⁻⁴). + +```Julia +julia> radiationdensity(Metric) # J⋅m⁻³⋅K⁻⁴ +$(radiationdensity(Metric)) + +julia> radiationdensity(CGS) # erg⋅cm⁻³⋅K⁻⁴ +$(radiationdensity(CGS)) +``` +""" radiationdensity + +@doc """ + vacuumpermittivity(U::UnitSystem) = 1/vacuumpermeability(U)/(lightspeed(U)*lorentz(U))^2 + +Dielectric permittivity constant `ε₀` of a classical vacuum (C²⋅N⁻¹⋅m⁻²). + +```Julia +julia> vacuumpermittivity(Metric) # F⋅m⁻¹ +$(vacuumpermittivity(Metric)) + +julia> vacuumpermittivity(Conventional) # F⋅m⁻¹ +$(vacuumpermittivity(Conventional)) + +julia> vacuumpermittivity(CODATA) # F⋅m⁻¹ +$(vacuumpermittivity(CODATA)) + +julia> vacuumpermittivity(SI2019) # F⋅m⁻¹ +$(vacuumpermittivity(SI2019)) + +julia> vacuumpermittivity(EMU) # abF⋅cm⁻¹ +$(vacuumpermittivity(EMU)) + +julia> vacuumpermittivity(ESU) # statF⋅cm⁻¹ +$(vacuumpermittivity(ESU)) + +julia> vacuumpermittivity(SI2019)/elementarycharge(SI2019) # 𝘦²⋅eV⁻¹⋅m⁻¹ +$(vacuumpermittivity(SI2019)/elementarycharge(SI2019)) +``` +""" vacuumpermittivity, ε₀, ϵ₀, e0 + +@doc """ + coulomb(U::UnitSystem) = rationalization(U)/sphere(U)/vacuumpermittivity(U) + +Electrostatic proportionality constant `kₑ` for the Coulomb's law force (N⋅m²⋅C⁻²). + +```Julia +julia> coulomb(Metric) # N⋅m²⋅C⁻² +$(coulomb(Metric)) + +julia> coulomb(CODATA) # N·m²⋅C⁻² +$(coulomb(CODATA)) + +julia> coulomb(SI2019) # N·m²⋅C⁻² +$(coulomb(SI2019)) + +julia> coulomb(Conventional) # N·m²⋅C⁻² +$(coulomb(Conventional)) + +julia> coulomb(EMU) # dyn⋅cm²⋅abC⁻² +$(coulomb(EMU)) + +julia> coulomb(ESU) # dyn⋅cm²⋅statC⁻² +$(coulomb(ESU)) + +julia> coulomb(HLU) # dyn⋅cm²⋅hlC⁻² +$(coulomb(HLU)) +``` +""" coulomb, kₑ, ke + +@doc """ + biotsavart(U::UnitSystem) = vacuumpermeability(U)*lorentz(U)*rationalization(U)/sphere(U) + +Magnetostatic proportionality constant `αB` for the Biot-Savart's law (H/m). + +```Julia +julia> biotsavart(Metric) # H⋅m⁻¹ +$(biotsavart(Metric)) + +julia> biotsavart(CODATA) # H⋅m⁻¹ +$(biotsavart(CODATA)) + +julia> biotsavart(SI2019) # H⋅m⁻¹ +$(biotsavart(SI2019)) + +julia> biotsavart(Conventional) # H⋅m⁻¹ +$(biotsavart(Conventional)) + +julia> biotsavart(EMU) # abH⋅cm⁻¹ +$(biotsavart(EMU)) + +julia> biotsavart(ESU) # statH⋅cm⁻¹ +$(biotsavart(ESU)) + +julia> biotsavart(Gauss) # abH⋅cm⁻¹ +$(biotsavart(Gauss)) + +julia> biotsavart(HLU) # hlH⋅cm⁻¹ +$(biotsavart(HLU)) +``` +""" biotsavart, αB, aB + +@doc """ + ampere(U::UnitSystem) = lorentz(U)*biotsavart(U) # coulomb(U)/lightspeed(U)^2 + +Magnetic proportionality constant `kₘ` for the Ampere's law force (N·s²⋅C⁻²). + +```Julia +julia> ampere(Metric) # H⋅m⁻¹ +$(ampere(Metric)) + +julia> ampere(CODATA) # H⋅m⁻¹ +$(ampere(CODATA)) + +julia> ampere(SI2019) # H⋅m⁻¹ +$(ampere(SI2019)) + +julia> ampere(Conventional) # H⋅m⁻¹ +$(ampere(Conventional)) + +julia> ampere(EMU) # abH⋅m⁻¹ +$(ampere(EMU)) + +julia> ampere(ESU) # statH⋅m⁻¹ +$(ampere(ESU)) + +julia> ampere(HLU) # hlH⋅m⁻¹ +$(ampere(HLU)) +``` +""" ampere, kₘ, km + +@doc """ + vacuumimpedance(U::UnitSystem) = vacuumpermeability(U)*lightspeed(U)*rationalization(U)*lorentz(U)^2 + +Vacuum impedance of free space `Z₀` is magnitude ratio of electric to magnetic field (Ω). +```Julia +julia> vacuumimpedance(Metric) # Ω +$(vacuumimpedance(Metric)) + +julia> vacuumimpedance(Conventional) # Ω +$(vacuumimpedance(Conventional)) + +julia> vacuumimpedance(CODATA) # Ω +$(vacuumimpedance(CODATA)) + +julia> vacuumimpedance(SI2019) # Ω +$(vacuumimpedance(SI2019)) + +julia> 120π # 3e8*μ₀ # Ω +$(120π) + +julia> vacuumimpedance(EMU) # abΩ +$(vacuumimpedance(EMU)) + +julia> vacuumimpedance(ESU) # statΩ +$(vacuumimpedance(ESU)) + +julia> vacuumimpedance(HLU) # hlΩ +$(vacuumimpedance(HLU)) +``` +""" vacuumimpedance, Z₀, Z0 + +@doc """ + elementarycharge(U::UnitSystem) = √(2planck(U)*finestructure(U)/vacuumimpedance(U)) + +Quantized elementary charge `𝘦` of a proton or electron `2/(klitzing(U)*josephson(U))` (C). +```Julia +julia> elementarycharge(SI2019) # C +$(elementarycharge(SI2019)) + +julia> elementarycharge(Metric) # C +$(elementarycharge(Metric)) + +julia> elementarycharge(CODATA) # C +$(elementarycharge(CODATA)) + +julia> elementarycharge(Conventional) # C +$(elementarycharge(Conventional)) + +julia> elementarycharge(EMU) # abC +$(elementarycharge(EMU)) + +julia> elementarycharge(ESU) # statC +$(elementarycharge(ESU)) + +julia> elementarycharge(Planck) # sqrt(4π/αinv) +$(elementarycharge(Planck)) +``` +""" elementarycharge, 𝘦, ee + +@doc """ + faraday(U::UnitSystem) = elementarycharge(U)*avogadro(U) + +Electric charge per mole of electrons `𝔉` based on elementary charge (C⋅mol⁻¹). +```Julia +julia> faraday(SI2019) # C⋅mol⁻¹ +$(faraday(SI2019)) + +julia> faraday(Metric) # C⋅mol⁻¹ +$(faraday(Metric)) + +julia> faraday(CODATA) # C⋅mol⁻¹ +$(faraday(CODATA)) + +julia> faraday(Conventional) # C⋅mol⁻¹ +$(faraday(Conventional)) + +julia> faraday(EMU) # abC⋅mol⁻¹ +$(faraday(EMU)) + +julia> faraday(ESU) # statC⋅mol⁻¹ +$(faraday(ESU)) + +julia> faraday(Metric)/kilocalorie(Metric) # kcal⋅(V-g-e)⁻¹ +$(faraday(Metric)/kilocalorie(Metric)) + +julia> faraday(Metric)/3600 # A⋅h⋅mol⁻¹ +$(faraday(Metric)/HOUR) +``` +""" faraday, 𝔉, FF + +@doc """ + josephson(U::UnitSystem) = 2elementarycharge(U)*lorentz(U)/planck(U) # 1/magneticflux(U) + +Josephson constant `KJ` relating potential difference to irradiation frequency (Hz⋅V⁻¹). +```Julia +julia> josephson(SI2019) # Hz⋅V⁻¹ +$(josephson(SI2019)) + +julia> josephson(Metric) # Hz⋅V⁻¹ +$(josephson(Metric)) + +julia> josephson(Conventional) # Hz⋅V⁻¹ +$(josephson(Conventional)) + +julia> josephson(CODATA) # Hz⋅V⁻¹ +$(josephson(CODATA)) + +julia> josephson(EMU) # Hz⋅abV⁻¹ +$(josephson(EMU)) + +julia> josephson(ESU) # Hz⋅statV⁻¹ +$(josephson(ESU)) +``` +""" josephson, KJ + +@doc """ + magneticfluxquantum(U::UnitSystem) = planck(U)/2elementarycharge(U)/lorentz(U) + +Magnetic flux quantum `Φ₀` is `1/josephson(U)` (Wb). +```Julia +julia> magneticfluxquantum(SI2019) # Wb +$(magneticfluxquantum(SI2019)) + +julia> magneticfluxquantum(Metric) # Wb +$(magneticfluxquantum(Metric)) + +julia> magneticfluxquantum(Conventional) # Wb +$(magneticfluxquantum(Conventional)) + +julia> magneticfluxquantum(EMU) # Mx +$(magneticfluxquantum(EMU)) + +julia> magneticfluxquantum(ESU) # statWb +$(magneticfluxquantum(ESU)) +``` +""" magneticfluxquantum, Φ₀ + +@doc """ + klitzing(U::UnitSystem) = planck(U)/elementarycharge(U)^2 + +Quantized Hall resistance `RK` (Ω). +```Julia +julia> klitzing(SI2019) # Ω +$(klitzing(SI2019)) + +julia> klitzing(Metric) # Ω +$(klitzing(Metric)) + +julia> klitzing(Conventional) # Ω +$(klitzing(Conventional)) + +julia> klitzing(CODATA) # Ω +$(klitzing(CODATA)) + +julia> klitzing(EMU) # abΩ +$(klitzing(EMU)) + +julia> klitzing(ESU) # statΩ +$(klitzing(ESU)) +``` +""" klitzing, RK + +@doc """ + conductancequantum(U::UnitSystem) = 2elementarycharge(U)^2/planck(U) # 2/klitzing(U) + +Conductance quantum `G₀` is a quantized unit of electrical conductance (S). +```Julia +julia> conductancequantum(SI2019) # S +$(conductancequantum(SI2019)) + +julia> conductancequantum(Metric) # S +$(conductancequantum(Metric)) + +julia> conductancequantum(Conventional) # S +$(conductancequantum(Conventional)) + +julia> conductancequantum(CODATA) # S +$(conductancequantum(CODATA)) + +julia> conductancequantum(EMU) # abS +$(conductancequantum(EMU)) + +julia> conductancequantum(ESU) # statS +$(conductancequantum(ESU)) +``` +""" conductancequantum, G₀, G0 + +@doc """ + hartree(U::UnitSystem) = electronmass(U)*(lightspeed(U)*finestructure(U))^2 # mₑ*(𝘤/αinv)^2 + +Hartree electric potential energy `Eₕ` of the hydrogen atom at ground state is `2R∞*𝘩*𝘤` (J). +```Julia +julia> hartree(SI2019)/elementarycharge(SI2019) # eV +$(hartree(SI2019)/elementarycharge(SI2019)) + +julia> hartree(Metric) # J +$(hartree(Metric)) + +julia> hartree(CGS) # erg +$(hartree(CGS)) + +julia> hartree(Metric)*avogadro(Metric)/1000 # kJ⋅mol⁻¹ +$(hartree(Metric)*avogadro(Metric)/(𝟐*𝟑)^3) + +julia> hartree(Metric)*avogadro(Metric)/kilocalorie(Metric) # kcal⋅mol⁻¹ +$(hartree(Metric)*avogadro(Metric)/kilocalorie(Metric)) + +julia> 2rydberg(Metric)/100 # Eₕ/𝘩/𝘤/100 cm⁻¹ +$(hartree(Metric)/planck(Metric)/lightspeed(Metric)/(𝟐*𝟓)^2) + +julia> hartree(Metric)/planck(Metric)/10^12 # THz +$(hartree(Metric)/planck(Metric)) + +julia> hartree(Metric)/boltzmann(Metric) # K +$(hartree(Metric)/boltzmann(Metric)) +``` +In a Gaussian unit system where `4π*ε₀ == 1` the Hartree energy is `𝘦^2/a₀`. +""" hartree, Eₕ, Eh + +@doc """ + rydberg(U::UnitSystem) = hartree(U)/2planck(U)/lightspeed(U) # Eₕ/2𝘩/𝘤 + +Rydberg constant `R∞` is lowest energy photon capable of ionizing atom at ground state (m⁻¹). +```Julia +julia> rydberg(Metric) # m⁻¹ +$(rydberg(Metric)) +``` +The Rydberg constant for hydrogen `RH` is `R∞*mₚ/(mₑ+mₚ)` (m⁻¹). +```Julia +julia> rydberg(Metric)*protonmass(Metric)/(electronmass(Metric)+protonmass(Metric)) # m⁻¹ +$(rydberg(Metric)*protonmass(Metric)/(electronmass(Metric)+protonmass(Metric))) +``` +Rydberg unit of photon energy `Ry` is `𝘩*𝘤*R∞` or `Eₕ/2` (J). +```Julia +julia> hartree(Metric)/2 # J +$(hartree(Metric)/𝟐) + +julia> hartree(SI2019)/𝟐/charge(SI2019) # eV +$(hartree(SI2019)/𝟐/elementarycharge(SI2019)) +``` +Rydberg photon frequency `𝘤*R∞` or `Eₕ/2𝘩` (Hz). +```Julia +julia> lightspeed(Metric)*rydberg(Metric) # Hz +$(lightspeed(Metric)*rydberg(Metric)) +``` +Rydberg wavelength `1/R∞` (m). +```Julia +julia> 𝟏/rydberg(Metric) # m +$(𝟏/rydberg(Metric)) + +julia> 𝟏/rydberg(Metric)/τ # m⋅rad⁻¹ +$(𝟏/rydberg(Metric)/τ) +``` +Precision measurements of the Rydberg constants are within a relative standard uncertainty of under 2 parts in 10¹², and is chosen to constrain values of other physical constants. +""" rydberg, R∞, RH, Ry + +@doc """ + bohr(U) = planckreduced(U)/electronmass(U)/lightspeed(U)/finestructure(U) + +Bohr radius of the hydrogen atom in its ground state `a₀` (m). +```Julia +julia> bohr(Metric) # m +$(bohr(Metric)) +``` +""" bohr, a₀, a0 +#julia> bohr(Metric)/length(PlanckGauss) # ℓP +#$(bohr(Metric)/length(PlanckGauss)) + +@doc """ + bohrreduced(U::UnitSystem) = bohr(U)*(1+1/protonelectron(U)) + +Reduced Bohr radius including the effect of reduced mass in hydrogen atom (m). +```Julia +julia> bohrreduced(Metric) # m +$(bohrreduced(Metric)) + +julia> bohrreduced(Metric)/bohr(Metric) # a₀ +$(bohrreduced(Metric)/bohr(Metric)) +``` +""" bohrreduced + +@doc """ + electronradius(U) = finestructure(U)*planckreduced(U)/electronmass(U)/lightspeed(U) + +Classical electron radius or Lorentz radius or Thomson scattering length (m). +```Julia +julia> electronradius(Metric) # m +$(electronradius(Metric)) + +julia> electronradius(CODATA) # m +$(electronradius(CODATA)) + +julia> electronradius(Conventional) # m +$(electronradius(Conventional)) +``` +""" electronradius, rₑ, re + +@doc """ + magneton(U::UnitSystem) = elementarycharge(U)*planckreduced(U)*lorentz(U)/2electronmass(U) + +Bohr magneton `μB` natural unit for expressing magnetic moment of electron (J⋅T⁻¹). +```Julia +julia> magneton(SI2019) # J⋅T⁻¹ +$(magneton(SI2019)) + +julia> magneton(Metric) # J⋅T⁻¹ +$(magneton(Metric)) + +julia> magneton(CODATA) # J⋅T⁻¹ +$(magneton(CODATA)) + +julia> magneton(Conventional) # J⋅T⁻¹ +$(magneton(Conventional)) + +julia> magneton(EMU2019) # erg⋅G⁻¹ +$(magneton(EMU2019)) + +julia> magneton(ESU2019) # statA⋅cm² +$(magneton(ESU2019)) + +julia> magneton(SI2019)/elementarycharge(SI2019) # eV⋅T⁻¹ +$(magneton(SI2019)/elementarycharge(SI2019)) + +julia> magneton(Hartree) # 𝘤⋅ħ⋅mₑ⁻¹ +$(magneton(Hartree)) +``` +""" magneton, μB + +@doc """ + hyperfine(U::UnitSystem) = frequency($ΔνCs,U) + +Unperturbed groundstate hyperfine transition frequency `ΔνCs` of caesium-133 atom (Hz). +```Julia +julia> hyperfine(Metric) # Hz +$(hyperfine(Metric)) +``` +""" hyperfine, ΔνCs + +@doc """ + hubble(U::UnitSystem) = time(U,Hubble) + +Hubble parameter. +```Julia +julia> hubble(SI2019) +$(hubble(SI2019)) + +julia> hubble(Hubble) +$(hubble(Hubble)) +``` +""" hubble + +@doc """ + cosmological(U::UnitSystem) = 3darkenergydensity(U)*(hubble(U)/lightspeed(U))^2 + +Cosmological constant. +```Julia +julia> cosmological(SI2019) +$(cosmological(SI2019)) +``` +""" cosmological + +@doc """ + standardgravity(U::UnitSystem) = acceleration($g₀,U) + +Standard gravity `acceleration` `g₀` at geodetic reference latitude (m⋅s⁻² or ft⋅s⁻²). +```Julia +julia> standardgravity(Metric) # m⋅s⁻² +$(standardgravity(Metric)) + +julia> standardgravity(English) # ft⋅s⁻² +$(standardgravity(English)) + +julia> standardgravity(Survey) # ftUS⋅s⁻² +$(standardgravity(Survey)) +``` +""" standardgravity, g₀, g0, lbm + +@doc """ + pressure(U::UnitSystem) = pressure($atm,U) + +Standard `pressure` reference level of one atmosphere `atm` (Pa or lb⋅ft⁻²). +```Julia +julia> standardpressure(Metric) # Pa +$(standardpressure(Metric)) + +julia> standardpressure(English) # lbm⋅ft⁻¹⋅s⁻² +$(standardpressure(English)) + +julia> standardpressure(Survey) # lbm⋅ftUS⁻¹⋅s⁻² +$(standardpressure(Survey)) +``` +""" standardpressure, atm + +@doc """ + temperature(U::UnitSystem) = temperature($atm,U) + +Standard `temperature` reference level at sea level (K or °R). +```Julia +julia> standardtemperature(Metric) # K +$(standardtemperature(Metric)) + +julia> standardtemperature(SI2019) # K +$(standardtemperature(SI2019)) + +julia> standardtemperature(English) # °R +$(standardtemperature(English)) + +julia> standardtemperature(English2019) # °R +$(standardtemperature(English2019)) +``` +""" standardtemperature, Tₛ + +@doc """ + solarmass(U::UnitSystem) = mass($(GM☉/G),U) + +Solar `mass` estimated from gravitational constant estimates (kg or slug). +```Julia +julia> solarmass(Metric) # kg +$(solarmass(Metric)) + +julia> solarmass(British) # slug +$(solarmass(British)) + +julia> solarmass(English) # lb +$(solarmass(English)) + +julia> solarmass(IAUE) # ME +$(solarmass(IAUE)) + +julia> solarmass(IAUJ) # MJ +$(solarmass(IAUJ)) +``` +""" solarmass, mₛ + +@doc """ + earthmass(U::UnitSystem) = mass($(GME/G),U) + +Earth `mass` estimated from gravitational constant estimates (kg or slug). +```Julia +julia> earthmass(Metric) # kg +$(earthmass(Metric)) + +julia> earthmass(British) # slug +$(earthmass(British)) + +julia> earthmass(English) # lb +$(earthmass(English)) + +julia> earthmass(IAU) # M☉ +$(earthmass(IAU)) + +julia> earthmass(IAUJ) # MJ +$(earthmass(IAUJ)) +``` +""" earthmass + +@doc """ + jupitermass(U::UnitSystem) = mass($(GMJ/G),U) + +Jupiter `mass` estimated from gravitational constant estimates (kg or slug). +```Julia +julia> jupitermass(Metric) # kg +$(jupitermass(Metric)) + +julia> jupitermass(British) # slug +$(jupitermass(British)) + +julia> jupitermass(English) # lb +$(jupitermass(English)) + +julia> jupitermass(IAU) # M☉ +$(jupitermass(IAU)) + +julia> jupitermass(IAUE) # ME +$(jupitermass(IAUE)) +``` +""" jupitermass + +@doc """ + lunarmass(U::UnitSystem) = earthmass(U)/μE☾ + +Lunar `mass` estimated from `μE☾` Earth-Moon mass ratio (kg or slug). +```Julia +julia> lunarmass(Metric) # kg +$(lunarmass(Metric)) + +julia> jupitermass(British) # slug +$(lunarmass(British)) + +julia> lunarmass(English) # lb +$(lunarmass(English)) + +julia> lunarmass(IAU) # M☉ +$(lunarmass(IAU)) + +julia> lunarmass(IAUE) # ME +$(lunarmass(IAUE)) + +julia> lunarmass(IAUJ) # MJ +$(lunarmass(IAUJ)) +``` +""" lunarmass + +@doc """ + astronomicalunit(U::UnitSystem) = length($au,U) + +Standard astronomical unit from the International Astronomical Union (m or ft). +```Julia +julia> astronomicalunit(Metric) # m +$(astronomicalunit(Metric)) + +julia> astronomicalunit(English) # ft +$(astronomicalunit(English)) + +julia> astronomicalunit(Survey) # ftUS +$(astronomicalunit(Survey)) +``` +""" astronomicalunit, au + +@doc """ + lunardistance(U::UnitSystem) = length($LD,U) + +Standard distance between the Earth and the Moon (m or ft). +```Julia +julia> lunardistance(Metric) # m +$(lunardistance(Metric)) + +julia> lunardistance(English) # ft +$(lunardistance(English)) + +julia> lunardistance(Survey) # ftUS +$(lunardistance(Survey)) +``` +""" lunardistance, LD + +@doc """ + mile(U::UnitSystem) = length($(Constant(5280)*ft),U) + +Statute mile (m or ft). +```Julia +julia> mile(Metric) # m +$(mile(Metric)) + +julia> mile(English) # ft +$(mile(English)) + +julia> mile(Survey) # ftUS +$(mile(Survey)) +``` +""" mile + +@doc """ + clarkemile(U::UnitSystem) = length($nm,U) + +Historic nautical mile as defined by the Clarke (m or ft). +```Julia +julia> clarkemile(Metric) # m +$(clarkemile(Metric)) + +julia> clarkemile(English) # ft +$(clarkemile(English)) + +julia> clarkemile(Survey) # ftUS +$(clarkemile(Survey)) +``` +""" clarkemile + +@doc """ + nauticalmile(U::UnitSystem) = length($nm,U) + +Historic nautical mile as defined by the French (m or ft). +```Julia +julia> nauticalmile(Metric) # m +$(nauticalmile(Metric)) + +julia> nauticalmile(English) # ft +$(nauticalmile(English)) + +julia> nauticalmile(Survey) # ftUS +$(nauticalmile(Survey)) +``` +""" nauticalmile, nm + +@doc """ + kilocalorie(U::UnitSystem) = energy(𝟐^5*𝟓^4*𝟑^2/𝟒𝟑,U,International) + +Heat energy required to raise 1 kg of water by 1 Kelvin (`kcal`). +```Julia +julia> kilocalorie(International) +$(kilocalorie(International)) + +julia> kilocalorie(Metric) +$(kilocalorie(Metric)) +``` +""" kilocalorie, kcal + +@doc """ + calorie(U::UnitSystem) = kilocalorie(U)/𝟐^3/𝟓^3 + +Heat energy required to raise 1 g of water by 1 Kelvin (`kcal`) in `International` scale. +```Julia +julia> calorie(International) +$(calorie(International)) + +julia> calorie(Metric) +$(calorie(Metric)) +``` +""" calorie, cal + +@doc """ + meancalorie(U::UnitSystem) = energy(𝟐^2*𝟓*𝟑^2/𝟒𝟑,U,InternationalMean) + +Heat energy required to raise 1 g of water by 1 Kelvin (`kcal`) in `InternationalMean`. +```Julia +julia> meancalorie(InternationalMean) +$(meancalorie(InternationalMean)) + +julia> meancalorie(Metric) +$(meancalorie(Metric)) +``` +""" meancalorie + +@doc """ + thermalunit(U::UnitSystem) = kilocalorie(U)*𝟑^2/𝟓/lb + +Heat energy required to raise 1 lb of water by 1 Rankine (`BTU`) in `International` scale. +```Julia +julia> thermalunit(British) +$(thermalunit(British)) + +julia> thermalunit(International) +$(thermalunit(International)) + +julia> thermalunit(Metric) +$(thermalunit(Metric)) +``` +""" thermalunit, BTU, BTUJ, BTUftlb + +@doc """ + tonsrefrigeration(U::UnitSystem) = frequency(𝟐*𝟓/𝟑,U,Metric)*thermalunit(U) + +Unit of `power` derived from melting of 1 short ton of ice in 24 hours. +```Julia +julia> tonsrefrigeration(British) +$(tonsrefrigeration(British)) + +julia> tonsrefrigeration(Metric) +$(tonsrefrigeration(Metric)) +``` +""" tonsrefrigeration + +@doc """ + boilerhorsepower(U::UnitSystem) = frequency(1339/𝟐^4/𝟑^2,U,Metric)*thermalunit(U) + +Unit of `power` derived from evaporating 34.5 lb of boiling water in 1 hour. +```Julia +julia> boilerhorsepower(British) +$(boilerhorsepower(British)) + +julia> boilerhorsepower(Metric) +$(boilerhorsepower(Metric)) +``` +""" boilerhorsepower + +@doc """ + horsepower(U::UnitSystem) = power(𝟐*𝟓^2*𝟏𝟏,U,British) + +Unit of `power` derived from raising 550 lb by 1 ft in 1 in 1 s. +```Julia +julia> horsepower(British) +$(horsepower(British)) + +julia> horsepower(Metric) +$(horsepower(Metric)) + +julia> horsepower(MetricEngineering) +$(horsepower(MetricEngineering)) +``` +""" horsepower, HP + +@doc """ + horsepowerwatt(U::UnitSystem) = power(𝟐^4*𝟑^3/𝟓*τ,U,British) + +Unit of `power` derived from Watt's exact original horse power estimate. +```Julia +julia> horsepowerwatt(British) +$(horsepowerwatt(British)) + +julia> horsepowerwatt(Metric) +$(horsepowerwatt(Metric)) + +julia> horsepowerwatt(MetricEngineering) +$(horsepowerwatt(MetricEngineering)) +``` +""" horsepowerwatt + +@doc """ + horsepowermetric(U::UnitSystem) = power(𝟑*𝟓^2,U,GravitationalMetric) + +Unit of `power` derived from raising 75 kp by 1 m in 1 in 1 s. +```Julia +julia> horsepowermetric(British) +$(horsepowermetric(British)) + +julia> horsepowermetric(Metric) +$(horsepowermetric(Metric)) + +julia> horsepowermetric(MetricEngineering) +$(horsepowermetric(MetricEngineering)) +``` +""" horsepowermetric + +@doc """ + electricalhorsepower(U::UnitSystem) = power(746,U,Metric) + +Unit of `power` for electrical motors in the United States. +```Julia +julia> electricalhorsepower(British) +$(electricalhorsepower(British)) + +julia> electricalhorsepower(Metric) +$(electricalhorsepower(Metric)) + +julia> electricalhorsepower(MetricEngineering) +$(electricalhorsepower(MetricEngineering)) +``` +""" electricalhorsepower + +@doc """ + gallon(U::UnitSystem) = volume(𝟕*𝟏𝟏/𝟐^2,U,English) + +Unit of `volume` derived from the US liquid `gallon` in cubic inches. +```Julia +julia> gallon(English) +$(gallon(English)) + +julia> gallon(Metric) +$(gallon(Metric)) +``` +""" gallon, gal + +@doc """ + litre(U::UnitSystem) = volume(𝟏𝟎^-3,U,Metric) + +Unit of `volume` derived from 1 cubic decimetre. +```Julia +julia> litre(Metric) +$(gallon(Metric)) + +julia> gallon(English) +$(gallon(English)) +``` +""" litre + +@doc """ + inchmercury(U::UnitSystem) = pressure(inHg,U,Metric) + +Unit of `pressure` exerted by 1 inch of mercury at standard atmospheric conditions. +```Julia +juila> inchmercury(Metric) +$(inchmercury(Metric)) + +julia> inchmercury(English) +$(inchmercury(English)) +``` +""" inchmercury, inHg + +@doc """ + torr(U::UnitSystem) = pressure(atm/𝟐^3/𝟓/𝟏𝟗,U,Metric) + +Unit of `pressure` exerted by 1 mm of mercury at standard atmospheric conditions. +```Julia +juila> torr(Metric) +$(torr(Metric)) + +julia> torr(English) +$(torr(English)) +``` +""" torr + +@doc """ + second(U::UnitSystem) = time(𝟏,U,Metric) + +Unit of `time` defined by `hyperfine` transition frequency of Cs-133 atom. +```Julia +julia> second(Metric) +$(second(Metric)) + +julia> second(IAU) +$(second(IAU)) +``` +""" second + +@doc """ + minute(U::UnitSystem) = 𝟐^2*𝟑*𝟓*second(U) + +Unit of `time` defined by 60 `second` intervals. +```Julia +julia> minute(Metric) +$(minute(Metric)) + +julia> minute(IAU) +$(minute(IAU)) +``` +""" minute + +@doc """ + hour(U::UnitSystem) = 𝟐^2*𝟑*𝟓*minute(U) + +Unit of `time` defined by 60 `minute` intervals. +```Julia +julia> hour(Metric) +$(hour(Metric)) + +julia> hour(IAU) +$(hour(IAU)) +``` +""" hour, HOUR + +@doc """ + day(U::UnitSystem) = 𝟐^3*𝟑*hour(U) + +Unit of `time` defined by 24 `hour` intervals. +```Julia +julia> day(Metric) +$(day(Metric)) + +julia> day(IAU) +$(day(IAU)) +``` +""" day, DAY + +@doc """ + year(U::UnitSystem) = aⱼ*day(U) + +Unit of `time` defined by Julian calendar year interval. +```Julia +julia> year(Metric) +$(year(Metric)) + +julia> year(IAU) +$(year(IAU)) +``` +""" year, aⱼ + +@doc """ + gaussianyear(U::UnitSystem) = (τ/k)*day(U) + +Unit of `time` defined by Gaussian gravitational constant. +```Julia +julia> gaussianyear(Metric) +$(gaussianyear(Metric)) + +julia> gaussianyear(IAU) +$(gaussianyear(IAU)) +``` +""" gaussianyear + +@doc """ + siderealyear(U::UnitSystem) = τ/k/√(𝟏+earthmass(IAU)+lunarmass(IAU))*day(U) + +Unit of `time` defined by Gaussian gravitational constant and the Earth system mass. +```Julia +julia> siderealyear(Metric) +$(siderealyear(Metric)) + +julia> siderealyear(IAU) +$(siderealyear(IAU)) +``` +""" siderealyear + +@doc """ + lightyear(U::UnitSystem) = year(U)*lightspeed(U) + +Unit of `length` defined by distance traveled by light in 1 `year` unit. +```Julia +julia> lightyear(Metric) +$(lightyear(Metric)) + +julia> lightyear(IAU) +$(lightyear(IAU)) +``` +""" lightyear, ly + +@doc """ + parsec(U::UnitSystem) = astronomicalunit(U)*𝟐^2*𝟑^4*𝟓^3/τ + +Unit of `length` defined at which 1 `astronomicalunit` subtends an angle of 1 arcsecond. +```Julia +julia> parsec(Metric) +$(parsec(Metric)) + +julia> parsec(IAU) +$(parsec(IAU)) +``` +""" parsec, pc + +#=@pure kilogram(U::UnitSystem) = mass(Metric,U) +@pure slug(U::UnitSystem) = mass(English,U) + +@pure meter(U::UnitSystem) = length(Metric,U) +@pure foot(U::UnitSystem) = length(English,U)=# + +#rankine, kelvin, moles/molecules +#add gravitional units of weight?? diff --git a/src/systems.jl b/src/systems.jl index 28eb503..1c90909 100644 --- a/src/systems.jl +++ b/src/systems.jl @@ -1,32 +1,38 @@ -# This file is part of UnitSystems.jl. It is licensed under the MIT license +# This file is part of UnitSystems.jl +# It is licensed under the MIT license # UnitSystems Copyright (C) 2021 Michael Reed - -export Universe, coupling, finestructure, electronunit, protonunit, protonelectron -#const Mu,Ru,SB,hh,cc,m0,e0,ke,me,mp,mu,ee,FF,Z0,G0,Eh,a0,re,g0,lP,ϵ₀,mB = Mᵤ,Rᵤ,σ,𝘩,𝘤,μ₀,ε₀,kₑ,mₑ,mₚ,mᵤ,𝘦,𝔉,Z₀,G₀,Eₕ,a₀,rₑ,g₀,ℓP,ε₀,μB -export slug, ft, KJ1990, KJ2014, RK1990, RK2014, mₑ1990, mₑ2014, temp, units -export slugs, kilograms, lbm, meters, feet, rankine, kelvin, moles, molecules -export UnitSystem, US, SI, MKS, CGS, CGS2019, CGSm, CGSe, HLU, FFF +# _ _ _ +# | | | | | | +# ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ +# / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | +# | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | +# \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| +# +# https://github.com/chakravala +# https://crucialflow.com + +export slug, ft, KJ1990, KJ2014, RK1990, RK2014, mₑ1990, mₑ2014, temp, units, °R +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 similitude, 𝟙, F, M, L, T, Q, Θ, N, J, A, Λ, C # == Metric is different const κ = einstein(SI2019) const σ = stefan(SI2019) # const μB = magneton(SI2019) # -const ε₀ = permittivity(SI2019) # +const ε₀ = vacuumpermittivity(SI2019) # const kₑ = coulomb(SI2019) # const mₚ = protonmass(SI2019) const mᵤ = atomicmass(SI2019) -const Mᵤ = molarmass(SI2019) const 𝔉 = faraday(SI2019) # -const Φ₀ = magneticflux(SI2019) # -const Z₀ = impedance(SI2019) # -const G₀ = conductance(SI2019) # +const Φ₀ = magneticfluxquantum(SI2019) # +const Z₀ = vacuumimpedance(SI2019) # +const G₀ = conductancequantum(SI2019) # const Eₕ = hartree(SI2019) const a₀ = bohr(SI2019) const rₑ = electronradius(SI2019) -const RK = klitzing(SI2019) # -const KJ = josephson(SI2019) # -const RH,Ry = R∞*mₚ/(mₑ+mₚ),𝘩*𝘤*R∞ +const RH,Ry = R∞*mₚ/(electronmass(SI2019)+mₚ),𝘩*𝘤*R∞ const ℓP = length(PlanckGauss,SI2019) const tP = time(PlanckGauss,SI2019) @@ -48,20 +54,266 @@ const mQCD = mass(QCD,SI2019) # non standard units -const BTUftlb = 3600/0.5778thermalconductivity(English) # BTU⋅ft⁻¹⋅lb⁻¹ -const BTUJ = energy(English)*BTUftlb # BTU⋅J⁻¹ +const BTU = thermalunit(British) +const BTUftlb = thermalunit(British) # BTU⋅ft⁻¹⋅lb⁻¹ +const BTUJ = thermalunit(SI2019) # BTU⋅J⁻¹ +const HP = horsepower(Metric) +const gal = gallon(Metric) +const kcal = kilocalorie(SI2019) +const cal = calorie(SI2019) +const universal = universalgas # constant aliases -const mpe, meu, mpu, ainv, aG = μₚₑ, μₑᵤ, μₚᵤ, αinv, αG +const US,mpe, meu, mpu, ainv, aG = UnitSystem,μₚₑ, μₑᵤ, μₚᵤ, αinv, αG 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, 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, ϵ₀, αL, aL # engineering unit systems docs +@doc """ + Metric = MetricSystem(𝟏𝟎^-3,𝟐*τ/𝟏𝟎^7) + +Systeme International d'Unites (the SI units) adopted as the preferred `UnitSystem`. + +```Julia +julia> boltzmann(Metric) # J⋅K⁻¹ +$(boltzmann(Metric)) + +julia> planckreduced(Metric) # J⋅s⋅rad⁻¹ +$(planckreduced(Metric)) + +julia> lightspeed(Metric) # m⋅s⁻¹ +$(lightspeed(Metric)) + +julia> vacuumpermeability(Metric) # H⋅m⁻¹ +$(vacuumpermeability(Metric)) + +julia> electronmass(Metric) # kg +$(electronmass(Metric)) + +julia> molarmass(Metric) # kg⋅mol⁻¹ +$(molarmass(Metric)) +``` +""" Metric, MKS + +@doc """ + SI2019 = MetricSystem(Mᵤ,μ₀) + +Systeme International d'Unites (the SI units) with `μ₀` for a tuned `charge` exactly. + +```Julia +julia> boltzmann(SI2019) # J⋅K⁻¹ +$(boltzmann(SI2019)) + +julia> planckreduced(SI2019) # J⋅s⋅rad⁻¹ +$(planckreduced(SI2019)) + +julia> lightspeed(SI2019) # m⋅s⁻¹ +$(lightspeed(SI2019)) + +julia> vacuumpermeability(SI2019) # H⋅m⁻¹ +$(vacuumpermeability(SI2019)) + +julia> electronmass(SI2019) # kg +$(electronmass(SI2019)) + +julia> molarmass(SI2019) # kg⋅mol⁻¹ +$(molarmass(SI2019)) +``` +""" SI2019, SI + +@doc """ + MetricEngineering = MetricSystem(𝟏𝟎^-3,𝟐*τ/𝟏𝟎^7,Rᵤ,g₀) + +Systeme International d'Unites (the SI units) based on kilogram and kilopond units. + +```Julia +julia> boltzmann(MetricEngineering) # J⋅K⁻¹ +$(boltzmann(MetricEngineering)) + +julia> planckreduced(MetricEngineering) # J⋅s⋅rad⁻¹ +$(planckreduced(MetricEngineering)) + +julia> lightspeed(MetricEngineering) # m⋅s⁻¹ +$(lightspeed(MetricEngineering)) + +julia> vacuumpermeability(MetricEngineering) # H⋅m⁻¹ +$(vacuumpermeability(MetricEngineering)) + +julia> electronmass(MetricEngineering) # kg +$(electronmass(MetricEngineering)) + +julia> molarmass(MetricEngineering) # kg⋅mol⁻¹ +$(molarmass(MetricEngineering)) + +julia> gravity(MetricEngineering) # kg⋅m⋅N⁻¹⋅s⁻² +$(gravity(MetricEngineering)) +``` +""" MetricEngineering, ME + +@doc """ + SI2019Engineering = MetricSystem(Mᵤ,μ₀,Rᵤ,g₀) + +Systeme International d'Unites (the SI units) based on kilogram and kilopond units. + +```Julia +julia> boltzmann(SI2019Engineering) # J⋅K⁻¹ +$(boltzmann(SI2019Engineering)) + +julia> planckreduced(SI2019Engineering) # J⋅s⋅rad⁻¹ +$(planckreduced(SI2019Engineering)) + +julia> lightspeed(SI2019Engineering) # m⋅s⁻¹ +$(lightspeed(SI2019Engineering)) + +julia> vacuumpermeability(SI2019Engineering) # H⋅m⁻¹ +$(vacuumpermeability(SI2019Engineering)) + +julia> electronmass(SI2019Engineering) # kg +$(electronmass(SI2019Engineering)) + +julia> molarmass(SI2019Engineering) # kg⋅mol⁻¹ +$(molarmass(SI2019Engineering)) + +julia> gravity(SI2019Engineering) # kg⋅m⋅N⁻¹⋅s⁻² +$(gravity(SI2019Engineering)) +``` +""" SI2019Engineering, SIE + +@doc """ + SI1976 = MetricSystem(𝟏𝟎^-3,𝟐*τ/𝟏𝟎^7,8.31432) + +Systeme International d'Unites (the SI units) with universal gas constant of `8.31432`. + +```Julia +julia> boltzmann(SI1976) # J⋅K⁻¹ +$(boltzmann(SI1976)) + +julia> planckreduced(SI1976) # J⋅s⋅rad⁻¹ +$(planckreduced(SI1976)) + +julia> lightspeed(SI1976) # m⋅s⁻¹ +$(lightspeed(SI1976)) + +julia> vacuumpermeability(SI1976) # H⋅m⁻¹ +$(vacuumpermeability(SI1976)) + +julia> electronmass(SI1976) # kg +$(electronmass(SI1976)) + +julia> molarmass(SI1976) # kg⋅mol⁻¹ +$(molarmass(SI1976)) +``` +""" SI1976 + +@doc """ + CODATA = ConventionalSystem(RK2014,KJ2014,Rᵤ2014) + +Metric `UnitSystem` based on Committee on Data of the International Science Council. + +```Julia +julia> boltzmann(CODATA) # J⋅K⁻¹ +$(boltzmann(CODATA)) + +julia> planckreduced(CODATA) # J⋅s⋅rad⁻¹ +$(planckreduced(CODATA)) + +julia> lightspeed(CODATA) # m⋅s⁻¹ +$(lightspeed(CODATA)) + +julia> vacuumpermeability(CODATA) # H⋅m⁻¹ +$(vacuumpermeability(CODATA)) + +julia> electronmass(CODATA) # kg +$(electronmass(CODATA)) + +julia> molarmass(CODATA) # kg⋅mol⁻¹ +$(molarmass(CODATA)) +``` +""" CODATA + +@doc """ + Conventional = ConventionalSystem(RK1990,KJ2014) + +Conventional electronic `UnitSystem` with 1990 tuned `josephson` and `klitzing` constants. + +```Julia +julia> boltzmann(Conventional) # J⋅K⁻¹ +$(boltzmann(Conventional)) + +julia> planckreduced(Conventional) # J⋅s⋅rad⁻¹ +$(planckreduced(Conventional)) + +julia> lightspeed(Conventional) # m⋅s⁻¹ +$(lightspeed(Conventional)) + +julia> vacuumpermeability(Conventional) # H⋅m⁻¹ +$(vacuumpermeability(Conventional)) + +julia> electronmass(Conventional) # kg +$(electronmass(Conventional)) + +julia> molarmass(Conventional) # kg⋅mol⁻¹ +$(molarmass(Conventional)) +``` +""" Conventional + +@doc """ + International = ElectricSystem(Metric,Ωᵢₜ,Vᵢₜ) + +International `UnitSystem` with United States measurements of `Ωᵢₜ` and `Vᵢₜ`. + +```Julia +julia> boltzmann(International) # J⋅K⁻¹ +$(boltzmann(International)) + +julia> planckreduced(International) # J⋅s⋅rad⁻¹ +$(planckreduced(International)) + +julia> lightspeed(International) # m⋅s⁻¹ +$(lightspeed(International)) + +julia> vacuumpermeability(International) # H⋅m⁻¹ +$(vacuumpermeability(International)) + +julia> electronmass(International) # kg +$(electronmass(International)) + +julia> molarmass(International) # kg⋅mol⁻¹ +$(molarmass(International)) +``` +""" International + +@doc """ + InternationalMean = ElectricSystem(Metric,1.00049,1.00034) + +International `UnitSystem` with mean measurements of `Ωᵢₜ` and `Vᵢₜ`. + +```Julia +julia> boltzmann(InternationalMean) # J⋅K⁻¹ +$(boltzmann(InternationalMean)) + +julia> planckreduced(InternationalMean) # J⋅s⋅rad⁻¹ +$(planckreduced(InternationalMean)) + +julia> lightspeed(InternationalMean) # m⋅s⁻¹ +$(lightspeed(InternationalMean)) + +julia> vacuumpermeability(InternationalMean) # H⋅m⁻¹ +$(vacuumpermeability(InternationalMean)) + +julia> electronmass(InternationalMean) # kg +$(electronmass(InternationalMean)) + +julia> molarmass(InternationalMean) # kg⋅mol⁻¹ +$(molarmass(InternationalMean)) +``` +""" InternationalMean + cgstext(US,AMP,cgs=eval(US)) = """ ```Julia julia> boltzmann($US) # erg⋅K⁻¹ @@ -73,12 +325,15 @@ $(planckreduced(cgs)) julia> lightspeed($US) # cm⋅s⁻¹ $(lightspeed(cgs)) -julia> permeability($US) # statH⋅cm⁻¹ -$(permeability(cgs)) +julia> vacuumpermeability($US) # statH⋅cm⁻¹ +$(vacuumpermeability(cgs)) julia> electronmass($US) # g $(electronmass(cgs)) +julia> molarmass($US) # g⋅mol⁻¹ +$(molarmass(cgs)) + julia> rationalization($US) $(rationalization(cgs)) ``` @@ -87,7 +342,7 @@ $(rationalization(cgs)) for U ∈ (:CGSm,:CGSe,:EMU,:ESU) (EU,AMP) = QuoteNode.(U ∉ (:CGSe,:ESU) ? (:EMU,:Bi) : (:ESU,:statA)) @eval @doc """ - $($(QuoteNode(U)))::UnitSystem{1e10*Rᵤ*mₑ/μₑᵤ,1e7*ħ,100𝘤,$($EU≠:EMU ? "(100𝘤)^-2" : 1),1000mₑ,4π} + $($(QuoteNode(U))) = GaussSystem(Metric,$($EU≠:EMU ? "(𝟏𝟎*𝘤)^-2" : 𝟏),𝟐*τ) Centimetre-gram-second `UnitSystem` variant based on `$($EU)` (non-rationalized). @@ -95,7 +350,7 @@ $(cgstext($(QuoteNode(U)),$AMP)) """ $U U ∉ (:CGSm,:CGSe) && @eval @doc """ - $(Symbol($(QuoteNode(U)),:2019))::UnitSystem{1e7*kB,1e7*ħ,100𝘤,$($EU≠:EMU ? "1e3*μ₀/𝘤^2" : "1e7*μ₀"),1000mₑ} + $(Symbol($(QuoteNode(U)),:2019)) = EntropySystem(SI2019,𝟏,0.01,0.001,𝟏,$($EU≠:EMU ? "1e3*μ₀/𝘤^2" : "1e7*μ₀")) Centimetre-gram-second `UnitSystem` variant of tuned `SI2019` based on `$($EU)` (rationalized). @@ -104,7 +359,7 @@ $(cgstext(Symbol($(QuoteNode(U)),:2019),$AMP)) end @doc """ - Thomson::UnitSystem{1e10*Rᵤ*mₑ/μₑᵤ,1e7*ħ,100𝘤,1,1000mₑ,4π,1/2} + Thomson = GaussSystem(Metric,𝟏,𝟐*τ,𝟏/𝟐) Centimetre-gram-second `UnitSystem` variant `Thomson` (EMU-Lorentz, non-rationalized). @@ -118,12 +373,15 @@ $(planckreduced(Thomson)) julia> lightspeed(Thomson) # cm⋅s⁻¹ $(lightspeed(Thomson)) -julia> permeability(Thomson) # abH⋅cm⁻¹ -$(permeability(Thomson)) +julia> vacuumpermeability(Thomson) # abH⋅cm⁻¹ +$(vacuumpermeability(Thomson)) julia> electronmass(Thomson) # g $(electronmass(Thomson)) +julia> molarmass(Thomson) # g⋅mol⁻¹ +$(molarmass(Thomson)) + julia> rationalization(Thomson) $(rationalization(Thomson)) @@ -133,7 +391,7 @@ $(lorentz(Thomson)) """ Thomson @doc """ - Gauss::UnitSystem{1e10*Rᵤ*mₑ/μₑᵤ,1e7*ħ,100𝘤,1,1000mₑ,4π,0.01/𝘤} + Gauss = GaussSystem(Metric,𝟏,𝟐*τ,𝟏𝟎^-2/𝘤) Centimetre-gram-second `UnitSystem` variant `CGS` (Gauss-Lorentz, non-rationalized). @@ -147,12 +405,15 @@ $(planckreduced(Gauss)) julia> lightspeed(Gauss) # cm⋅s⁻¹ $(lightspeed(Gauss)) -julia> permeability(Gauss) # statH⋅cm⁻¹ -$(permeability(Gauss)) +julia> vacuumpermeability(Gauss) # statH⋅cm⁻¹ +$(vacuumpermeability(Gauss)) julia> electronmass(Gauss) # g $(electronmass(Gauss)) +julia> molarmass(Gauss) # g⋅mol⁻¹ +$(molarmass(Gauss)) + julia> rationalization(Gauss) $(rationalization(Gauss)) @@ -162,7 +423,7 @@ $(lorentz(Gauss)) """ Gauss, CGS @doc """ - LorentzHeaviside::UnitSystem{1e10*Rᵤ*mₑ/μₑᵤ,1e7*ħ,100𝘤,1,1000mₑ,1,0.01/𝘤} + LorentzHeaviside = GaussSystem(Metric,𝟏,𝟏,𝟏𝟎^-2/𝘤) Centimetre-gram-second `UnitSystem` variant `HLU` (Heaviside-Lorentz, rationalized). @@ -176,12 +437,15 @@ $(planckreduced(LorentzHeaviside)) julia> lightspeed(LorentzHeaviside) # cm⋅s⁻¹ $(lightspeed(LorentzHeaviside)) -julia> permeability(HLU) # hlH⋅cm⁻¹ -$(permeability(LorentzHeaviside)) +julia> vacuumpermeability(HLU) # hlH⋅cm⁻¹ +$(vacuumpermeability(LorentzHeaviside)) julia> electronmass(LorentzHeaviside) # g $(electronmass(LorentzHeaviside)) +julia> molarmass(LorentzHeaviside) # g⋅mol⁻¹ +$(molarmass(LorentzHeaviside)) + julia> rationalization(LorentzHeaviside) $(rationalization(LorentzHeaviside)) @@ -191,7 +455,88 @@ $(lorentz(LorentzHeaviside)) """ LorentzHeaviside, HLU @doc """ - MTS::UnitSystem{1e6*Rᵤ*mₑ/μₑᵤ,1000ħ,𝘤,4π/1e4,mₑ/1000} + Kennelly = GaussSystem(Metric,𝟏𝟎^-7,𝟐*τ,𝟏,𝟏,𝟏) + +Kennelly ? variant `UnitSystem` of the standard `Metric` units ??? + +```Julia +julia> boltzmann(Kennelly) # J⋅K⁻¹ +$(boltzmann(Kennelly)) + +julia> planckreduced(Kennelly) # J⋅s⋅rad⁻¹ +$(planckreduced(Kennelly)) + +julia> lightspeed(Kennelly) # m⋅s⁻¹ +$(lightspeed(Kennelly)) + +julia> vacuumpermeability(Kennelly) # H⋅m⁻¹ +$(vacuumpermeability(Kennelly)) + +julia> electronmass(Kennelly) # kg +$(electronmass(Kennelly)) + +julia> molarmass(Kennelly) # kg⋅mol⁻¹ +$(molarmass(Kennelly)) + +julia> rationalization(Kennelly) +$(rationalization(Kennelly)) +``` +""" Kennelly + +@doc """ + GravitationalMetric = EntropySystem(Metric,𝟏,𝟏,g₀) + +Systeme International d'Unites (the SI units) based on hyl and kilopond units. + +```Julia +julia> boltzmann(GravitationalMetric) # J⋅K⁻¹ +$(boltzmann(GravitationalMetric)) + +julia> planckreduced(GravitationalMetric) # J⋅s⋅rad⁻¹ +$(planckreduced(GravitationalMetric)) + +julia> lightspeed(GravitationalMetric) # m⋅s⁻¹ +$(lightspeed(GravitationalMetric)) + +julia> vacuumpermeability(GravitationalMetric) # H⋅m⁻¹ +$(vacuumpermeability(GravitationalMetric)) + +julia> electronmass(GravitationalMetric) # hyl +$(electronmass(GravitationalMetric)) + +julia> molarmass(GravitationalMetric) # hyl⋅mol⁻¹ +$(molarmass(GravitationalMetric)) +``` +""" GravitationalMetric, GM + +@doc """ + GraviationalSI2019 = EntropySystem(SI2019,𝟏,𝟏,g₀) + +Systeme International d'Unites (the SI units) based on hyl and kilopond units. + +```Julia +julia> boltzmann(GravitationalSI2019) # J⋅K⁻¹ +$(boltzmann(GravitationalSI2019)) + +julia> planckreduced(GravitationalSI2019) # J⋅s⋅rad⁻¹ +$(planckreduced(GravitationalSI2019)) + +julia> lightspeed(GravitationalSI2019) # m⋅s⁻¹ +$(lightspeed(GravitationalSI2019)) + +julia> vacuumpermeability(SI2019Engineering) # H⋅m⁻¹ +$(vacuumpermeability(GravitationalSI2019)) + +julia> electronmass(SI2019Engineering) # hyl +$(electronmass(GravitationalSI2019)) + +julia> molarmass(SI2019) # hyl⋅mol⁻¹ +$(molarmass(SI2019Engineering)) +``` +""" GravitationalSI2019, GSI, GSI2019 + +@doc """ + MTS = EntropySystem(SI2019,𝟏,𝟏,𝟏𝟎^3) Metre-tonne-second `UnitSystem` variant of `Metric` system. @@ -205,177 +550,456 @@ $(planckreduced(MTS)) julia> lightspeed(MTS) # m⋅s⁻¹ $(lightspeed(MTS)) -julia> permeability(MTS) # kH⋅m⁻¹ -$(permeability(MTS)) +julia> vacuumpermeability(MTS) # kH⋅m⁻¹ +$(vacuumpermeability(MTS)) julia> electronmass(MTS) # t $(electronmass(MTS)) + +julia> molarmass(MTS) # t⋅mol⁻¹ +$(molarmass(MTS)) ``` """ MTS @doc """ - Metric::UnitSystem{Rᵤ*mₑ/μₑᵤ/0.001,ħ,𝘤,4π*1e-7,mₑ} + KKH = EntropySystem(Metric,HOUR,𝟏𝟎^3,𝟏) -Systeme International d'Unites (the SI units) adopted as the preferred `UnitSystem`. +Kilometer-kilogram-hour `UnitSystem` variant of `Metric` system. ```Julia -julia> boltzmann(Metric) # J⋅K⁻¹ -$(boltzmann(Metric)) +julia> boltzmann(KKH) +$(boltzmann(KKH)) -julia> planckreduced(Metric) # J⋅s⋅rad⁻¹ -$(planckreduced(Metric)) +julia> planckreduced(KKH) +$(planckreduced(KKH)) -julia> lightspeed(Metric) # m⋅s⁻¹ -$(lightspeed(Metric)) +julia> lightspeed(KKH) # km⋅hr⁻¹ +$(lightspeed(KKH)) -julia> permeability(Metric) # H⋅m⁻¹ -$(permeability(Metric)) +julia> vacuumpermeability(KKH) +$(vacuumpermeability(KKH)) -julia> electronmass(Metric) # kg -$(electronmass(Metric)) +julia> electronmass(KKH) # kg +$(electronmass(KKH)) + +julia> molarmass(KKH) # kg⋅mol⁻¹ +$(molarmass(KKH)) ``` -""" Metric +""" KKH @doc """ - SI2019::UnitSystem{kB,ħ,𝘤,μ₀,mₑ} + IAU☉ = EntropySystem(Metric,DAY,au,GM☉/G) -Systeme International d'Unites (the SI units) with `μ₀` for a tuned `charge` exactly. +Astronomical (solar) `UnitSystem` defined by International Astronomical Union. ```Julia -julia> boltzmann(SI2019) # J⋅K⁻¹ -$(boltzmann(SI2019)) +julia> boltzmann(IAU) # M⊙⋅au²⋅D⁻²⋅K⁻¹ +$(boltzmann(IAU)) -julia> planckreduced(SI2019) # J⋅s⋅rad⁻¹ -$(planckreduced(SI2019)) +julia> planckreduced(IAU) # M⊙⋅au²⋅D⁻¹⋅rad⁻¹ +$(planckreduced(IAU)) -julia> lightspeed(SI2019) # m⋅s⁻¹ -$(lightspeed(SI2019)) +julia> lightspeed(IAU) # au⋅D⁻¹ +$(lightspeed(IAU)) -julia> permeability(SI2019) # H⋅m⁻¹ -$(permeability(SI2019)) +julia> vacuumpermeability(IAU) # M⊙⋅au²⋅C⁻² +$(vacuumpermeability(IAU)) -julia> electronmass(SI2019) # kg -$(electronmass(SI2019)) +julia> electronmass(IAU) # M⊙ +$(electronmass(IAU)) + +julia> molarmass(IAU) # M☉⋅mol⁻¹ +$(molarmass(IAU)) + +julia> newton(IAU) +$(newton(IAU)) ``` -""" SI2019, SI +""" IAU☉, IAU @doc """ - CODATA::UnitSystem{Rᵤ*mₑ2014/μₑᵤ/0.001,2/RK2014/KJ2014^2/π,𝘤,2RK2014/𝘤/αinv,mₑ2014} + IAUE = EntropySystem(Metric,DAY,au,GME/G) -Metric `UnitSystem` based on Committee on Data of the International Science Council. +Astronomical (Earth) `UnitSystem` defined by International Astronomical Union. ```Julia -julia> boltzmann(CODATA) # J⋅K⁻¹ -$(boltzmann(CODATA)) +julia> boltzmann(IAUE) # ME⋅au²⋅D⁻²⋅K⁻¹ +$(boltzmann(IAUE)) -julia> planckreduced(CODATA) # J⋅s⋅rad⁻¹ -$(planckreduced(CODATA)) +julia> planckreduced(IAUE) # ME⋅au²⋅D⁻¹⋅rad⁻¹ +$(planckreduced(IAUE)) -julia> lightspeed(CODATA) # m⋅s⁻¹ -$(lightspeed(CODATA)) +julia> lightspeed(IAUE) # au⋅D⁻¹ +$(lightspeed(IAUE)) -julia> permeability(CODATA) # H⋅m⁻¹ -$(permeability(CODATA)) +julia> vacuumpermeability(IAUE) # ME⋅au²⋅C⁻² +$(vacuumpermeability(IAUE)) -julia> electronmass(CODATA) # kg -$(electronmass(CODATA)) +julia> electronmass(IAUE) # ME +$(electronmass(IAUE)) + +julia> molarmass(IAUE) # ME⋅mol⁻¹ +$(molarmass(IAUE)) ``` -""" CODATA +""" IAUE @doc """ - Conventional::UnitSystem{Rᵤ*mₑ1990/μₑᵤ/0.001,2/RK1990/KJ1990^2/π,𝘤,2RK1990/𝘤/αinv,mₑ1990} + IAUJ = EntropySystem(Metric,DAY,au,GMJ/G) -Conventional electronic `UnitSystem` with 1990 tuned `josephson` and `klitzing` constants. +Astronomical (Jupiter) `UnitSystem` defined by International Astronomical Union. ```Julia -julia> boltzmann(Conventional) # J⋅K⁻¹ -$(boltzmann(Conventional)) +julia> boltzmann(IAUJ) # MJ⋅au²⋅D⁻²⋅K⁻¹ +$(boltzmann(IAUJ)) -julia> planckreduced(Conventional) # J⋅s⋅rad⁻¹ -$(planckreduced(Conventional)) +julia> planckreduced(IAUJ) # MJ⋅au²⋅D⁻¹⋅rad⁻¹ +$(planckreduced(IAUJ)) -julia> lightspeed(Conventional) # m⋅s⁻¹ -$(lightspeed(Conventional)) +julia> lightspeed(IAUJ) # au⋅D⁻¹ +$(lightspeed(IAUJ)) -julia> permeability(Conventional) # H⋅m⁻¹ -$(permeability(Conventional)) +julia> vacuumpermeability(IAUJ) # MJ⋅au²⋅C⁻² +$(vacuumpermeability(IAUJ)) -julia> electronmass(Conventional) # kg -$(electronmass(Conventional)) +julia> electronmass(IAU) # MJ +$(electronmass(IAUJ)) + +julia> molarmass(IAUJ) # MJ⋅mol⁻¹ +$(molarmass(IAUJ)) ``` -""" Conventional +""" IAUJ @doc """ - IAU::UnitSystem{Rᵤ*mₑ/μₑᵤ/0.001/Jₛ,ħ*day/Jₛ,day*𝘤/au,4π*1e-7*day^2/Jₛ,mₑ/mₛ} + Astronomical = AstronomicalSystem(Metric) -Astronomical (solar) `UnitSystem` defined by International Astronomical Union. +Astronomical `UnitSystem` defined by making the `newton` gravitational constant 1. ```Julia -julia> boltzmann(IAU) # M⊙⋅au²⋅D⁻²⋅K⁻¹ -$(boltzmann(IAU)) +julia> boltzmann(Astronomical) +$(boltzmann(Astronomical)) -julia> planckreduced(IAU) # M⊙⋅au²⋅D⁻¹⋅rad⁻¹ -$(planckreduced(IAU)) +julia> planckreduced(Astronomical) +$(planckreduced(Astronomical)) -julia> lightspeed(IAU) # au⋅D⁻¹ -$(lightspeed(IAU)) +julia> lightspeed(Astronomical) +$(lightspeed(Astronomical)) -julia> permeability(IAU) # M⊙⋅au²⋅C⁻² -$(permeability(IAU)) +julia> vacuumpermeability(Astronomical) +$(vacuumpermeability(Astronomical)) -julia> electronmass(IAU) # M⊙ -$(electronmass(IAU)) +julia> electronmass(Astronomical) +$(electronmass(Astronomical)) + +julia> molarmass(Astronomical) +$(molarmass(Astronomical)) + +julia> newton(Astronomical) +$(newton(Astronomical)) +``` +""" Astronomical + +@doc """ + Hubble = EntropySystem(Metric,th,𝘤*th,𝟏) + +Hubble `UnitSystem` defined by `hubble` parameter. + +```Julia +julia> boltzmann(Hubble) +$(boltzmann(Hubble)) + +julia> planckreduced(Hubble) +$(planckreduced(Hubble)) + +julia> lightspeed(Hubble) +$(lightspeed(Hubble)) + +julia> vacuumpermeability(Hubble) +$(vacuumpermeability(Hubble)) + +julia> electronmass(Hubble) +$(electronmass(Hubble)) + +julia> molarmass(Hubble) +$(molarmass(Hubble)) + +julia> hubble(Hubble) +$(hubble(Hubble)) +``` +""" Hubble + +@doc """ + Cosmological = EntropySystem(Metric,lc/𝘤,lc,mc) + +Cosmological scale `UnitSystem` defined by `darkenergydensity`. + +```Julia +julia> boltzmann(Cosmological) +$(boltzmann(Cosmological)) + +julia> planckreduced(Cosmological) +$(planckreduced(Cosmological)) + +julia> lightspeed(Cosmological) +$(lightspeed(Cosmological)) + +julia> vacuumpermeability(Cosmological) +$(vacuumpermeability(Cosmological)) + +julia> electronmass(Cosmological) +$(electronmass(Cosmological)) + +julia> molarmass(Cosmological) +$(molarmass(Cosmological)) +``` +""" Cosmological + +@doc """ + CosmologicalQuantum = EntropySystem(Metric,tcq,lcq,mcq) + +Cosmological quantum scale `UnitSystem` defined by `darkenergydensity`. + +```Julia +julia> boltzmann(CosmologicalQuantum) +$(boltzmann(CosmologicalQuantum)) + +julia> planckreduced(CosmologicalQuantum) +$(planckreduced(CosmologicalQuantum)) + +julia> lightspeed(CosmologicalQuantum) +$(lightspeed(CosmologicalQuantum)) + +julia> vacuumpermeability(CosmologicalQuantum) +$(vacuumpermeability(CosmologicalQuantum)) + +julia> electronmass(CosmologicalQuantum) +$(electronmass(CosmologicalQuantum)) + +julia> molarmass(Cosmological) +$(molarmass(Cosmological)) ``` -""" IAU +""" CosmologicalQuantum @doc """ - English::UnitSystem{kB*rankine/slug/ft^2,ħ/slug/ft^2,𝘤/ft,4π,mₑ/slug} + British = RankineSystem(Metric,ft,slug) -Engineering `UnitSystem` historically used by Britain and United States. +British Gravitational `UnitSystem` historically used by Britain and United States. ```Julia -julia> boltzmann(English) # ft⋅lb⋅°R⁻¹ +julia> boltzmann(British) # ft⋅lb⋅°R⁻¹ +$(boltzmann(British)) + +julia> planckreduced(British) # ft⋅lb⋅s⋅rad⁻¹ +$(planckreduced(British)) + +julia> lightspeed(British) # ft⋅s⁻¹ +$(lightspeed(British)) + +julia> vacuumpermeability(British) # slug⋅ft²⋅?⁻² +$(vacuumpermeability(British)) + +julia> electronmass(British) # slugs +$(electronmass(British)) + +julia> molarmass(British) # slug⋅slug-mol⁻¹ +$(molarmass(British)) +``` +""" British, BritishGravitational, BG + +@doc """ + British2019 = RankineSystem(SI2019,ft,slug) + +British Gravitational `UnitSystem` historically used by Britain and United States. + +```Julia +julia> boltzmann(British2019) # ft⋅lb⋅°R⁻¹ +$(boltzmann(British2019)) + +julia> planckreduced(British2019) # ft⋅lb⋅s⋅rad⁻¹ +$(planckreduced(British2019)) + +julia> lightspeed(British2019) # ft⋅s⁻¹ +$(lightspeed(British2019)) + +julia> vacuumpermeability(British2019) # slug⋅ft²⋅?⁻² +$(vacuumpermeability(British2019)) + +julia> electronmass(British2019) # slugs +$(electronmass(British2019)) + +julia> molarmass(British2019) # slug⋅slug-mol⁻¹ +$(molarmass(British2019)) +``` +""" British2019, BritishGravitational2019, BG2019 + +@doc """ + English = RankineSystem(Metric,ft,lb,g₀/ft) + +English Engineering `UnitSystem` historically used in the United States of America. + +```Julia +julia> boltzmann(English) # ft⋅lbf⋅°R⁻¹ $(boltzmann(English)) -julia> planckreduced(English) # ft⋅lb⋅s⋅rad⁻¹ +julia> planckreduced(English) # ft⋅lbf⋅s⋅rad⁻¹ $(planckreduced(English)) julia> lightspeed(English) # ft⋅s⁻¹ $(lightspeed(English)) -julia> permeability(English) # slug⋅ft²⋅?⁻² -$(permeability(English)) +julia> vacuumpermeability(English) # lbm⋅ft²⋅?⁻² +$(vacuumpermeability(English)) -julia> electronmass(English) # slugs +julia> electronmass(English) # lbm $(electronmass(English)) + +julia> molarmass(English) # lbm⋅lb-mol⁻¹ +$(molarmass(English)) + +julia> gravity(English) # lbm⋅ft⋅lbf⁻¹⋅s⁻² +$(gravity(English)) +``` +""" English, EnglishEngineering, EE + +@doc """ + English2019 = RankineSystem(SI2019,ft,lb,g₀/ft) + +English Engineering `UnitSystem` historically used in the United States of America. + +```Julia +julia> boltzmann(English2019) # ftUS⋅lbf⋅°R⁻¹ +$(boltzmann(English2019)) + +julia> planckreduced(English2019) # ft⋅lbf⋅s⋅rad⁻¹ +$(planckreduced(English2019)) + +julia> lightspeed(English2019) # ft⋅s⁻¹ +$(lightspeed(English2019)) + +julia> vacuumpermeability(English2019) # lbm⋅ft²⋅?⁻² +$(vacuumpermeability(English2019)) + +julia> electronmass(English2019) # lbm +$(electronmass(English2019)) + +julia> molarmass(English2019) # lbm⋅lb-mol⁻¹ +$(molarmass(English2019)) + +julia> gravity(English2019) # lbm⋅ft⋅lbf⁻¹⋅s⁻² +$(gravity(English2019)) +``` +""" English2019, EnglishEngineering2019, EE2019 + +@doc """ + Survey = RankineSystem(Metric,ftUS,lb,g₀/ftUS) + +English Engineering `UnitSystem` based on the geophysical US survey foot (1200/3937). + +```Julia +julia> boltzmann(Survey) # ftUS⋅lbf⋅°R⁻¹ +$(boltzmann(Survey)) + +julia> planckreduced(Survey) # ftUS⋅lbf⋅s⋅rad⁻¹ +$(planckreduced(Survey)) + +julia> lightspeed(Survey) # ftUS⋅s⁻¹ +$(lightspeed(Survey)) + +julia> vacuumpermeability(Survey) # lbm⋅ftUS²⋅?⁻² +$(vacuumpermeability(Survey)) + +julia> electronmass(Survey) # lbm +$(electronmass(Survey)) + +julia> molarmass(Survey) # lbm⋅lb-mol⁻¹ +$(molarmass(Survey)) + +julia> gravity(Survey) # lbm⋅ftUS⋅lbf⁻¹⋅s⁻² +$(gravity(Survey)) ``` -""" English +""" Survey, EnglishUS @doc """ - EnglishUS::UnitSystem{1000Rᵤ*mₑ/μₑᵤ*rankine/slug/ftUS^2,ħ/slug/ftUS^2,𝘤/ftUS,4π,mₑ/slug} + Survey2019 = RankineSystem(SI2019,ftUS,lb,g₀/ftUS) -Engineering `UnitSystem` based on the geophysical US survey foot (1200/3937). +English Engineering `UnitSystem` based on the geophysical US survey foot (1200/3937). ```Julia -julia> boltzmann(EnglishUS) # ftUS⋅lb⋅°R⁻¹ -$(boltzmann(EnglishUS)) +julia> boltzmann(Survey2019) # ftUS⋅lbf⋅°R⁻¹ +$(boltzmann(Survey2019)) -julia> planckreduced(EnglishUS) # ftUS⋅lb⋅s⋅rad⁻¹ -$(planckreduced(EnglishUS)) +julia> planckreduced(Survey2019) # ftUS⋅lbf⋅s⋅rad⁻¹ +$(planckreduced(Survey2019)) -julia> lightspeed(EnglishUS) # ftUS⋅s⁻¹ -$(lightspeed(EnglishUS)) +julia> lightspeed(Survey2019) # ftUS⋅s⁻¹ +$(lightspeed(Survey2019)) -julia> permeability(EnglishUS) # slug⋅ftUS²⋅?⁻² -$(permeability(EnglishUS)) +julia> vacuumpermeability(Survey2019) # lbm⋅ftUS²⋅?⁻² +$(vacuumpermeability(Survey2019)) -julia> electronmass(EnglishUS) # slugs -$(electronmass(EnglishUS)) +julia> electronmass(Survey2019) # lbm +$(electronmass(Survey2019)) + +julia> molarmass(Survey2019) # lbm⋅lb-mol⁻¹ +$(molarmass(Survey2019)) + +julia> gravity(Survey2019) # lbm⋅ftUS⋅lbf⁻¹⋅s⁻² +$(gravity(Survey2019)) +``` +""" Survey2019 + +@doc """ + FPS = RankineSystem(Metric,ft,lb) + +Absolute English `UnitSystem` based on the foot, pound, second, and poundal. + +```Julia +julia> boltzmann(FPS) # ft⋅pdl⋅°R⁻¹ +$(boltzmann(FPS)) + +julia> planckreduced(FPS) # ft⋅pdl⋅s⋅rad⁻¹ +$(planckreduced(FPS)) + +julia> lightspeed(FPS) # ft⋅s⁻¹ +$(lightspeed(FPS)) + +julia> vacuumpermeability(FPS) # lb⋅ft²⋅?⁻² +$(vacuumpermeability(FPS)) + +julia> electronmass(FPS) # lb +$(electronmass(FPS)) + +julia> molarmass(FPS) # lb⋅lb-mol⁻¹ +$(molarmass(FPS)) +``` +""" FPS, AbsoluteEnglish, AE + +@doc """ + FPS2019 = RankineSystem(SI2019,ft,lb) + +Absolute English `UnitSystem` based on the foot, pound, second, and poundal. + +```Julia +julia> boltzmann(FPS2019) # ft⋅pdl⋅°R⁻¹ +$(boltzmann(FPS2019)) + +julia> planckreduced(FPS2019) # ft⋅pdl⋅s⋅rad⁻¹ +$(planckreduced(FPS2019)) + +julia> lightspeed(FPS2019) # ft⋅s⁻¹ +$(lightspeed(FPS2019)) + +julia> vacuumpermeability(FPS2019) # lb⋅ft²⋅?⁻² +$(vacuumpermeability(FPS2019)) + +julia> electronmass(FPS2019) # lb +$(electronmass(FPS2019)) + +julia> molarmass(FPS2019) # lb⋅lb-mol⁻¹ +$(molarmass(FPS2019)) ``` -""" EnglishUS +""" FPS2019, AE2019, AbsoluteEnglish2019 @doc """ - FFF::UnitSystem{Rᵤ*mₑ/μₑᵤ/0.001*rankine/Jf,ħ/14day/Jf,14day*𝘤/201.168,0,mₑ/mf} + FFF = EntropySystem(Metric,𝟐*𝟕*DAY,fur,𝟐*𝟑^2*𝟓*lb,°R,0,𝟏) Furlong–firkin–fortnight `FFF` is a humorous `UnitSystem` based on unusal impractical units. @@ -389,39 +1013,68 @@ $(planckreduced(FFF)) julia> lightspeed(FFF) # fur⋅ftn⁻¹ $(lightspeed(FFF)) -julia> permeability(FFF) # fir⋅fur²⋅Inf⁻² -$(permeability(FFF)) +julia> vacuumpermeability(FFF) # fir⋅fur²⋅Inf⁻² +$(vacuumpermeability(FFF)) julia> electronmass(FFF) # fir $(electronmass(FFF)) + +julia> molarmass(FFF) # fir⋅fir-mol⁻¹ +$(molarmass(FFF)) ``` """ FFF @doc """ - Kennelly::UnitSystem{Rᵤ*mₑ/μₑᵤ/0.001,ħ,𝘤,1e-7,mₑ,4π} + MPH = EntropySystem(English,HOUR,𝟐^5*𝟑*𝟓*𝟏𝟏,𝟏) -Kennelly ? variant `UnitSystem` of the standard `Metric` units ??? +Miles, pound, hour specification based on `English` Engineering `UnitSystem`. ```Julia -julia> boltzmann(Kennelly) # J⋅K⁻¹ -$(boltzmann(Kennelly)) +julia> boltzmann(MPH) # lbf⋅mi²⋅hr⁻²⋅F⁻¹ +$(boltzmann(MPH)) -julia> planckreduced(Kennelly) # J⋅s⋅rad⁻¹ -$(planckreduced(Kennelly)) +julia> planckreduced(MPH) # lbf⋅mi²⋅hr⁻¹⋅rad⁻¹ +$(planckreduced(MPH)) -julia> lightspeed(Kennelly) # m⋅s⁻¹ -$(lightspeed(Kennelly)) +julia> lightspeed(MPH) # mi⋅hr⁻¹ +$(lightspeed(MPH)) -julia> permeability(Kennelly) # H⋅m⁻¹ -$(permeability(Kennelly)) +julia> vacuumpermeability(MPH) # lbm⋅mi²⋅Inf⁻² +$(vacuumpermeability(MPH)) -julia> electronmass(Kennelly) # kg -$(electronmass(Kennelly)) +julia> electronmass(MPH) # lbm +$(electronmass(MPH)) -julia> rationalization(Kennelly) -$(rationalization(Kennelly)) +julia> molarmass(MPH) # lbm⋅lb-mol⁻¹ +$(molarmass(MPH)) ``` -""" Kennelly +""" MPH + +@doc """ + Nautical = EntropySystem(English,HOUR,𝟐^6*𝟓*𝟏𝟗,𝟏) + +Nautical miles, pound, hour specification based on `English` Engineering `UnitSystem`. + +```Julia +julia> boltzmann(Nautical) # lbf⋅nm²⋅hr⁻²⋅F⁻¹ +$(boltzmann(Nautical)) + +julia> planckreduced(Nautical) # lbf⋅nm²⋅hr⁻¹⋅rad⁻¹ +$(planckreduced(Nautical)) + +julia> lightspeed(Nautical) # nm⋅hr⁻¹ +$(lightspeed(Nautical)) + +julia> vacuumpermeability(Nautical) # lbm⋅nm²⋅Inf⁻² +$(vacuumpermeability(Nautical)) + +julia> electronmass(Nuatical) # lbm +$(electronmass(Nautical)) + +julia> molarmass(Nautical) # lbm⋅lb-mol⁻¹ +$(molarmass(Nautical)) +``` +""" Nautical # natural unit system docs @@ -436,8 +1089,8 @@ $(planckreduced(U)) julia> lightspeed($S) $(lightspeed(U)) -julia> permeability($S) -$(permeability(U)) +julia> vacuumpermeability($S) +$(vacuumpermeability(U)) julia> electronmass($S) $(electronmass(U)) @@ -445,7 +1098,7 @@ $(electronmass(U)) """ @doc """ - Planck::UnitSystem{1,1,1,1,√(4π*αG)} + Planck = UnitSystem(𝟏,𝟏,𝟏,𝟏,√(𝟐*τ*αG)) Planck `UnitSystem` with the `electronmass` value `√(4π*αG)` using gravitational coupling. @@ -453,7 +1106,7 @@ $(textunits(Planck,:Planck)) """ Planck @doc """ - PlanckGauss::UnitSystem{1,1,1,4π,√αG} + PlanckGauss = UnitSystem(𝟏,𝟏,𝟏,𝟐*τ,√αG) Planck (Gauss) `UnitSystem` with `permeability` of `4π` and `electronmass` coupling `√αG`. @@ -476,9 +1129,9 @@ $(temperature(PlanckGauss,Metric)) """ PlanckGauss @doc """ - Stoney::UnitSystem{1,αinv,1,4π,√(αG*αinv)} + Stoney = UnitSystem(𝟏,𝟏/α,𝟏,𝟐*τ,√(αG/α)} -Stoney `UnitSystem` with `permeability` of `4π` and `electronmass` coupling `√(αG*αinv)`. +Stoney `UnitSystem` with `permeability` of `4π` and `electronmass` coupling `√(αG/α)`. $(textunits(Stoney,:Stoney)) @@ -499,9 +1152,9 @@ $(charge(Stoney,Metric)) """ Stoney @doc """ - Hartree::UnitSystem{1,1,αinv,4π/αinv^2,1} + Hartree = UnitSystem(𝟏,𝟏,𝟏/α,𝟐*τ*α^2,𝟏) -Hartree atomic `UnitSystem` with `lightspeed` of `αinv` and `permeability` of `4π/αinv^2`. +Hartree atomic `UnitSystem` with `lightspeed` of `αinv` and `permeability` of `𝟐*τ*α^2`. $(textunits(Hartree,:Hartree)) @@ -522,15 +1175,15 @@ $(charge(Hartree,Metric)) """ Hartree @doc """ - Rydberg::UnitSystem{1,1,2αinv,π/αinv^2,1/2} + Rydberg = UnitSystem(𝟏,𝟏,𝟐/α,τ/𝟐*α^2,𝟏/𝟐) -Rydberg `UnitSystem` with `lightspeed` of `2αinv` and `permeability` of `π/αinv^2`. +Rydberg `UnitSystem` with `lightspeed` of `𝟐/α` and `permeability` of `π*α^2`. $(textunits(Rydberg,:Rydberg)) """ Rydberg @doc """ - Schrodinger::UnitSystem{1,1,αinv,4π/αinv^2,√(αG*αinv)} + Schrodinger = UnitSystem(𝟏,𝟏,𝟏/α,𝟐*τ*α^2,√(αG/α)) Schrodinger `UnitSystem` with `permeability` of `4π/αinv^2` and `electronmass` of `√(αG*αinv)`. @@ -538,15 +1191,15 @@ $(textunits(Schrodinger,:Schrodinger)) """ Schrodinger @doc """ - Electronic::UnitSystem{1,αinv,1,4π,1} + Electronic = UnitSystem(𝟏,𝟏/α,𝟏,𝟐*τ,𝟏} -Electronic `UnitSystem` with `planckreduced` of `αinv` and `permeability` of `4π`. +Electronic `UnitSystem` with `planckreduced` of `1/α` and `permeability` of `4π`. $(textunits(Electronic,:Electronic)) """ Electronic @doc """ - Natural::UnitSystem{1,1,1,1,1} + Natural = UnitSystem(𝟏,𝟏,𝟏,𝟏,𝟏) Natural `UnitSystem` with all primary constants having unit value. @@ -569,7 +1222,7 @@ $(charge(Natural,Metric)) """ Natural @doc """ - NaturalGauss::UnitSystem{1,1,1,4π,1} + NaturalGauss = UnitSystem(𝟏,𝟏,𝟏,𝟐*τ,𝟏} Natural (Gauss) `UnitSystem` with the Gaussian `permeability` value of `4π`. @@ -577,9 +1230,9 @@ $(textunits(NaturalGauss,:NaturalGauss)) """ NaturalGauss @doc """ - QCD::UnitSystem{1,1,1,1,1/μₚₑ} + QCD = UnitSystem(𝟏,𝟏,𝟏,𝟏,𝟏/μₚₑ) -Qunatum chromodynamics `UnitSystem` with `electronmass` of `1/μₚₑ` or `1/$μₚₑ`. +Qunatum chromodynamics `UnitSystem` with `electronmass` of `𝟏/μₚₑ` or `𝟏/$μₚₑ`. $(textunits(QCD,:QCD)) @@ -600,9 +1253,9 @@ $(charge(QCD,Metric)) """ QCD @doc """ - QCDGauss::UnitSystem{1,1,1,4π,1/μₚₑ} + QCDGauss = UnitSystem(𝟏,𝟏,𝟏,𝟐*τ,𝟏/μₚₑ) -Qunatum chromodynamics (Gauss) `UnitSystem` with `electronmass` of `1/μₚₑ`. +Qunatum chromodynamics (Gauss) `UnitSystem` with `electronmass` of `𝟏/μₚₑ`. $(textunits(QCDGauss,:QCDGauss)) @@ -623,9 +1276,9 @@ $(charge(QCDGauss,Metric)) """ QCDGauss @doc """ - QCDoriginal::UnitSystem{1,1,1,4π/αinv,1/μₚₑ} + QCDoriginal = UnitSystem(𝟏,𝟏,𝟏,𝟐*τ*α,𝟏/μₚₑ) -Qunatum chromodynamics (original) `UnitSystem` with `permeability` of `4π/αinv`. +Qunatum chromodynamics (original) `UnitSystem` with `permeability` of `4π*α`. $(textunits(QCDoriginal,:QCDoriginal)) diff --git a/src/thermodynamic.jl b/src/thermodynamic.jl index ab69901..b153104 100644 --- a/src/thermodynamic.jl +++ b/src/thermodynamic.jl @@ -1,448 +1,73 @@ -# This file is part of UnitSystems.jl. It is licensed under the MIT license +# This file is part of UnitSystems.jl +# It is licensed under the MIT license # UnitSystems Copyright (C) 2020 Michael Reed +# _ _ _ +# | | | | | | +# ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ +# / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | +# | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | +# \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| +# +# https://github.com/chakravala +# https://crucialflow.com @doc """ - T/kelvin == (9/5)*T + T/K == (9/5)*T Converts temperature `T` from Kelvin to degrees Rankine (°R). -""" kelvin +""" K @doc """ - T/rankine == (5/9)*T + T/°R == (5/9)*T Converts temperature `T` from degrees Rankine to Kelvin (K). -""" rankine +""" °R """ moles(N::Real,U::UnitSystem=Metric) = N/avogadro(U) Converts the number of molecules `N` to number of moles (mol). """ -@pure moles(N::Real,U::UnitSystem=Metric) = N/avogadro(U) +@pure moles(N::Number,U::UnitSystem=Metric) = N/avogadro(U) """ molecules(n::Real,U::UnitSystem=Metric) = n*avogadro(U) Converts the number of moles `n` to number of molecules (dimensionless). """ -@pure molecules(n::Real,U::UnitSystem=Metric) = n*avogadro(U) +@pure molecules(n::Number,U::UnitSystem=Metric) = n*avogadro(U) # thermodynamics -""" -$(convertext(:temperature,"mass(U,S)*speed(U,S)^2/boltzmann(U,S)")) - -Measurement scale for thermodynamic energy or `temperature` (K), unit conversion factor. - -```Julia -julia> temperature(Metric,SI2019) # K⋅K⁻¹ -$(temperature(Metric,SI2019)) - -julia> temperature(English,SI2019) # K⋅°R⁻¹ -$(temperature(English,SI2019)) - -julia> temperature(English,Metric) # K⋅°R⁻¹ -$(temperature(English,Metric)) - -julia> temperature(PlanckGauss,Metric) # K⋅TP⁻¹ -$(temperature(PlanckGauss,Metric)) -``` -""" -@pure temperature(U::UnitSystem,S::UnitSystem) = unit((boltzmann(U)*electronmass(S)*lightspeed(S)^2)/(boltzmann(S)*electronmass(U)*lightspeed(U)^2)) - -""" -$(convertext(:entropy,"energy(U,S)/temperature(U,S)")) - -Heat capacity or `energy` per `temperature` or `entropy` (J⋅K⁻¹), unit conversion factor. - -```Julia -julia> entropy(Metric,SI2019) # K⋅K⁻¹ -$(entropy(Metric,SI2019)) - -julia> entropy(CGS,Metric) # J⋅erg⁻¹ -$(entropy(CGS,Metric)) - -julia> entropy(English,SI2019) # J⋅°R⋅K⁻¹⋅ft⁻¹⋅lb⁻¹ -$(entropy(English,SI2019)) - -julia> entropy(EnglishUS,English) # ftUS²⋅°R⋅°ft⁻²⋅°R⁻¹ -$(entropy(EnglishUS,English)) -``` -""" +@pure temperature(U::UnitSystem,S::UnitSystem) = unit((boltzmann(U)*electronmass(S)*lightspeed(S)^2*gravity(U))/(boltzmann(S)*electronmass(U)*lightspeed(U)^2*gravity(S))) @pure entropy(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)/temperature(U,S)) - -""" -$(convertext(:specificentropy,"specificenergy(U,S)/temperature(U,S)")) - -Specific heat capacity or `specificentropy` (J⋅K⁻¹⋅kg⁻¹), unit conversion factor. - -```Julia -julia> specificentropy(Metric,SI2019) # m²⋅K⋅K⁻¹⋅cm⁻² -$(specificentropy(Metric,SI2019)) - -julia> specificentropy(CGS,Metric) # m²⋅cm⁻² -$(specificentropy(CGS,Metric)) - -julia> specificentropy(English,Metric) # m²⋅°R⋅K⁻¹⋅ft⁻² -$(specificentropy(English,Metric)) - -julia> specificentropy(EnglishUS,English) # ft²⋅°R⋅ftUS⁻²⋅°R⁻¹ -$(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)")) - -Heat conductivity or `thermalconductivity` (W⋅m⁻¹⋅K⁻¹), unit conversion factor. - -```Julia -julia> thermalconductivity(Metric,SI2019) # K⋅K⁻¹ -$(thermalconductivity(Metric,SI2019)) - -julia> thermalconductivity(CGS,Metric) # N⋅dyn⁻¹ -$(thermalconductivity(CGS,Metric)) - -julia> thermalconductivity(English,Metric) # N⋅°R⋅K⁻¹⋅ft⁻¹⋅lb⁻¹ -$(thermalconductivity(English,Metric)) -``` -""" @pure thermalconductivity(U::UnitSystem,S::UnitSystem) = unit(force(U,S)/time(U,S)/temperature(U,S)) - -""" -$(convertext(:thermalconductance,"thermalconductivity(U,S)*length(U,S)")) - -Reciprocal of `thermalresistance` (W⋅K⁻¹), unit conversion factor. - -```Julia -julia> thermalconductance(Metric,SI2019) # K⋅K⁻¹ -$(thermalconductance(Metric,SI2019)) - -julia> thermalconductance(CGS,Metric) # W⋅s⋅erg⁻¹ -$(thermalconductance(CGS,Metric)) - -julia> thermalconductance(English,Metric) # J⋅°R⋅K⁻¹⋅ft⁻¹⋅lb⁻¹ -$(thermalconductance(English,Metric)) -``` -""" @pure thermalconductance(U::UnitSystem,S::UnitSystem) = unit(thermalconductivity(U,S)*length(U,S)) - -""" -$(convertext(:thermalresistance,"1/thermalconductivity(U,S)/length(U,S)")) - -Resistance to heat flow or `thermalresistance` (K⋅W⁻¹), unit conversion factor. - -```Julia -julia> thermalresistance(Metric,SI2019) # K⋅K⁻¹ -$(thermalresistance(Metric,SI2019)) - -julia> thermalresistance(CGS,Metric) # erg⋅s⁻¹⋅W⁻¹ -$(thermalresistance(CGS,Metric)) - -julia> thermalresistance(English,Metric) # ft⋅lb⋅K⋅°R⁻¹⋅J⁻¹ -$(thermalresistance(English,Metric)) -``` -""" @pure thermalresistance(U::UnitSystem,S::UnitSystem) = thermalconductance(S,U) - -""" -$(convertext(:thermalexpansion,"1/temperature(U,S)")) - -Measurement scale for coefficient of `thermalexpansion` (K⁻¹), unit conversion factor. - -```Julia -julia> thermalexpansion(Metric,SI2019) # K⋅K⁻¹ -$(thermalexpansion(Metric,SI2019)) - -julia> thermalexpansion(English,SI2019) # °R⋅K⁻¹ -$(thermalexpansion(English,SI2019)) - -julia> thermalexpansion(English,Metric) # °R⋅K⁻¹ -$(thermalexpansion(English,Metric)) -``` -""" @pure thermalexpansion(U::UnitSystem,S::UnitSystem) = temperature(S,U) - -""" -$(convertext(:lapserate,"temperature(U,S)/length(U,S)")) - -Temperature gradient over `length` or `lapserate` (K⋅m⁻¹), unit conversion factor. - -```Julia -julia> lapserate(Metric,SI2019) # K⋅K⁻¹ -$(lapserate(Metric,SI2019)) - -julia> lapserate(English,SI2019) # K⋅ft⋅°R⁻¹⋅m⁻¹ -$(lapserate(English,SI2019)) - -julia> lapserate(English,Metric) # K⋅ft⋅°R⁻¹⋅m⁻¹ -$(lapserate(English,Metric)) - -julia> lapserate(EnglishUS,English) # °R⋅ftUS⋅°R⁻¹⋅ft⁻¹ -$(lapserate(EnglishUS,English)) -``` -""" @pure lapserate(U::UnitSystem,S::UnitSystem) = unit(temperature(U,S)/length(U,S)) # molar -@doc """ -$(convertext(:molarmass,"molarmass(S)/molarmass(U)")) - -Molar mass or `mass` per `mole` (kg⋅mol⁻¹), unit conversion factor. - -```Julia -julia> molarmass(CGS,Metric) # mol⋅mol⁻¹ -$(molarmass(CGS,Metric)) - -julia> molarmass(Metric,SI2019) # mol⋅mol⁻¹ -$(molarmass(Metric,SI2019)) -``` -""" molarmass(::UnitSystem,::UnitSystem) - -""" -$(convertext(:molality,"molarmass(U)/molarmass(S)")) - -Molality or `mole` per `mass` (mol⋅kg⁻¹), unit conversion factor. - -```Julia -julia> molality(CGS,Metric) # mol⋅mol⁻¹ -$(molality(CGS,Metric)) - -julia> molality(Metric,SI2019) # mol⋅mol⁻¹ -$(molality(Metric,SI2019)) -``` -""" @pure molality(U::UnitSystem,S::UnitSystem) = molarmass(S,U) - -""" -$(convertext(:mole,"mass(U,S)*molality(U,S)")) - -Amount of molecular substance or `mole` (mol), unit conversion factor. - -```Julia -julia> mole(SI2019,Metric) # mol⋅mol⁻¹ -$(mole(SI2019,Metric)) - -julia> mole(English,SI2019) # mol⋅slug-mol⁻¹ -$(mole(English,SI2019)) - -julia> mole(English,SI2019)/lbm # mol⋅lb-mol⁻¹ -$(mole(English,SI2019)/lbm) -``` -""" @pure mole(U::UnitSystem,S::UnitSystem) = unit(mass(U,S)*molality(U,S)) - -""" -$(convertext(:molarity,"mole(U,S)/volume(U,S)")) - -Molar concentration or `mole` per `volume` or `molarity` (mol⋅m⁻³), unit conversion factor. - -```Julia -julia> molarity(CGS,Metric) # cm³⋅m⁻³ -$(molarity(CGS,Metric)) - -julia> molarity(English,SI2019) # ft³⋅m⁻³ -$(molarity(English,SI2019)) -``` -""" @pure molarity(U::UnitSystem,S::UnitSystem) = unit(mole(U,S)/volume(U,S)) - -""" -$(convertext(:molarvolume,"volume(U,S)/mole(U,S)")) - -Occupied `volume` per `mole` or `molarvolume` (m³⋅mol⁻¹), unit conversion factor. - -```Julia -julia> molarvolume(CGS,Metric) # m³⋅cm⁻³ -$(molarvolume(CGS,Metric)) - -julia> molarvolume(English,SI2019) # m³⋅ft⁻³ -$(molarvolume(English,SI2019)) -``` -""" @pure molarvolume(U::UnitSystem,S::UnitSystem) = unit(volume(U,S)/mole(U,S)) - -""" -$(convertext(:molarentropy,"entropy(U,S)/mole(U,S)")) - -Molar heat capacity or `entropy` per `mole` (J⋅K⁻¹⋅mol⁻¹), unit conversion factor. - -```Julia -julia> molarentropy(CGS,Metric) # J⋅erg⁻¹ -$(molarentropy(CGS,Metric)) - -julia> molarentropy(English,SI2019) # J⋅°R⋅slug-mol⋅ft⁻¹⋅lb⁻¹⋅K⁻¹⋅mol⁻¹ -$(molarentropy(English,SI2019)) -``` -""" @pure molarentropy(U::UnitSystem,S::UnitSystem) = unit(entropy(U,S)/mole(U,S)) - -""" -$(convertext(:molarenergy,"energy(U,S)/mole(U,S)")) - -Gibbs free `energy` per `mole` or `molarenergy` (J⋅mol⁻¹), unit conversion factor. - -```Julia -julia> molarenergy(CGS,Metric) # J⋅erg⁻¹ -$(molarenergy(CGS,Metric)) - -julia> molarenergy(English,SI2019) # J⋅slug-mol⋅ft⁻¹⋅lb⁻¹⋅mol⁻¹ -$(molarenergy(English,SI2019)) -``` -""" @pure molarenergy(U::UnitSystem,S::UnitSystem) = unit(energy(U,S)/mole(U,S)) - -""" -$(convertext(:molarconductivity,"conductivity(U,S)*area(U,S)/mole(U,S)")) - -Conductivity per `molarvolume` or `molarconductivity` (S⋅m²⋅mol⁻¹), unit conversion factor. - -```Julia -julia> molarconductivity(EMU,Metric) # S⋅m²⋅abΩ⋅cm⁻² -$(molarconductivity(EMU,Metric)) - -julia> molarconductivity(ESU,Metric) # S⋅m²⋅statΩ⋅cm⁻² -$(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⋅s⁻¹), unit conversion factor. - -```Julia -julia> catalysis(English,Metric) # kat⋅s⋅slug-mol⁻¹ -$(catalysis(English,Metric)) -``` -""" @pure catalysis(U::UnitSystem,S::UnitSystem) = unit(mole(U,S)/time(U,S)) - -""" -$(convertext(:specificity,"volume(U,S)/mole(U,S)/time(U,S)")) - -Catalytic efficiency or `volume` per `mole` per `time` (m³⋅mol⁻¹⋅s⁻¹), unit conversion factor. - -```Julia -julia> specificity(CGS,Metric) # m³⋅cm⁻³ -$(specificity(CGS,Metric)) - -julia> specificity(English,Metric) # m³⋅slug-mol⋅mol⁻¹⋅ft⁻³ -$(specificity(English,Metric)) -``` -""" @pure specificity(U::UnitSystem,S::UnitSystem) = unit(volume(U,S)/mole(U,S)/time(U,S)) # photometrics -""" -$(convertext(:luminousflux,"luminousefficacy(U,S)*planck(U,S)/time(U,S)^2")) - -Perceived power of light or `luminousflux` (lm, cd⋅sr), unit conversion factor. -""" @pure luminousflux(U::UnitSystem,S::UnitSystem) = unit(frequency(U,S)^2*(luminousefficacy(S)*planckreduced(S))/(luminousefficacy(U)*planckreduced(U))) - -""" -$(convertext(:luminance,"luminousflux(U,S)/area(U,S)")) - -Luminous intensity per `area` or `luminance` (lx, lm⋅m⁻², cd⋅m⁻²⋅sr), unit conversion factor. - -```Julia -julia> luminance(CGS,Metric) # lx⋅ph⁻¹ -$(luminance(CGS,Metric)) - -julia> luminance(IAU,Metric) # lx⋅au²⋅lm⁻¹ -$(luminance(IAU,Metric)) - -julia> luminance(English,Metric) # ft²⋅m⁻² -$(luminance(English,Metric)) - -julia> 1/10.76 # lx⋅fc⁻¹ -$(1/10.76) -``` -""" @pure luminance(U::UnitSystem,S::UnitSystem) = unit(luminousflux(U,S)/area(U,S)) - -""" -$(convertext(:luminousenergy,"luminousflux(U,S)*time(U,S)")) - -Perceived quantity of light or `luminousenergy` (lm⋅s, cd⋅s⋅sr), unit conversion factor. - -```Julia -julia> luminousenergy(IAU,Metric) # s⋅day⁻¹ -$(luminousenergy(IAU,Metric)) -``` -""" @pure luminousenergy(U::UnitSystem,S::UnitSystem) = unit(frequency(U,S)*(luminousefficacy(S)*planckreduced(S))/(luminousefficacy(U)*planckreduced(U))) - -""" -$(convertext(:luminousexposure,"luminance(U,S)*time(U,S)")) - -Integrated `luminance` along `time` (lx⋅s, lm⋅s⋅m⁻², cd⋅s⋅m⁻²⋅sr), unit conversion factor. - -```Julia -julia> luminousexposure(CGS,Metric) # lx⋅ph⁻¹ -$(luminousexposure(CGS,Metric)) - -julia> luminousexposure(IAU,Metric) # s⋅au²⋅day⁻¹⋅m⁻² -$(luminousexposure(IAU,Metric)) - -julia> luminousexposure(English,Metric) # ft²⋅m⁻² -$(luminousexposure(English,Metric)) -``` -""" @pure luminousexposure(U::UnitSystem,S::UnitSystem) = unit(luminance(U,S)*time(U,S)) -@doc """ -$(convertext(:luminousefficacy,"luminousefficacy(S)/luminousefficacy(U)")) - -Ratio of `luminousflux` to `power` or `luminousefficacy` (lm⋅W⁻¹), unit conversion factor. - -```Julia -julia> luminousefficacy(CGS,Metric) # erg⋅s⁻¹⋅W⁻¹ -$(luminousefficacy(CGS,Metric)) - -julia> luminousefficacy(English,Metric) # ft⋅lb⋅s⁻¹⋅W⁻¹ -$(luminousefficacy(English,Metric)) -``` -""" luminousefficacy(::UnitSystem,::UnitSystem) +include("thermodynamicdocs.jl") diff --git a/src/thermodynamicdocs.jl b/src/thermodynamicdocs.jl new file mode 100644 index 0000000..8a8419b --- /dev/null +++ b/src/thermodynamicdocs.jl @@ -0,0 +1,411 @@ + +# This file is part of UnitSystems.jl +# It is licensed under the MIT license +# UnitSystems Copyright (C) 2020 Michael Reed +# _ _ _ +# | | | | | | +# ___| |__ __ _| | ___ __ __ ___ ____ _| | __ _ +# / __| '_ \ / _` | |/ / '__/ _` \ \ / / _` | |/ _` | +# | (__| | | | (_| | <| | | (_| |\ V / (_| | | (_| | +# \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| +# +# https://github.com/chakravala +# https://crucialflow.com + +# thermodynamics + +@doc """ +$(convertext(:temperature,"mass(U,S)*speed(U,S)^2/boltzmann(U,S)")) + +Measurement scale for thermodynamic energy or `temperature` (K), unit conversion factor. + +```Julia +julia> temperature(Metric,SI2019) # K⋅K⁻¹ +$(temperature(Metric,SI2019)) + +julia> temperature(English,SI2019) # K⋅°R⁻¹ +$(temperature(English,SI2019)) + +julia> temperature(English,Metric) # K⋅°R⁻¹ +$(temperature(English,Metric)) + +julia> temperature(PlanckGauss,Metric) # K⋅TP⁻¹ +$(temperature(PlanckGauss,Metric)) +``` +""" temperature, Θ + +@doc """ +$(convertext(:entropy,"energy(U,S)/temperature(U,S)")) + +Heat capacity or `energy` per `temperature` or `entropy` (J⋅K⁻¹), unit conversion factor. + +```Julia +julia> entropy(Metric,SI2019) # K⋅K⁻¹ +$(entropy(Metric,SI2019)) + +julia> entropy(CGS,Metric) # J⋅erg⁻¹ +$(entropy(CGS,Metric)) + +julia> entropy(English,SI2019) # J⋅°R⋅K⁻¹⋅ft⁻¹⋅lb⁻¹ +$(entropy(English,SI2019)) + +julia> entropy(Survey,English) # ftUS²⋅°R⋅°ft⁻²⋅°R⁻¹ +$(entropy(Survey,English)) +``` +""" entropy + +@doc """ +$(convertext(:specificentropy,"specificenergy(U,S)/temperature(U,S)")) + +Specific heat capacity or `specificentropy` (J⋅K⁻¹⋅kg⁻¹), unit conversion factor. + +```Julia +julia> specificentropy(Metric,SI2019) # m²⋅K⋅K⁻¹⋅cm⁻² +$(specificentropy(Metric,SI2019)) + +julia> specificentropy(CGS,Metric) # m²⋅cm⁻² +$(specificentropy(CGS,Metric)) + +julia> specificentropy(English,Metric) # m²⋅°R⋅K⁻¹⋅ft⁻² +$(specificentropy(English,Metric)) + +julia> specificentropy(Survey,English) # ft²⋅°R⋅ftUS⁻²⋅°R⁻¹ +$(specificentropy(Survey,English)) +``` +""" specificentropy + +@doc """ +$(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(Survey,English) # ftUS⁵°R⋅°ft⁻⁵⋅°R⁻¹ +$(volumeheatcapacity(Survey,English)) +``` +""" volumeheatcapacity + +@doc """ +$(convertext(:thermalconductivity,"force(U,S)/time(U,S)/temperature(U,S)")) + +Heat conductivity or `thermalconductivity` (W⋅m⁻¹⋅K⁻¹), unit conversion factor. + +```Julia +julia> thermalconductivity(Metric,SI2019) # K⋅K⁻¹ +$(thermalconductivity(Metric,SI2019)) + +julia> thermalconductivity(CGS,Metric) # N⋅dyn⁻¹ +$(thermalconductivity(CGS,Metric)) + +julia> thermalconductivity(English,Metric) # N⋅°R⋅K⁻¹⋅ft⁻¹⋅lb⁻¹ +$(thermalconductivity(English,Metric)) +``` +""" thermalconductivity + +@doc """ +$(convertext(:thermalconductance,"thermalconductivity(U,S)*length(U,S)")) + +Reciprocal of `thermalresistance` (W⋅K⁻¹), unit conversion factor. + +```Julia +julia> thermalconductance(Metric,SI2019) # K⋅K⁻¹ +$(thermalconductance(Metric,SI2019)) + +julia> thermalconductance(CGS,Metric) # W⋅s⋅erg⁻¹ +$(thermalconductance(CGS,Metric)) + +julia> thermalconductance(English,Metric) # J⋅°R⋅K⁻¹⋅ft⁻¹⋅lb⁻¹ +$(thermalconductance(English,Metric)) +``` +""" thermalconductance + +@doc """ +$(convertext(:thermalresistance,"1/thermalconductivity(U,S)/length(U,S)")) + +Resistance to heat flow or `thermalresistance` (K⋅W⁻¹), unit conversion factor. + +```Julia +julia> thermalresistance(Metric,SI2019) # K⋅K⁻¹ +$(thermalresistance(Metric,SI2019)) + +julia> thermalresistance(CGS,Metric) # erg⋅s⁻¹⋅W⁻¹ +$(thermalresistance(CGS,Metric)) + +julia> thermalresistance(English,Metric) # ft⋅lb⋅K⋅°R⁻¹⋅J⁻¹ +$(thermalresistance(English,Metric)) +``` +""" thermalresistance + +@doc """ +$(convertext(:thermalexpansion,"1/temperature(U,S)")) + +Measurement scale for coefficient of `thermalexpansion` (K⁻¹), unit conversion factor. + +```Julia +julia> thermalexpansion(Metric,SI2019) # K⋅K⁻¹ +$(thermalexpansion(Metric,SI2019)) + +julia> thermalexpansion(English,SI2019) # °R⋅K⁻¹ +$(thermalexpansion(English,SI2019)) + +julia> thermalexpansion(English,Metric) # °R⋅K⁻¹ +$(thermalexpansion(English,Metric)) +``` +""" thermalexpansion + +@doc """ +$(convertext(:lapserate,"temperature(U,S)/length(U,S)")) + +Temperature gradient over `length` or `lapserate` (K⋅m⁻¹), unit conversion factor. + +```Julia +julia> lapserate(Metric,SI2019) # K⋅K⁻¹ +$(lapserate(Metric,SI2019)) + +julia> lapserate(English,SI2019) # K⋅ft⋅°R⁻¹⋅m⁻¹ +$(lapserate(English,SI2019)) + +julia> lapserate(English,Metric) # K⋅ft⋅°R⁻¹⋅m⁻¹ +$(lapserate(English,Metric)) + +julia> lapserate(EnglishUS,English) # °R⋅ftUS⋅°R⁻¹⋅ft⁻¹ +$(lapserate(EnglishUS,English)) +``` +""" lapserate + +# molar + +@doc """ +$(convertext(:molarmass,"molarmass(S)/molarmass(U)")) + +Molar mass or `mass` per `mole` (kg⋅mol⁻¹), unit conversion factor. + +```Julia +julia> molarmass(CGS,Metric) # mol⋅mol⁻¹ +$(molarmass(CGS,Metric)) + +julia> molarmass(Metric,SI2019) # mol⋅mol⁻¹ +$(molarmass(Metric,SI2019)) +``` +""" molarmass(::UnitSystem,::UnitSystem) + +@doc """ +$(convertext(:molality,"molarmass(U)/molarmass(S)")) + +Molality or `mole` per `mass` (mol⋅kg⁻¹), unit conversion factor. + +```Julia +julia> molality(CGS,Metric) # mol⋅mol⁻¹ +$(molality(CGS,Metric)) + +julia> molality(Metric,SI2019) # mol⋅mol⁻¹ +$(molality(Metric,SI2019)) +``` +""" molality + +@doc """ +$(convertext(:mole,"mass(U,S)*molality(U,S)")) + +Amount of molecular substance or `mole` (mol), unit conversion factor. + +```Julia +julia> mole(SI2019,Metric) # mol⋅mol⁻¹ +$(mole(SI2019,Metric)) + +julia> mole(British,SI2019) # mol⋅slug-mol⁻¹ +$(mole(English,SI2019)) + +julia> mole(English,SI2019) # mol⋅lb-mol⁻¹ +$(mole(English,SI2019)) +``` +""" mole, N +#julia> mole(English,SI2019)*ft/g₀ # mol⋅lb-mol⁻¹ +#$(mole(English,SI2019)*ft/g₀) + +@doc """ +$(convertext(:molarity,"mole(U,S)/volume(U,S)")) + +Molar concentration or `mole` per `volume` or `molarity` (mol⋅m⁻³), unit conversion factor. + +```Julia +julia> molarity(CGS,Metric) # cm³⋅m⁻³ +$(molarity(CGS,Metric)) + +julia> molarity(English,SI2019) # ft³⋅m⁻³ +$(molarity(English,SI2019)) +``` +""" molarity + +@doc """ +$(convertext(:molarvolume,"volume(U,S)/mole(U,S)")) + +Occupied `volume` per `mole` or `molarvolume` (m³⋅mol⁻¹), unit conversion factor. + +```Julia +julia> molarvolume(CGS,Metric) # m³⋅cm⁻³ +$(molarvolume(CGS,Metric)) + +julia> molarvolume(English,SI2019) # m³⋅ft⁻³ +$(molarvolume(English,SI2019)) +``` +""" molarvolume + +@doc """ +$(convertext(:molarentropy,"entropy(U,S)/mole(U,S)")) + +Molar heat capacity or `entropy` per `mole` (J⋅K⁻¹⋅mol⁻¹), unit conversion factor. + +```Julia +julia> molarentropy(CGS,Metric) # J⋅erg⁻¹ +$(molarentropy(CGS,Metric)) + +julia> molarentropy(English,SI2019) # J⋅°R⋅lb-mol⋅ft⁻¹⋅lb⁻¹⋅K⁻¹⋅mol⁻¹ +$(molarentropy(English,SI2019)) +``` +""" molarentropy + +@doc """ +$(convertext(:molarenergy,"energy(U,S)/mole(U,S)")) + +Gibbs free `energy` per `mole` or `molarenergy` (J⋅mol⁻¹), unit conversion factor. + +```Julia +julia> molarenergy(CGS,Metric) # J⋅erg⁻¹ +$(molarenergy(CGS,Metric)) + +julia> molarenergy(English,SI2019) # J⋅slug-mol⋅ft⁻¹⋅lb⁻¹⋅mol⁻¹ +$(molarenergy(English,SI2019)) +``` +""" molarenergy + +@doc """ +$(convertext(:molarconductivity,"conductivity(U,S)*area(U,S)/mole(U,S)")) + +Conductivity per `molarvolume` or `molarconductivity` (S⋅m²⋅mol⁻¹), unit conversion factor. + +```Julia +julia> molarconductivity(EMU,Metric) # S⋅m²⋅abΩ⋅cm⁻² +$(molarconductivity(EMU,Metric)) + +julia> molarconductivity(ESU,Metric) # S⋅m²⋅statΩ⋅cm⁻² +$(molarconductivity(ESU,Metric)) +``` +""" molarconductivity + +@doc """ +$(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)) +``` +""" molarsusceptibility + +@doc """ +$(convertext(:catalysis,"mole(U,S)/time(U,S)")) + +Catalytic activity or `mole` per `time` or `catalysis` (kat, mol⋅s⁻¹), unit conversion factor. + +```Julia +julia> catalysis(English,Metric) # kat⋅s⋅lb-mol⁻¹ +$(catalysis(English,Metric)) +``` +""" catalysis + +@doc """ +$(convertext(:specificity,"volume(U,S)/mole(U,S)/time(U,S)")) + +Catalytic efficiency or `volume` per `mole` per `time` (m³⋅mol⁻¹⋅s⁻¹), unit conversion factor. + +```Julia +julia> specificity(CGS,Metric) # m³⋅cm⁻³ +$(specificity(CGS,Metric)) + +julia> specificity(English,Metric) # m³⋅lb-mol⋅mol⁻¹⋅ft⁻³ +$(specificity(English,Metric)) +``` +""" specificity + +# photometrics + +@doc """ +$(convertext(:luminousflux,"luminousefficacy(U,S)*planck(U,S)/time(U,S)^2")) + +Perceived power of light or `luminousflux` (lm, cd⋅sr), unit conversion factor. +""" luminousflux, J + +@doc """ +$(convertext(:luminance,"luminousflux(U,S)/area(U,S)")) + +Luminous intensity per `area` or `luminance` (lx, lm⋅m⁻², cd⋅m⁻²⋅sr), unit conversion factor. + +```Julia +julia> luminance(CGS,Metric) # lx⋅ph⁻¹ +$(luminance(CGS,Metric)) + +julia> luminance(IAU,Metric) # lx⋅au²⋅lm⁻¹ +$(luminance(IAU,Metric)) + +julia> luminance(English,Metric) # ft²⋅m⁻² +$(luminance(English,Metric)) + +julia> 1/10.76 # lx⋅fc⁻¹ +$(1/10.76) +``` +""" luminance + +@doc """ +$(convertext(:luminousenergy,"luminousflux(U,S)*time(U,S)")) + +Perceived quantity of light or `luminousenergy` (lm⋅s, cd⋅s⋅sr), unit conversion factor. + +```Julia +julia> luminousenergy(IAU,Metric) # s⋅day⁻¹ +$(luminousenergy(IAU,Metric)) +``` +""" luminousenergy + +@doc """ +$(convertext(:luminousexposure,"luminance(U,S)*time(U,S)")) + +Integrated `luminance` along `time` (lx⋅s, lm⋅s⋅m⁻², cd⋅s⋅m⁻²⋅sr), unit conversion factor. + +```Julia +julia> luminousexposure(CGS,Metric) # lx⋅ph⁻¹ +$(luminousexposure(CGS,Metric)) + +julia> luminousexposure(IAU,Metric) # s⋅au²⋅day⁻¹⋅m⁻² +$(luminousexposure(IAU,Metric)) + +julia> luminousexposure(English,Metric) # ft²⋅m⁻² +$(luminousexposure(English,Metric)) +``` +""" luminousexposure + +@doc """ +$(convertext(:luminousefficacy,"luminousefficacy(S)/luminousefficacy(U)")) + +Ratio of `luminousflux` to `power` or `luminousefficacy` (lm⋅W⁻¹), unit conversion factor. + +```Julia +julia> luminousefficacy(CGS,Metric) # erg⋅s⁻¹⋅W⁻¹ +$(luminousefficacy(CGS,Metric)) + +julia> luminousefficacy(English,Metric) # ft⋅lb⋅s⁻¹⋅W⁻¹ +$(luminousefficacy(English,Metric)) +``` +""" luminousefficacy(::UnitSystem,::UnitSystem) diff --git a/test/runtests.jl b/test/runtests.jl index 3c32cab..498b263 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -2,32 +2,32 @@ using UnitSystems, Test for S ∈ UnitSystems.Systems U = eval(S) - S ≠ :IAU && @testset "UnitSystem: $S" begin + S ∉ () && @testset "UnitSystem: $S" begin @testset "Dimensionless constants" begin - @test μₑᵤ == electronmass(U)/atomicmass(U) - @test μₚᵤ == protonmass(U)/atomicmass(U) + @test μₑᵤ ≈ electronmass(U)/atomicmass(U) + @test μₚᵤ ≈ protonmass(U)/atomicmass(U) @test μₚₑ ≈ protonmass(U)/electronmass(U) - @test 1/αinv ≈ (charge(U)/charge(PlanckGauss,U))^2 + @test 1/αinv ≈ (elementarycharge(U)/charge(PlanckGauss,U))^2 @test αG ≈ (electronmass(U)/mass(PlanckGauss,U))^2 - @test 1/αinv ≈ charge(U)^2*rationalization(U)/4π/permittivity(U)/planckreduced(U)/lightspeed(U) - @test 1/αinv ≈ permeability(U)*lightspeed(U)*(charge(U)*lorentz(U))^2*rationalization(U)/4π/planckreduced(U) - @test 1/αinv ≈ coulomb(U)*charge(U)^2/planckreduced(U)/lightspeed(U) - @test 1/αinv ≈ charge(U)^2*rationalization(U)/2permittivity(U)/lightspeed(U)/planck(U) - @test 1/αinv ≈ lightspeed(U)*permeability(U)*rationalization(U)*lorentz(U)^2/2klitzing(U) - @test 1/αinv ≈ charge(U)^2*impedance(U)/2planck(U) + @test 1/αinv ≈ elementarycharge(U)^2*rationalization(U)/4π/vacuumpermittivity(U)/planckreduced(U)/lightspeed(U) + @test 1/αinv ≈ vacuumpermeability(U)*lightspeed(U)*(elementarycharge(U)*lorentz(U))^2*rationalization(U)/4π/planckreduced(U) + @test 1/αinv ≈ coulomb(U)*elementarycharge(U)^2/planckreduced(U)/lightspeed(U) + @test 1/αinv ≈ elementarycharge(U)^2*rationalization(U)/2vacuumpermittivity(U)/lightspeed(U)/planck(U) + @test 1/αinv ≈ lightspeed(U)*vacuumpermeability(U)*rationalization(U)*lorentz(U)^2/2klitzing(U) + @test 1/αinv ≈ elementarycharge(U)^2*vacuumimpedance(U)/2planck(U) end @testset "Fundamental constants" begin @testset "lightspeed" begin - @test lightspeed(U) ≈ 1/lorentz(U)/sqrt(permeability(U)*permittivity(U)) + @test lightspeed(U) ≈ 1/lorentz(U)/sqrt(vacuumpermeability(U)*vacuumpermittivity(U)) @test lightspeed(U) ≈ αinv*sqrt(hartree(U)/electronmass(U)) @test lightspeed(U) ≈ planckreduced(U)/αinv/electronmass(U)/electronradius(U) - @test lightspeed(U) ≈ charge(U)^2*coulomb(U)/planckreduced(U)*αinv + @test lightspeed(U) ≈ elementarycharge(U)^2*coulomb(U)/planckreduced(U)*αinv @test lightspeed(U) ≈ electronmass(U)^2*newton(U)/planckreduced(U)/αG end @testset "planck" begin @test planck(U) == 2π*planckreduced(U) - @test planck(U) == 2charge(U)*lorentz(U)/josephson(U) - @test planck(U) ≈ 8/αinv/rationalization(U)/lightspeed(U)/permeability(U)/josephson(U)^2 + @test planck(U) ≈ 2elementarycharge(U)*lorentz(U)/josephson(U) + @test planck(U) ≈ 8/αinv/rationalization(U)/lightspeed(U)/vacuumpermeability(U)/josephson(U)^2 @test planck(U) ≈ 4lorentz(U)^2/josephson(U)^2/klitzing(U) end @testset "planckmass" begin @@ -36,7 +36,7 @@ for S ∈ UnitSystems.Systems @test planckmass(U) ≈ 2rydberg(U)*planck(U)/lightspeed(U)*αinv^2/sqrt(αG) end @testset "newton" begin - @test newton(U) == planckreduced(U)*lightspeed(U)/planckmass(U)^2 + @test newton(U) ≈ planckreduced(U)*lightspeed(U)/planckmass(U)^2 @test newton(U) ≈ planckreduced(U)*lightspeed(U)*αG/electronmass(U)^2 @test newton(U) ≈ lightspeed(U)^3/αinv^4*αG/8π/rydberg(U)^2/planck(U) @test newton(U) ≈ einstein(U)*lightspeed(U)^4/8π @@ -51,21 +51,21 @@ for S ∈ UnitSystems.Systems @testset "Atomic constants" begin @testset "atomicmass" begin @test atomicmass(U) ≈ molarmass(U)/avogadro(U) - @test atomicmass(U) == electronmass(U)/μₑᵤ - @test atomicmass(U) == protonmass(U)/μₚᵤ + @test atomicmass(U) ≈ electronmass(U)/μₑᵤ + @test atomicmass(U) ≈ protonmass(U)/μₚᵤ @test atomicmass(U) ≈ 2rydberg(U)*planck(U)/μₑᵤ/lightspeed(U)*αinv^2 @test atomicmass(U) ≈ planckmass(U)*sqrt(αG)/μₑᵤ end @testset "protonmass" begin - @test protonmass(U) == μₚᵤ*atomicmass(U) + @test protonmass(U) ≈ μₚᵤ*atomicmass(U) @test protonmass(U) ≈ μₚᵤ*molarmass(U)/avogadro(U) - @test protonmass(U) == μₚₑ*electronmass(U) + @test protonmass(U) ≈ μₚₑ*electronmass(U) @test protonmass(U) ≈ μₚₑ*2rydberg(U)*planck(U)/lightspeed(U)*αinv^2 @test protonmass(U) ≈ planckmass(U)*μₚₑ*sqrt(αG) end @testset "electronmass" begin - @test electronmass(U) == μₑᵤ*atomicmass(U) - @test electronmass(U) == μₑᵤ*molarmass(U)/avogadro(U) + @test electronmass(U) ≈ μₑᵤ*atomicmass(U) + @test electronmass(U) ≈ μₑᵤ*molarmass(U)/avogadro(U) @test electronmass(U) ≈ protonmass(U)/μₚₑ @test electronmass(U) ≈ 2rydberg(U)*planck(U)/lightspeed(U)*αinv^2 @test electronmass(U) ≈ planckmass(U)*sqrt(αG) @@ -78,7 +78,7 @@ for S ∈ UnitSystems.Systems @test hartree(U) ≈ planckmass(U)*sqrt(αG)*(lightspeed(U)/αinv)^2 end @testset "rydberg" begin - @test rydberg(U) == hartree(U)/2planck(U)/lightspeed(U) + @test rydberg(U) ≈ hartree(U)/2planck(U)/lightspeed(U) @test rydberg(U) ≈ electronmass(U)*lightspeed(U)/αinv^2/2planck(U) @test rydberg(U) ≈ 1/αinv/4π/bohr(U) @test rydberg(U) ≈ electronmass(U)*electronradius(U)*lightspeed(U)/2planck(U)/bohr(U) @@ -87,7 +87,7 @@ for S ∈ UnitSystems.Systems end @testset "bohr" begin @test bohr(U) ≈ planckreduced(U)/electronmass(U)/lightspeed(U)*αinv - @test bohr(U) ≈ planckreduced(U)^2/coulomb(U)/electronmass(U)/charge(U)^2 + @test bohr(U) ≈ planckreduced(U)^2/coulomb(U)/electronmass(U)/elementarycharge(U)^2 @test bohr(U) ≈ μₚₑ*bohrreduced(U)/(μₚₑ+1) @test bohr(U) ≈ electronradius(U)*αinv^2 @test bohr(U) ≈ 1/αinv/4π/rydberg(U) @@ -96,7 +96,7 @@ for S ∈ UnitSystems.Systems @testset "electronradius" begin @test electronradius(U) ≈ planckreduced(U)/αinv/electronmass(U)/lightspeed(U) @test electronradius(U) ≈ bohr(U)/αinv^2 - @test electronradius(U) ≈ charge(U)^2*coulomb(U)/electronmass(U)/lightspeed(U)^2 + @test electronradius(U) ≈ elementarycharge(U)^2*coulomb(U)/electronmass(U)/lightspeed(U)^2 @test electronradius(U) ≈ 2planck(U)*rydberg(U)*bohr(U)/electronmass(U)/lightspeed(U) @test electronradius(U) ≈ 1/αinv^3/4π/rydberg(U) end @@ -109,135 +109,135 @@ for S ∈ UnitSystems.Systems @test molarmass(U) ≈ avogadro(U)*2rydberg(U)*planck(U)/μₑᵤ/lightspeed(U)*αinv^2 end @testset "avogadro" begin - @test avogadro(U) ≈ universal(U)/boltzmann(U) + @test avogadro(U) ≈ universalgas(U)/boltzmann(U) @test avogadro(U) ≈ molarmass(U)/atomicmass(U) - @test avogadro(U) == molarmass(U)*μₑᵤ/electronmass(U) + @test avogadro(U) ≈ molarmass(U)*μₑᵤ/electronmass(U) @test avogadro(U) ≈ molarmass(U)*μₑᵤ*lightspeed(U)/αinv^2/2rydberg(U)/planck(U) end @testset "boltzmann" begin - @test boltzmann(U) == universal(U)/avogadro(U) + @test boltzmann(U) == universalgas(U)/avogadro(U) @test boltzmann(U) ≈ atomicmass(U)*universal(U)/molarmass(U) @test boltzmann(U) ≈ electronmass(U)*universal(U)/μₑᵤ/molarmass(U) - @test boltzmann(U) ≈ 2universal(U)*rydberg(U)*planck(U)/molarmass(U)/μₑᵤ/lightspeed(U)*αinv^2 + @test boltzmann(U) ≈ 2universalgas(U)*rydberg(U)*planck(U)/molarmass(U)/μₑᵤ/lightspeed(U)*αinv^2 end - @testset "universal" begin - @test universal(U) == boltzmann(U)*avogadro(U) - @test universal(U) ≈ boltzmann(U)*molarmass(U)/atomicmass(U) - @test universal(U) ≈ boltzmann(U)*molarmass(U)*μₑᵤ/electronmass(U) - @test universal(U) ≈ boltzmann(U)*molarmass(U)*μₑᵤ*lightspeed(U)/αinv^2/2planck(U)/rydberg(U) + @testset "universalgas" begin + @test universalgas(U) == boltzmann(U)*avogadro(U) + @test universalgas(U) ≈ boltzmann(U)*molarmass(U)/atomicmass(U) + @test universalgas(U) ≈ boltzmann(U)*molarmass(U)*μₑᵤ/electronmass(U) + @test universalgas(U) ≈ boltzmann(U)*molarmass(U)*μₑᵤ*lightspeed(U)/αinv^2/2planck(U)/rydberg(U) end - @testset "stefan" begin + S≠:Cosmological && @testset "stefan" begin @test stefan(U) ≈ 2π^5*boltzmann(U)^4/15planck(U)^3/lightspeed(U)^2 @test stefan(U) ≈ π^2*boltzmann(U)^4/60planckreduced(U)^3/lightspeed(U)^2 - @test stefan(U) ≈ 32π^5*planck(U)/15lightspeed(U)^6*αinv^8*(universal(U)*rydberg(U)/μₑᵤ/molarmass(U))^4 + @test stefan(U) ≈ 32π^5*planck(U)/15lightspeed(U)^6*αinv^8*(universalgas(U)*rydberg(U)/μₑᵤ/molarmass(U))^4 end - @testset "radiationdensity" begin + S≠:Cosmological && @testset "radiationdensity" begin @test radiationdensity(U) ≈ 4stefan(U)/lightspeed(U) @test radiationdensity(U) ≈ 8π^5*boltzmann(U)^4/15planck(U)^3/lightspeed(U)^3 @test radiationdensity(U) ≈ π^2*boltzmann(U)^4/15planckreduced(U)^3/lightspeed(U)^3 - @test radiationdensity(U) ≈ 2^7*π^5*planck(U)/15lightspeed(U)^7*αinv^8*(universal(U)*rydberg(U)/μₑᵤ/molarmass(U))^4 + @test radiationdensity(U) ≈ 2^7*π^5*planck(U)/15lightspeed(U)^7*αinv^8*(universalgas(U)*rydberg(U)/μₑᵤ/molarmass(U))^4 end end @testset "Electromagnetic constants" begin @testset "rationalization" begin - @test rationalization(U) ≈ 4π*biotsavart(U)/permeability(U)/lorentz(U) - @test rationalization(U) ≈ 4π*coulomb(U)*permittivity(U) - @test rationalization(U) ≈ impedance(U)*permittivity(U)*lightspeed(U) - end - @testset "permeability" begin - @test permeability(U) ≈ 1/permittivity(U)/(lightspeed(U)*lorentz(U))^2 - @test permeability(U) ≈ 4π*coulomb(U)/rationalization(U)/(lightspeed(U)*lorentz(U))^2 - @test permeability(U) ≈ 2planck(U)/αinv/rationalization(U)/lightspeed(U)/(charge(U)*lorentz(U))^2 - @test permeability(U) ≈ 2klitzing(U)/αinv/rationalization(U)/lightspeed(U)/lorentz(U)^2 - end - @testset "permittivity" begin - @test permittivity(U) ≈ 1/permeability(U)/(lightspeed(U)*lorentz(U))^2 - @test permittivity(U) ≈ rationalization(U)/4π/coulomb(U) - @test permittivity(U) ≈ rationalization(U)*charge(U)^2*αinv/2planck(U)/lightspeed(U) - @test permittivity(U) ≈ rationalization(U)/2klitzing(U)/lightspeed(U)*αinv + @test rationalization(U) ≈ 4π*biotsavart(U)/vacuumpermeability(U)/lorentz(U) + @test rationalization(U) ≈ 4π*coulomb(U)*vacuumpermittivity(U) + @test rationalization(U) ≈ vacuumimpedance(U)*vacuumpermittivity(U)*lightspeed(U) + end + @testset "vacuumpermeability" begin + @test vacuumpermeability(U) ≈ 1/vacuumpermittivity(U)/(lightspeed(U)*lorentz(U))^2 + @test vacuumpermeability(U) ≈ 4π*coulomb(U)/rationalization(U)/(lightspeed(U)*lorentz(U))^2 + @test vacuumpermeability(U) ≈ 2planck(U)/αinv/rationalization(U)/lightspeed(U)/(elementarycharge(U)*lorentz(U))^2 + @test vacuumpermeability(U) ≈ 2klitzing(U)/αinv/rationalization(U)/lightspeed(U)/lorentz(U)^2 + end + @testset "vacuumpermittivity" begin + @test vacuumpermittivity(U) ≈ 1/vacuumpermeability(U)/(lightspeed(U)*lorentz(U))^2 + @test vacuumpermittivity(U) ≈ rationalization(U)/4π/coulomb(U) + @test vacuumpermittivity(U) ≈ rationalization(U)*elementarycharge(U)^2*αinv/2planck(U)/lightspeed(U) + @test vacuumpermittivity(U) ≈ rationalization(U)/2klitzing(U)/lightspeed(U)*αinv end @testset "coulomb" begin - @test coulomb(U) == rationalization(U)/4π/permittivity(U) - @test coulomb(U) ≈ permeability(U)*rationalization(U)*(lorentz(U)*lightspeed(U))^2/4π - @test coulomb(U) ≈ planckreduced(U)*lightspeed(U)/αinv/charge(U)^2 + @test coulomb(U) ≈ rationalization(U)/4π/vacuumpermittivity(U) + @test coulomb(U) ≈ vacuumpermeability(U)*rationalization(U)*(lorentz(U)*lightspeed(U))^2/4π + @test coulomb(U) ≈ planckreduced(U)*lightspeed(U)/αinv/elementarycharge(U)^2 @test coulomb(U) ≈ klitzing(U)*lightspeed(U)/αinv/2π - @test coulomb(U) ≈ biotsavart(U)/lorentz(U)/permeability(U)/permittivity(U) + @test coulomb(U) ≈ biotsavart(U)/lorentz(U)/vacuumpermeability(U)/vacuumpermittivity(U) @test coulomb(U) ≈ ampere(U)*lightspeed(U)^2 end @testset "ampere" begin @test ampere(U) == lorentz(U)*biotsavart(U) - @test ampere(U) ≈ permeability(U)*lorentz(U)^2*rationalization(U)/4π + @test ampere(U) ≈ vacuumpermeability(U)*lorentz(U)^2*rationalization(U)/4π @test ampere(U) ≈ coulomb(U)/lightspeed(U)^2 - @test ampere(U) ≈ planckreduced(U)/αinv/lightspeed(U)/charge(U)^2 + @test ampere(U) ≈ planckreduced(U)/αinv/lightspeed(U)/elementarycharge(U)^2 @test ampere(U) ≈ klitzing(U)/αinv/2π/lightspeed(U) end @testset "lorentz" begin - @test lorentz(U) ≈ 1/lightspeed(U)/sqrt(permeability(U)*permittivity(U)) - @test lorentz(U) ≈ biotsavart(U)/permeability(U)/permittivity(U)/coulomb(U) - @test lorentz(U) ≈ 4π*biotsavart(U)/rationalization(U)/permeability(U) + @test lorentz(U) ≈ 1/lightspeed(U)/sqrt(vacuumpermeability(U)*vacuumpermittivity(U)) + @test lorentz(U) ≈ biotsavart(U)/vacuumpermeability(U)/vacuumpermittivity(U)/coulomb(U) + @test lorentz(U) ≈ 4π*biotsavart(U)/rationalization(U)/vacuumpermeability(U) @test lorentz(U) == ampere(U)/biotsavart(U) end @testset "biotsavart" begin - @test biotsavart(U) ≈ permeability(U)*lorentz(U)*rationalization(U)/4π - @test biotsavart(U) ≈ lorentz(U)*permeability(U)*permittivity(U)*coulomb(U) + @test biotsavart(U) ≈ vacuumpermeability(U)*lorentz(U)*rationalization(U)/4π + @test biotsavart(U) ≈ lorentz(U)*vacuumpermeability(U)*vacuumpermittivity(U)*coulomb(U) @test biotsavart(U) == ampere(U)/lorentz(U) - @test biotsavart(U) ≈ coulomb(U)*sqrt(permeability(U)*permittivity(U))/lightspeed(U) + @test biotsavart(U) ≈ coulomb(U)*sqrt(vacuumpermeability(U)*vacuumpermittivity(U))/lightspeed(U) end - @testset "charge" begin - @test charge(U) ≈ sqrt(2planck(U)/αinv/impedance(U)) - @test charge(U) ≈ 2lorentz(U)/josephson(U)/klitzing(U) - @test charge(U) == sqrt(planck(U)/klitzing(U)) - @test charge(U) ≈ planck(U)*josephson(U)/2lorentz(U) - @test charge(U) == faraday(U)/avogadro(U) + @testset "elementarycharge" begin + @test elementarycharge(U) ≈ sqrt(2planck(U)/αinv/vacuumimpedance(U)) + @test elementarycharge(U) ≈ 2lorentz(U)/josephson(U)/klitzing(U) + @test elementarycharge(U) ≈ sqrt(planck(U)/klitzing(U)) + @test elementarycharge(U) ≈ planck(U)*josephson(U)/2lorentz(U) + @test elementarycharge(U) ≈ faraday(U)/avogadro(U) end @testset "faraday" begin - @test faraday(U) == charge(U)*avogadro(U) - @test faraday(U) ≈ avogadro(U)*sqrt(2planck(U)/αinv/impedance(U)) + @test faraday(U) == elementarycharge(U)*avogadro(U) + @test faraday(U) ≈ avogadro(U)*sqrt(2planck(U)/αinv/vacuumimpedance(U)) @test faraday(U) ≈ 2avogadro(U)*lorentz(U)/josephson(U)/klitzing(U) - @test faraday(U) == avogadro(U)*sqrt(planck(U)/klitzing(U)) + @test faraday(U) ≈ avogadro(U)*sqrt(planck(U)/klitzing(U)) @test faraday(U) ≈ planck(U)*josephson(U)*avogadro(U)/2lorentz(U) end - @testset "impedance" begin - @test impedance(U) ≈ permeability(U)*rationalization(U)*lightspeed(U)*lorentz(U)^2 - @test impedance(U) ≈ rationalization(U)/permittivity(U)/lightspeed(U) - @test impedance(U) ≈ rationalization(U)*lorentz(U)*sqrt(permeability(U)/permittivity(U)) - @test impedance(U) ≈ 2planck(U)/αinv/charge(U)^2 - @test impedance(U) ≈ 2klitzing(U)/αinv + @testset "vacuumimpedance" begin + @test vacuumimpedance(U) ≈ vacuumpermeability(U)*rationalization(U)*lightspeed(U)*lorentz(U)^2 + @test vacuumimpedance(U) ≈ rationalization(U)/vacuumpermittivity(U)/lightspeed(U) + @test vacuumimpedance(U) ≈ rationalization(U)*lorentz(U)*sqrt(vacuumpermeability(U)/vacuumpermittivity(U)) + @test vacuumimpedance(U) ≈ 2planck(U)/αinv/elementarycharge(U)^2 + @test vacuumimpedance(U) ≈ 2klitzing(U)/αinv end - @testset "conductance" begin - @test conductance(U) == 2charge(U)^2/planck(U) - @test conductance(U) ≈ 4/αinv/impedance(U) - @test conductance(U) ≈ 2/klitzing(U) - @test conductance(U) ≈ planck(U)*josephson(U)^2/2lorentz(U)^2 - @test conductance(U) ≈ 2faraday(U)^2/planck(U)/avogadro(U)^2 + @testset "conductancequantum" begin + @test conductancequantum(U) ≈ 2elementarycharge(U)^2/planck(U) + @test conductancequantum(U) ≈ 4/αinv/vacuumimpedance(U) + @test conductancequantum(U) ≈ 2/klitzing(U) + @test conductancequantum(U) ≈ planck(U)*josephson(U)^2/2lorentz(U)^2 + @test conductancequantum(U) ≈ 2faraday(U)^2/planck(U)/avogadro(U)^2 end @testset "klitzing" begin - @test klitzing(U) == planck(U)/charge(U)^2 - @test klitzing(U) ≈ impedance(U)*αinv/2 - @test klitzing(U) ≈ 2/conductance(U) + @test klitzing(U) == planck(U)/elementarycharge(U)^2 + @test klitzing(U) ≈ vacuumimpedance(U)*αinv/2 + @test klitzing(U) ≈ 2/conductancequantum(U) @test klitzing(U) ≈ 4lorentz(U)^2/planck(U)/josephson(U)^2 @test klitzing(U) ≈ planck(U)*avogadro(U)^2/faraday(U)^2 end @testset "josephson" begin - @test josephson(U) == 2charge(U)*lorentz(U)/planck(U) - @test josephson(U) ≈ lorentz(U)*sqrt(8/αinv/planck(U)/impedance(U)) + @test josephson(U) ≈ 2elementarycharge(U)*lorentz(U)/planck(U) + @test josephson(U) ≈ lorentz(U)*sqrt(8/αinv/planck(U)/vacuumimpedance(U)) @test josephson(U) ≈ lorentz(U)*sqrt(4/planck(U)/klitzing(U)) - @test josephson(U) ≈ 1/magneticflux(U) + @test josephson(U) ≈ 1/magneticfluxquantum(U) @test josephson(U) ≈ 2faraday(U)*lorentz(U)/planck(U)/avogadro(U) end - @testset "magneticflux" begin - @test magneticflux(U) ≈ planck(U)/2charge(U)/lorentz(U) - @test magneticflux(U) ≈ sqrt(planck(U)*impedance(U)*αinv/8)/lorentz(U) - @test magneticflux(U) ≈ sqrt(planck(U)*klitzing(U)/4)/lorentz(U) - @test magneticflux(U) == 1/josephson(U) - @test magneticflux(U) ≈ planck(U)*avogadro(U)/2faraday(U)/lorentz(U) + @testset "magneticfluxquantum" begin + @test magneticfluxquantum(U) ≈ planck(U)/2elementarycharge(U)/lorentz(U) + @test magneticfluxquantum(U) ≈ sqrt(planck(U)*vacuumimpedance(U)*αinv/8)/lorentz(U) + @test magneticfluxquantum(U) ≈ sqrt(planck(U)*klitzing(U)/4)/lorentz(U) + @test magneticfluxquantum(U) == 1/josephson(U) + @test magneticfluxquantum(U) ≈ planck(U)*avogadro(U)/2faraday(U)/lorentz(U) end @testset "magneton" begin - @test magneton(U) == charge(U)*planckreduced(U)*lorentz(U)/2electronmass(U) + @test magneton(U) ≈ elementarycharge(U)*planckreduced(U)*lorentz(U)/2electronmass(U) @test magneton(U) ≈ planckreduced(U)*lorentz(U)^2/electronmass(U)/josephson(U)/klitzing(U) @test magneton(U) ≈ planck(U)^2*josephson(U)/8π/electronmass(U) @test magneton(U) ≈ lorentz(U)*planckreduced(U)*faraday(U)/2electronmass(U)/avogadro(U) - @test magneton(U) ≈ charge(U)*lightspeed(U)*lorentz(U)/αinv^2/8π/rydberg(U) + @test magneton(U) ≈ elementarycharge(U)*lightspeed(U)*lorentz(U)/αinv^2/8π/rydberg(U) end end end