diff --git a/Kernel/UnitSystems.wl b/Kernel/UnitSystems.wl index 4374089..b1c2b58 100644 --- a/Kernel/UnitSystems.wl +++ b/Kernel/UnitSystems.wl @@ -18,54 +18,51 @@ Unprotect[UnitSystem]; 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", +UnitSystemsList = {"Metric", "SI2019", "SI1976", "CODATA", "Conventional", "International", "InternationalMean", "MetricEngineering", "SI2019Engineering", + "GravitationalMetric", "GravitationalSI2019", + "MTS", "EMU", "ESU", "Gauss", "LorentzHeaviside", "Kennelly", "FPS", "IPS", "British", "English", "Survey", "FFF", "MPH", "KKH", "Nautical", "Meridian", "MeridianEngineering", "GravitationalMeridian", "IAU", "IAUE", "IAUJ", "Hubble", + "Cosmological", "CosmologicalQuantum", "Planck", "PlanckGauss", "Stoney", "Hartree", "Rydberg", "Schrodinger", "Electronic", "Natural", "NaturalGauss", - "QCD", "QCDGauss", "QCDoriginal", "Hubble", "Cosmological", "CosmologicalQuantum"}; + "QCD", "QCDGauss", "QCDoriginal"}; DimensionlessList = {GravitationalCouplingConstantElectronElectron, FineStructureConstant, ElectronRelativeAtomicMass, ProtonRelativeAtomicMass, ProtonElectronMassRatio, UniverseDarkEnergyMassDensity} ConstantsList = {SpeedOfLight, PlanckConstant, ReducedPlanckConstant, ElectronMass, MolarMassConstant, BoltzmannConstant, MagneticConstant, RationalizationConstant, LorentzConstant, MonochromaticRadiation540THzLuminousEfficacy,AngleConstant,GravityConstant}; (*Cesium133HyperfineSplittingFrequency, HubbleParameter, CosmologicalConstant,*) -PhysicsList = {Turn, SphereAngle, AtomicMassConstant, ProtonMass, PlanckMass, - GravitationalConstant, EinsteinConstantSpeedOfLightToTheFourth, - HartreeEnergy, RydbergConstant, BohrRadius, - RelativisticBohrRadius, ClassicalElectronRadius, +PhysicsList = {Turn, Spat, AtomicMassConstant, ProtonMass, PlanckMass, + GravitationalConstant, GaussianGravitationalConstant, EinsteinConstantSpeedOfLightToTheFourth, + HartreeEnergy, RydbergConstant, BohrRadius, ClassicalElectronRadius, AvogadroConstant, MolarGasConstant, StefanBoltzmannConstant, RadiationConstant, ElectricConstant, CoulombConstant, AmpereConstant, BiotSavartConstant, ElementaryCharge, FaradayConstant, VacuumImpedance, ConductanceQuantum, VonKlitzingConstant, JosephsonConstant, MagneticFluxQuantum, BohrMagneton}; KinematicList = {Angle, SolidAngle, Time, Length, Area, Volume, Wavenumber, - AngularWavenumber, FuelEconomy, Frequency, AngularFrequency, FrequencyDrift, Speed, + AngularWavenumber, FuelEconomy, NumberDensity, Frequency, AngularFrequency, FrequencyDrift, Speed, Acceleration, Jerk, Snap, Crackle, Pop, VolumeFlowRate}; MechanicalList = {Inertia, Mass, MassFlowRate, LinearMassDensity, MassPerArea, MassDensity, - SpecificWeight, SpecificVolume, Force, GForce, Stiffness, Pressure, Compressibility, + SpecificWeight, SpecificVolume, Force, SpecificForce, GravityForce, 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, ElectricResistance, MagneticInductance, MagneticReluctance, MagneticPermeance, - ElectricPermittivity, MagneticPermeability, MagneticSusceptibility, ElectricCurrent, ElectricConductance, + ElectricChargePerMass, ElectricalMobility, ElectricCurrent, ElectricCurrentDensity, ElectricResistance, ElectricConductance, Resistivity, Conductivity, + ElectricCapacitance, MagneticInductance, MagneticReluctance, MagneticPermeance, + ElectricPermittivity, MagneticPermeability, MagneticSusceptibility, SpecificSusceptibility, DemagnetizationFactor, MagneticVectorPotential, ElectricPotential, MagnetomotiveForce, ElectricFieldStrength, MagneticFieldStrength, ElectricFlux, MagneticFlux, ElectricFluxDensity, MagneticFluxDensity, ElectricDipoleMoment, MagneticDipoleMoment, ElectricPolarizability, MagneticPolarizability, MagneticMoment, - Magnetizability, Magnetization, SpecificMagnetization, MagneticRigidity, - MagneticPoleStrength}; + SpecificMagnetization, MagneticPoleStrength}; ThermodynamicList = {Temperature, Entropy, SpecificEntropy, - EntropyPerVolume, ThermalConductivity, ThermalConductance, + EntropyPerVolume, ThermalConductivity, ThermalConductance, ThermalResistivity, ThermalResistance, ThermalExpansion, TemperatureGradient}; MolarList = {MolarMass, Molality, Amount, AmountConcentration, MolarVolume, MolarEntropy, MolarEnergy, MolarConductivity, MolarMagneticSusceptibility, Catalysis, Specificity}; -PhotometricList = {LuminousFlux, Luminance, LuminousEnergy, +PhotometricList = {LuminousFlux, LuminousIntensity, Luminance, Illuminance, LuminousEnergy, LuminousExposure, LuminousEfficacyOfRadiation}; MechanicsList = Join[KinematicList, MechanicalList]; ConvertList = @@ -91,7 +88,7 @@ LorentzConstant[UnitSystem[_, _, _, _, _, _, _, _, _, \[Alpha]L_, ___]] := \[Alp 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_UnitSystem] := RationalizationConstant[u] != Spat[u] RationalizedQ[u_String] := RationalizedQ[UnitSystem[u]] MonochromaticRadiation540THzLuminousEfficacy[UnitSystem[_, _, _, _, _, _, Kcd_, ___]] := Kcd @@ -272,6 +269,8 @@ CreateEntity[u_String] := u -> <| EntityRegister[EntityStore["UnitSystem" -> <| "Entities" -> Association[Map[CreateEntity, UnitSystemsList]]|>]] +Get["UnitSystems`standards`"] + (* more *) DerivedUnits = <| @@ -370,50 +369,49 @@ AbstractSI2019 = AbstractUnitSystem["SI2019"] AbstractInternational = AbstractUnitSystem["International"] AbstractCGS = AbstractUnitSystem["Gauss"] AbstractMTS = AbstractUnitSystem["MTS"] +AbstractIPS = AbstractUnitSystem["IPS"] AbstractBritish = AbstractUnitSystem["British"] AbstractEnglish = AbstractUnitSystem["English"] AbstractSurvey = AbstractUnitSystem["Survey"] AbstractIAU = AbstractUnitSystem["IAU"] AbstractFFF = AbstractUnitSystem["FFF"] +AbstractMeridian = AbstractUnitSystem["Meridian"] +AbstractNautical = AbstractUnitSystem["Nautical"] Gauss = UnitSystem["Gauss"] LorentzHeaviside = UnitSystem["LorentzHeaviside"] -Thomson = UnitSystem["Thomson"] Kennelly = UnitSystem["Kennelly"] ESU = UnitSystem["ESU"] -ESU2019 = UnitSystem["ESU2019"] EMU = UnitSystem["EMU"] -EMU2019 = UnitSystem["EMU2019"] +Meridian = UnitSystem["Meridian"] 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"] +MeridianEngineering = UnitSystem["MeridianEngineering"] GravitationalMetric = UnitSystem["GravitationalMetric"] GravitationalSI2019 = UnitSystem["GravitationalSI2019"] +GravitationalMeridian = UnitSystem["GravitationalMeridian"] 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"] -English2019 = UnitSystem["English2019"] FPS = UnitSystem["FPS"] -FPS2019 = UnitSystem["FPS2019"] +IPS = UnitSystem["IPS"] IAU = UnitSystem["IAU"] IAUE = UnitSystem["IAUE"] IAUJ = UnitSystem["IAUJ"] FFF = UnitSystem["FFF"] -Astronomical = UnitSystem["Astronomical"] +(*Astronomical = UnitSystem["Astronomical"]*) Hubble = UnitSystem["Hubble"] Cosmological = UnitSystem["Cosmological"] CosmologicalQuantum = UnitSystem["CosmologicalQuantum"] @@ -428,7 +426,6 @@ QCDGauss = UnitSystem["QCDGauss"] QCDoriginal = UnitSystem["QCDoriginal"] {SI, MKS, SIE, ME, GSI2019, GSI, GM} = {SI2019, Metric, SI2019Engineering, MetricEngineering, GravitationalSI2019, GravitationalSI2019, GravitationalMetric} -{CGS, CGS2019, CGSm, CGSe, HLU} = {Gauss, EMU2019, EMU, ESU, LorentzHeaviside} +{CGS, CGSm, CGSe, HLU} = {Gauss, 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}; +{EnglishUS, AbsoluteEnglish, AE, EE} = {Survey, FPS, FPS, English}; diff --git a/Kernel/dimensions.wl b/Kernel/dimensions.wl index 6c636e8..f3d415b 100644 --- a/Kernel/dimensions.wl +++ b/Kernel/dimensions.wl @@ -12,44 +12,83 @@ (* 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] +usq = {"F", "M", "L","T","Q","\[Theta]","N","J","A","\[CapitalLambda]","C"} + +d1 = USQ[{0,0,0,0,0,0,0,0,0,0,0},1] +dF = USQ[{1,0,0,0,0,0,0,0,0,0,0},1] +dM = USQ[{0,1,0,0,0,0,0,0,0,0,0},1] +dL = USQ[{0,0,1,0,0,0,0,0,0,0,0},1] +dT = USQ[{0,0,0,1,0,0,0,0,0,0,0},1] +dQ = USQ[{0,0,0,0,1,0,0,0,0,0,0},1] +d0 = USQ[{0,0,0,0,0,1,0,0,0,0,0},1] +dN = USQ[{0,0,0,0,0,0,1,0,0,0,0},1] +dJ = USQ[{0,0,0,0,0,0,0,1,0,0,0},1] +dA = USQ[{0,0,0,0,0,0,0,0,1,0,0},1] +dR = USQ[{0,0,0,0,0,0,0,0,0,1,0},1] +dC = USQ[{0,0,0,0,0,0,0,0,0,0,1},1] + +usqbox[{x_, 1}] := ToBoxes[x] +usqbox[{x_, 1.}] := ToBoxes[x] +usqbox[{x_, y_}] := SuperscriptBox[x, ToBoxes[y]] +usqbox[{_, 0}] = Sequence[] +usqbox[{_, 0.}] = Sequence[] + +USQ /: MakeBoxes[x_USQ, StandardForm] := unitBoxes[x] + +USQ /: Plus[a:USQ[z:{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_],USQ[z:{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},y_]] := USQ[z,x+y] +USQ /: Subtract[USQ[z:{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_],USQ[z:{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},y_]] := USQ[z,x-y] +USQ /: Times[USQ[a_List,x_],USQ[b_List,y_]] := USQ[a+b,x*y] +USQ /: Divide[USQ[a_List,x_],USQ[b_List,y_]] := USQ[a-b,x/y] +USQ /: Power[USQ[a_List,c_],b_] := USQ[b*a,Power[c,b]] +USQ /: Sqrt[USQ[a_List,c_]] := USQ[a/2,Sqrt[c]] +USQ /: Inverse[USQ[a_List,c_]] := USQ[-a,1/c] + +USQ /: Times[USQ[a_List,c_],b_] := USQ[a,c*b] (* Measure *) -Measure /: MakeBoxes[Measure[v_, d_ISQ, u_String],StandardForm] := Module[{x=transform[u,d]}, RowBox[{ToBoxes[v], "[", ToBoxes[x], "]", u}]] +showGroup[u_] := If[AbstractUnitSystemQ[u],usq,showGroup[StringJoin["Abstract",u]]] +showGroup["AbstractMetric"] := {"kgf", "kg", "m","s","C","K","mol","lm","rad","",""} +showGroup["AbstractMeridian"] := {"kegf", "keg", "em","s","eC","K","eg-mol","lm","rad","",""} +showGroup["AbstractBritish"] := {"lb", "slug", "ft","s","C","\[Degree]R","slug-mol","lm","rad","",""} +showGroup["AbstractEnglish"] := {"lbf", "lbm", "ft","s","C","\[Degree]R","lb-mol","lm","rad","",""} +showGroup["AbstractIPS"] := {"lb", "slinch", "in","s","C","\[Degree]R","slinch-mol","lm","rad","",""} +showGroup["AbstractFPS"] := {"pdl", "lb", "ft","s","C","\[Degree]R","lb-mol","lm","rad","",""} +showGroup["AbstractGauss"] := {"gf", "g", "cm","s","_","K","mol","lm","rad","",""} +showGroup["AbstractIAU"] := {"M\[CircleDot]f", "M\[CircleDot]", "au","D","C","K","mol","lm","rad","",""} +showGroup["AbstractIAUE"] := {"MEf", "ME", "au","D","C","K","mol","lm","rad","",""} +showGroup["AbstractIAUJ"] := {"MJf", "MJ", "au","D","C","K","mol","lm","rad","",""} +showGroup["AbstractMTS"] := {"tf", "t", "m","s","C","K","mol","lm","rad","",""} +showGroup["AbstractKKH"] := {"kgf", "kg", "km","h","C","K","mol","lm","rad","",""} +showGroup["AbstractMPH"] := {"lbf", "lb", "mi","h","C","\[Degree]R","lb-mol","lm","rad","",""} +showGroup["AbstractNautical"] := {"kegf", "keg", "nm","h","eC","K","mol","lm","rad","",""} +showGroup["AbstractFFF"] := {"firf", "fir", "fur","ftn","inf","\[Degree]R","fir-mol","lm","rad","",""} + +showGroup["AbstractSI2019"] := showGroup["Metric"] +showGroup["AbstractSI1976"] := showGroup["Metric"] +showGroup["AbstractCODATA"] := showGroup["Metric"] +showGroup["AbstractConventional"] := showGroup["Metric"] +showGroup["AbstractInternational"] := showGroup["Metric"] +showGroup["AbstractInternationalMean"] := showGroup["Metric"] +showGroup["AbstractMetricEngineering"] := showGroup["Metric"] +showGroup["AbstractGravitationalMetric"] := showGroup["Metric"] +showGroup["AbstractSI2019Engineering"] := showGroup["MetricEngineering"] +showGroup["AbstractGravitationalSI2019"] := showGroup["GravitationalMetric"] +showGroup["AbstractMeridianEngineering"] := showGroup["Meridian"] +showGroup["AbstractGravitationalMeridian"] := showGroup["Meridian"] +showGroup["AbstractSurvey"] := showGroup["English"] +showGroup["AbstractEMU"] := showGroup["Gauss"] +showGroup["AbstractESU"] := showGroup["Gauss"] +showGroup["AbstractLorentzHeaviside"] := showGroup["Gauss"] +showGroup["AbstractKennelly"] := showGroup["Metric"] + +unitBoxes[USQ[{0,0,0,0,0,0,0,0,0,0,0}, 1],_:usq] := "\[DoubleStruckL]" +unitBoxes[USQ[l_List, 1],s_:usq] := RowBox[Map[usqbox, Transpose[{s, l}]]] +unitBoxes[USQ[l_List, c_],s_:usq] := RowBox[Prepend[Map[usqbox, Transpose[{s, l}]], c]] + +transformBoxes[d_,u_] := unitBoxes[transform[u,d],showGroup[u]] + +Measure /: MakeBoxes[Measure[v_, d_USQ, u_String],StandardForm] := RowBox[{ToBoxes[v], "[", transformBoxes[d,u], "]", 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] @@ -63,13 +102,13 @@ Measure /: Plus[Measure[v1_,d1_,u_],Measure[v2_,d2_,u_]] := Measure[v1+v2,d1+d2, 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] +Measure /: Equal[Measure[v_,USQ[l_,c_],u_],a_] := And[Total[l]==0,a==v*c] -(*quantity /: Log[b_,Power[B_,_ISQ]] := "test"*) +(*quantity /: Log[b_,Power[B_,_USQ]] := "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_] := +ratiocalc[USQ[d_,c_], u_, s_] := BoltzmannConstant[u, s]^d[[1]]* ReducedPlanckConstant[u, s]^d[[2]]* SpeedOfLight[u, s]^d[[3]]* @@ -87,59 +126,61 @@ 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] +dimension[Measure[_,d_,_]] := d + +USQ[d_Symbol] := dimension[d[MM /@ UnitSystem["Natural"], UnitSystem["Natural"]]] + (* 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[USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := USQ[{-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["MetricEngineering",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{f,m,l,t,q,h,n,j,a,0,0},x] +transform["GravitationalMetric",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{f+m,0,l-m,t+2*m,q,h,n,j,0,0,0},x] +transform["Metric",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,f+m,f+l,t-2*f,q,h,n,j,0,0,0},x] +(*transform["Astronomical",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{f,0,l+3*m,t-2*m,q,h,n,j,a,0,0},x]*) + +transform["Gauss",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,f+m+q/2,f+l+(3/2)*q+c,t-2*(f+q)-c,0,h,n,j,0,0,0},x] +transform["ESU",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,f+m+q/2,f+l+(3/2)*q,t-2*(f+q),0,h,n,j,0,0,0},x] +transform["EMU",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,f+m+q/2,f+l+q/2,t-q-2*f,0,h,n,j,0,0,0},x] + +transform["Stoney",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,f+m+h,0,l+t-f,q,0,0,0,0,0,0},x] +transform["Electronic",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,0,0,l+t-f,q,0,0,0,0,0,0},x] +transform["QCDoriginal",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,2*f+m+h-l-t,0,0,q,0,0,0,a,0,0},x] +transform["PlanckGauss",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,2*f+m+h-l-t,0,0,0,0,0,0,a,0,0},x] +transform["Planck",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,2*f+m+q+h-l-t,0,0,0,0,0,0,0,0,0},x] +transform["Natural",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,0,0,0,0,0,0,0,0,0,0},x] +transform["NaturalGauss",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,0,0,0,0,0,0,0,a,0,0},x] + +transform["Rydberg",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,m+t+h-f,0,l+2*(t-h)-3*f,q,0,0,0,0,0,0},x] +transform["Hartree",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,0,l+2*(t-h)-3*f,0,q,0,0,0,0,0,0},x] +transform["Hubble",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{0,f+m,l+t-f,0,q,h,n,j,0,0,0},x] +transform["CosmologicalQuantum",USQ[{f_,m_,l_,t_,q_,h_,n_,j_,a_,r_,c_},x_]] := + USQ[{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["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] @@ -147,9 +188,10 @@ transform["Cosmological",x_] := transform["Hubble",x] transform["SI2019Engineering",x_] := transform["MetricEngineering",x] transform["GravitationalSI2019",x_] := transform["GravitationalMetric",x] +transform["MeridianEngineering",x_] := transform["MetricEngineering",x] +transform["GravitationalMeridian",x_] := transform["GravitationalMetric",x] transform["British",x_] := transform["GravitationalMetric",x] -transform["British2019",x_] := transform["GravitationalMetric",x] +transform["IPS",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 c15e764..11e21d8 100644 --- a/Kernel/physics.wl +++ b/Kernel/physics.wl @@ -10,7 +10,7 @@ (* \___|_| |_|\__,_|_|\_\_| \__,_| \_/ \__,_|_|\__,_| *) 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]])] +Spat[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"]); @@ -19,12 +19,12 @@ 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[u:UnitSystem["Planck"], c_Coupling] := PowerExpand[Sqrt[SphereAngle[u] GravitationalCouplingConstantElectronElectron[c]]] +ElectronMass[u:UnitSystem["Planck"], c_Coupling] := PowerExpand[Sqrt[Spat[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[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; +MagneticConstant[u:UnitSystem[_, _, _, 4 Pi UnitData["\[Alpha]"]^2, ___], c_Coupling] := Spat[u] FineStructureConstant[c]^2; +MagneticConstant[u:UnitSystem[_, _, _, Pi UnitData["\[Alpha]"]^2, ___], c_Coupling] := Spat[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]; @@ -101,6 +101,7 @@ 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]; +NumberDensity[u_UnitSystem, s_UnitSystem] := Volume[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]; @@ -112,15 +113,16 @@ 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]; +VolumeFlowRate[u_UnitSystem, s_UnitSystem] := Unit[Area[u, s] Speed[u, s]]; +SpecificEnergy[u_UnitSystem, s_UnitSystem] := Unit[Speed[u, s]^2/GravityConstant[u, s]]; 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[Inertia[u, s] Acceleration[u, s]]; -GForce[u_UnitSystem, s_UnitSystem] := Unit[Acceleration[u, s]/GravityConstant[u, s]]; +SpecificForce[u_UnitSystem, s_UnitSystem] := Unit[Acceleration[u, s]/GravityConstant[u, s]]; +GravityForce[u_UnitSystem, s_UnitSystem] := Unit[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]]; @@ -132,7 +134,7 @@ 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[Energy[u, s] Time[u, s]]; -Stiffness[u_UnitSystem, s_UnitSystem] := Unit[Force[u, s]/Length[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[Speed[u, s] Length[u, s]]; DynamicViscosity[u_UnitSystem, s_UnitSystem] := Unit[Force[u, s]/Speed[u, s]/Length[u, s]]; @@ -177,12 +179,12 @@ MagneticFieldStrength[u_UnitSystem, s_UnitSystem] := Unit[ElectricCurrent[u, s] ElectricChargePerMass[u_UnitSystem, s_UnitSystem] := Unit[ElectricCharge[u, s]/Mass[u, s]]; Resistivity[u_UnitSystem, s_UnitSystem] := Unit[Resistance[u, s] Length[u, s]]; LinearElectricChargeDensity[u_UnitSystem, s_UnitSystem] := Unit[ElectricCharge[u, s]/Length[u, s]]; -MagneticDipoleMoment[u_UnitSystem, s_UnitSystem] := Unit[ElectricCurrent[u, s] LorentzConstant[u, s] Area[u, s]]; -ElectricalMobility[u_UnitSystem, s_UnitSystem] := Unit[ElectricCharge[u, s] Time[u, s]/Mass[u, s]]; +MagneticDipoleMoment[u_UnitSystem, s_UnitSystem] := Unit[ElectricCurrent[u, s] LorentzConstant[u, s] Area[u, s]/GravityCsontant[u, s]/Angle[u, s]]; +ElectricalMobility[u_UnitSystem, s_UnitSystem] := Unit[Length[u, s] Speed[u, s] ElectricPotential[u, s]]; MagneticReluctance[u_UnitSystem, s_UnitSystem] := Unit[RationalizationConstant[u, s] LorentzConstant[u, s]^2/MagneticInductance[u, s]]; MagneticVectorPotential[u_UnitSystem, s_UnitSystem] := Unit[MagneticFlux[u, s]/Length[u, s]]; MagneticMoment[u_UnitSystem, s_UnitSystem] := Unit[MagneticFlux[u, s] Length[u, s]]; -MagneticRigidity[u_UnitSystem, s_UnitSystem] := Unit[MagneticFluxDensity[u, s] Length[u, s]]; +(*MagneticRigidity[u_UnitSystem, s_UnitSystem] := Unit[MagneticFluxDensity[u, s] Length[u, s]];*) MagneticSusceptibility[u_UnitSystem, s_UnitSystem] := Unit[RationalizationConstant[s, u]]; (* WARNING unchecked: rigitidy, magneticmoment, vectorpotential, \ @@ -194,10 +196,10 @@ MagnetomotiveForce[u_UnitSystem, s_UnitSystem] := Unit[MagneticFlux[u, s] Magnet MagneticPoleStrength[u_UnitSystem, s_UnitSystem] := Unit[MagneticDipoleMoment[u, s]/Length[u, s]]; MagneticPermeance[u_UnitSystem, s_UnitSystem] := MagneticReluctance[s, u]; SpecificSusceptibility[u_UnitSystem, s_UnitSystem] := Unit[MagneticDipoleMoment[u, s]/MagneticFieldStrength[u, s]/Mass[u, s]]; -Magnetizability[u_UnitSystem, s_UnitSystem] := Unit[MagneticMoment[u, s]/MagneticFluxDensity[u, s]]; +(*Magnetizability[u_UnitSystem, s_UnitSystem] := Unit[MagneticMoment[u, s]/MagneticFluxDensity[u, s]];*) ElectricPolarizability[u_UnitSystem, s_UnitSystem] := Unit[ElectricDipoleMoment[u, s]/ElectricFieldStrength[u, s]]; MagneticPolarizability[u_UnitSystem, s_UnitSystem] := Unit[MagneticDipoleMoment[u, s]/MagneticFieldStrength[u, s]]; -Magnetization[u_UnitSystem, s_UnitSystem] := Unit[MagneticMoment[u, s]/Volume[u, s]]; +(*Magnetization[u_UnitSystem, s_UnitSystem] := Unit[MagneticMoment[u, s]/Volume[u, s]];*) SpecificMagnetization[u_UnitSystem, s_UnitSystem] := Unit[MagneticMoment[s, u]/Mass[s, u]]; DemagnetizationFactor[u_UnitSystem, s_UnitSystem] := Unit[RationalizationConstant[u, s]]; @@ -219,6 +221,7 @@ SpecificEntropy[u_UnitSystem, s_UnitSystem] := Unit[SpecificEnergy[u, s]/Tempera EntropyPerVolume[u_UnitSystem, s_UnitSystem] := Unit[Entropy[u, s]/Volume[u, s]]; ThermalConductivity[u_UnitSystem, s_UnitSystem] := Unit[Force[u, s]/Time[u, s]/Temperature[u, s]]; ThermalConductance[u_UnitSystem, s_UnitSystem] := Unit[ThermalConductivity[u, s] Length[u, s]]; +ThermalResistivity[u_UnitSystem, s_UnitSystem] := ThermalConductivity[s, u]; ThermalResistance[u_UnitSystem, s_UnitSystem] := ThermalConductance[s, u]; ThermalExpansion[u_UnitSystem, s_UnitSystem] := Temperature[s, u]; TemperatureGradient[u_UnitSystem, s_UnitSystem] := Unit[Temperature[u, s]/Length[u, s]]; @@ -236,8 +239,10 @@ 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 measuratio[MonochromaticRadiation540THzLuminousEfficacy[s] ReducedPlanckConstant[s], MonochromaticRadiation540THzLuminousEfficacy[u] ReducedPlanckConstant[u]]]; -Luminance[u_UnitSystem, s_UnitSystem] := Unit[LuminousFlux[u, s]/Area[u, s]]; +LuminousFlux[u_UnitSystem, s_UnitSystem] := Unit[Frequency[u, s] LuminousEnergy[u, s]]; +LuminousIntensity[u_UnitSystem, s_UnitSystem] := Unit[LuminousFlux[u, s]/SolidAngle[u, s]]; +Illuminance[u_UnitSystem, s_UnitSystem] := Unit[LuminousFlux[u, s]/Area[u, s]]; +Luminance[u_UnitSystem, s_UnitSystem] := Unit[LuminousIntensity[u, s]/Area[u, s]]; 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]]; @@ -253,14 +258,15 @@ Map[(#[u_UnitSystem] := #[u, Universe[u]]) &, {CosmologicalConstant, AvogadroCon 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]; -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; +GaussianGravitationalConstant[u_UnitSystem, c_Couling] = Sqrt[GravitationalConstant[u,c]] +EinsteinConstantSpeedOfLightSquared[u_UnitSystem, c_Coupling] := (2 Spat[u] GravitationalConstant[u, c])/SpeedOfLight[u, c]^2; +EinsteinConstantSpeedOfLightToTheFourth[u_UnitSystem, c_Coupling] := (2 Spat[u] GravitationalConstant[u, c])/SpeedOfLight[u, c]^4; MolarGasConstant[u_UnitSystem, c_Coupling] := BoltzmannConstant[u, c] AvogadroConstant[u, c]; -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); +StefanBoltzmannConstant[u_UnitSystem, c_Coupling] := (MM[Turn[u]]^4/2^5 Spat[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]/SphereAngle[u]/ ElectricConstant[u]; -BiotSavartConstant[u_UnitSystem, c_Coupling] := MagneticConstant[u, c] LorentzConstant[u] (RationalizationConstant[u]/SphereAngle[u]); +CoulombConstant[u_UnitSystem, c_Coupling] := RationalizationConstant[u]/Spat[u]/ ElectricConstant[u]; +BiotSavartConstant[u_UnitSystem, c_Coupling] := MagneticConstant[u, c] LorentzConstant[u] (RationalizationConstant[u]/Spat[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]; @@ -268,9 +274,8 @@ JosephsonConstant[u_UnitSystem, c_Coupling] := 2 ElementaryCharge[u, c] LorentzC MagneticFluxQuantum[u_UnitSystem, c_Coupling] := 1/JosephsonConstant[u, c]; VonKlitzingConstant[u_UnitSystem, c_Coupling] := PlanckConstant[u, c]/ElementaryCharge[u, c]^2; ConductanceQuantum[u_UnitSystem, c_Coupling] := (2 ElementaryCharge[u, c]^2)/PlanckConstant[u, c]; -HartreeEnergy[u_UnitSystem, c_Coupling] := ElectronMass[u, c] (SpeedOfLight[u, c] FineStructureConstant[c])^2; +HartreeEnergy[u_UnitSystem, c_Coupling] := ElectronMass[u, c]/GravityConstant[u] (SpeedOfLight[u, c] FineStructureConstant[c])^2; RydbergConstant[u_UnitSystem, c_Coupling] := HartreeEnergy[u, c]/(2 PlanckConstant[u, c])/SpeedOfLight[u, c]; -BohrRadius[u_UnitSystem, c_Coupling] := ReducedPlanckConstant[u, c]/ElectronMass[u, c]/SpeedOfLight[u, c]/FineStructureConstant[c]; -RelativisticBohrRadius[u_UnitSystem, c_Coupling] := BohrRadius[u, c] (1 + 1/ProtonElectronMassRatio[c]); +BohrRadius[u_UnitSystem, c_Coupling] := ReducedPlanckConstant[u, c] GravityConstant[u]/ElectronMass[u, c]/SpeedOfLight[u, c]/FineStructureConstant[c]; ClassicalElectronRadius[u_UnitSystem, c_Coupling] := FineStructureConstant[c] ReducedPlanckConstant[u, c]/ElectronMass[u, c]/SpeedOfLight[u, c]; -BohrMagneton[u_UnitSystem, c_Coupling] := ElementaryCharge[u, c] ReducedPlanckConstant[u, c] LorentzConstant[u]/2 ElectronMass[u, c]; +BohrMagneton[u_UnitSystem, c_Coupling] := ReducedPlanckConstant[u, c] GravityConstant[u]/ElectronMass[u, c]/SpeedOfLight[u]/FineStructureConstant[c]; diff --git a/Kernel/standards.wl b/Kernel/standards.wl new file mode 100644 index 0000000..71004c5 --- /dev/null +++ b/Kernel/standards.wl @@ -0,0 +1,446 @@ + +(* 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 *) + +Pre = <| +"deka" -> 10, +"hecto" -> 10^2, +"kilo" -> 10^3, +"mega" -> 10^6, +"giga" -> 10^9, +"tera" -> 10^12, +"peta" -> 10^15, +"exa" -> 10^18, +"zetta" -> 10^21, +"yotta" -> 10^24, +"deci" -> 10^-1, +"centi" -> 10^-2, +"milli" -> 10^-3, +"micro" -> 10^-6, +"nano" -> 10^-9, +"pico" -> 10^-12, +"femto" -> 10^-15, +"atto" -> 10^-18, +"zepto" -> 10^-21, +"yocto" -> 10^-24, +"byte" -> 2^3, +"kibi" -> 2^10, +"mebi" -> 2^20, +"gibi" -> 2^30, +"tebi" -> 2^40, +"pebi" -> 2^50, +"exbi" -> 2^60, +"zebi" -> 2^70, +"yobi" -> 2^80|> + +(*hyperfine,cosmological,lunarmass,gaussianyear,sidereralyear,atmosphere,loschmidt,amagat,wienwavelength,wienfrequency,mechanicalheat,lunardistance,year,lightyear,inchmercury,torr,earthcalorie,thermalunit,gasgallon,tonsrefrigeration,boilerhorsepower,mpge,celsius,sealevel,boiling,darcy,bubnoff,roentgen,electronvolt*) + +StandardUnits = <| +"HubbleParameter" -> Measure[1,d1/dT,"Hubble"], +"SolarMass" -> Measure[1,dM,"IAU"], +"EarthMass" -> Measure[1,dM,"IAUE"], +"JupiterMass" -> Measure[1,dM,"IAUJ"], +"GForce" -> Measure[1,USQ[SpecificForce],"English"], +"Radian" -> Measure[1,dA,"MetricEngineering"], +"Steradian" -> Measure[1,dA^2,"MetricEngineering"], +"Degree" -> Measure[Pi/180,dA,"MetricEngineering"], +"Gradian" -> Measure[Pi/200,dA,"MetricEngineering"], +"ArcMinute" -> Measure[Pi/180/60,dA,"MetricEngineering"], +"ArcSecond" -> Measure[Pi/180/60^2,dA,"MetricEngineering"], +"Meter" -> Measure[1,dL,"Metric"], +"Angstrom" -> Measure[Pre["hecto"] Pre["pico"],dL,"Metric"], +"Inch" -> Measure[1,dL,"IPS"], +"Foot" -> Measure[1,dL,"English"], +"SurveyFoot" -> Measure[1,dL,"Survey"], +"Yard" -> Measure[3,dL,"English"], +"Mile" -> Measure[2^5 3 5 11, dL, "English"], +"StatuteMile" -> Measure[2^5 3 5 11, dL, "Survey"], +"EarthRadius" -> Sqrt[Measure[1, dM, "IAUE"]["Metric"] GravitationalConstant["Metric"]/Measure[1, USQ[SpecificForce], "English"]["Metric"]], +"GreatCircle" -> 2 Pi Sqrt[Measure[1, dM, "IAUE"]["Metric"] GravitationalConstant["Metric"]/Measure[1, USQ[SpecificForce], "English"]["Metric"]], +"EarthMeter" -> Measure[1,dL,"Meridian"], +"NauticalMile" -> Measure[1,dL,"Nautical"], +"AdmiraltyMile" -> Measure[2^6 5 19,dL,"English"], +"MeridianMile" -> Measure[2^4 5^5/3^3,dL,"Metric"], +"AstronomicalUnit" -> Measure[1,dL,"IAU"], +"ParSec" -> Measure[2^6 3^4 5^3/Pi,dL,"IAU"], +"Second" -> Measure[1,dT,"Metric"], +"Minute" -> Measure[60,dT,"Metric"], +"Hour" -> Measure[60^2,dT,"Metric"], +"Day" -> Measure[1,dT,"IAU"], +"RadarMile" -> Measure[2,dL,"Nautical"]/SpeedOfLight["Nautical"], +"Barn" -> Measure[10^-28,dL^2,"Metric"], +"Hectare" -> Measure[Pre["hecto"] Pre["hecto"],dL^2,"Metric"], +"Acre" -> Measure[2^-7/5,dL^2,"MPH"], +"SurveyAcre" -> Measure[2^3 3^2 5 11^2,dL^2,"Survey"], +"Gallon" -> Measure[3 7 11,dL^3,"IPS"], +"Liter" -> Measure[10^-3,dL^3,"Metric"], +"Quart" -> Measure[3 7 11/4,dL^3,"IPS"], +"Pint" -> Measure[3 7 11/8,dL^3,"IPS"], +"Cup" -> Measure[3 7 11/16,dL^3,"IPS"], +"FluidOunce" -> Measure[3 7 11/2^7,dL^3,"IPS"], +"TeaSpoon" -> Measure[5/10^3,dL^3,"Metric"], +"TableSpoon" -> Measure[15/10^3,dL^3,"Metric"], +"Gram" -> Measure[10^-3,dM,"Metric"], +"EarthGram" -> Measure[10^-3,dM,"Meridian"], +"Kilogram" -> Measure[1,dM,"Metric"], +"Tonne" -> Measure[10^3,dM,"Metric"], +"Ton" -> Measure[2 10^3,dM,"English"], +"Pound" -> Measure[1,dM,"English"], +"Ounce" -> Measure[2^-4,dM,"English"], +"Grain" -> Measure[10^-3/7,dM,"English"], +"Slug" -> Measure[1,dM,"British"], +"Slinch" -> Measure[1,dM,"IPS"], +"Hyl" -> Measure[1,dM,"GravitationalMetric"], +"Dyne" -> Measure[1,dF,"Gauss"], +"Newton" -> Measure[1,dF,"Metric"], +"Poundal" -> Measure[1,dF,"FPS"], +"Kilopond" -> Measure[1,dF,"MetricEngineering"], +"PoundForce" -> Measure[1,dF,"English"], +"Psi" -> Measure[1,USQ[Pressure],"IPS"], +"Bar" -> Measure[10^5,USQ[Pressure],"Metric"], +"Barye" -> Measure[1,USQ[Pressure],"Gauss"], +"Pascal" -> Measure[1,USQ[Pressure],"Metric"], +"TechnicalAtmosphere" -> Measure[10^-4,USQ[Pressure],"MetricEngineering"], +"Erg" -> Measure[1,USQ[Energy],"Gauss"], +"Joule" -> Measure[1,USQ[Energy],"Metric"], +"FootPound" -> Measure[1,USQ[Energy],"English"], +"MeanCalorie" -> Measure[2^2 5 3^2/43,USQ[Energy],"InternationalMean"], +"KiloCalorie" -> Measure[2^5 5^4 3^2/43,USQ[Energy],"International"], +"Calorie" -> Measure[2^2 5 3^2/43,USQ[Energy],"International"], +"TonTNT" -> Measure[Pre["giga"] 2^2 5 3^2/43,USQ[Energy],"International"], +"Watt" -> Measure[1,USQ[Power],"Metric"], +"HorsePower" -> Measure[2 5^2 11,USQ[Power],"British"], +"HorsePowerWatt" -> Measure[Pi 2^5 3^3/5,USQ[Power],"British"], +"HorsePowerMetric" -> Measure[75,USQ[Power],"GravitationalMetric"], +"ElectricalHorsePower" -> Measure[746,USQ[Power],"Metric"], +"Coulomb" -> Measure[1,dQ,"Metric"], +"Ampere" -> Measure[1,USQ[ElectricCurrent],"Metric"], +"Volt" -> Measure[1,USQ[ElectricPotential],"Metric"], +"Henry" -> Measure[1,USQ[MagneticInductance],"Metric"], +"Ohm" -> Measure[1,USQ[ElectricResistance],"Metric"], +"Siemens" -> Measure[1,USQ[ElectricConductance],"Metric"], +"Farad" -> Measure[1,USQ[ElectricCapacitance],"Metric"], +"Weber" -> Measure[1,USQ[MagneticFlux],"Metric"], +"Tesla" -> Measure[1,USQ[MagneticFluxDensity],"Metric"], +"StatCoulomb" -> Measure[1,dQ,"ESU"], +"StatAmpere" -> Measure[1,USQ[ElectricCurrent],"ESU"], +"StatVolt" -> Measure[1,USQ[ElectricPotential],"ESU"], +"StatHenry" -> Measure[1,USQ[MagneticInductance],"ESU"], +"StatOhm" -> Measure[1,USQ[ElectricResistance],"ESU"], +"StatSiemens" -> Measure[1,USQ[ElectricConductance],"ESU"], +"StatFarad" -> Measure[1,USQ[ElectricCapacitance],"ESU"], +"StatWeber" -> Measure[1,USQ[MagneticFlux],"ESU"], +"StatTesla" -> Measure[1,USQ[MagneticFluxDensity],"ESU"], +"AbCoulomb" -> Measure[1,dQ,"EMU"], +"AbAmpere" -> Measure[1,USQ[ElectricCurrent],"EMU"], +"AbVolt" -> Measure[1,USQ[ElectricPotential],"EMU"], +"AbHenry" -> Measure[1,USQ[MagneticInductance],"EMU"], +"AbOhm" -> Measure[1,USQ[ElectricResistance],"EMU"], +"AbSiemens" -> Measure[1,USQ[ElectricConductance],"EMU"], +"AbFarad" -> Measure[1,USQ[ElectricCapacitance],"EMU"], +"Maxwell" -> Measure[1,USQ[MagneticFlux],"EMU"], +"Gauss" -> Measure[1,USQ[MagneticFluxDensity],"EMU"], +"Oersted" -> Measure[1,USQ[MagneticFieldStrength],"EMU"], +"Gilberg" -> Measure[1/4/Pi,dQ/dA,"EMU"], +"EarthCoulomb" -> Measure[1,dQ,"Meridian"], +"Kelvin" -> Measure[1,d0,"Metric"], +"Rankine" -> Measure[1,d0,"English"], +"Fahrenheit" -> Measure[45967/100,d0,"English"], +"Mole" -> Measure[1,dN,"Metric"], +"EarthMole" -> Measure[1,dN,"Meridian"], +"PoundMole" -> Measure[1,dN,"English"], +"SlugMole" -> Measure[1,dN,"British"], +"SlinchMole" -> Measure[1,dN,"IPS"], +"Lumen" -> Measure[1,USQ[LuminousFlux],"Metric"], +"Candela" -> Measure[1,USQ[LuminousIntensity],"Metric"], +"Lux" -> Measure[1,USQ[Illuminance],"Metric"], +"Phot" -> Measure[1,USQ[Illuminance],"Gauss"], +"FootCandle" -> Measure[1,USQ[Illuminance],"English"], +"Nit" -> Measure[1,USQ[Luminance],"Metric"], +"Apostilb" -> Measure[1/Pi,USQ[Luminance],"Metric"], +"Stilb" -> Measure[1,USQ[Luminance],"Gauss"], +"Lambert" -> Measure[1/Pi,USQ[Luminance],"Gauss"], +"FootLambert" -> Measure[1/Pi,USQ[Luminance],"English"], +"Bril" -> Measure[Pre["centi"] Pre["nano"]/Pi,USQ[Luminance],"Gauss"], +"Hertz" -> Measure[1,d1/dT,"Metric"], +"RPM" -> Measure[1/60,d1/dT,"Metric"], +"Galileo" -> Measure[1,USQ[SpecificForce],"Gauss"], +"Eotvos" -> Measure[Pre["nano"],USQ[SpecificForce]/dL,"Gauss"], +"Poise" -> Measure[1,USQ[DynamicViscosity],"Gauss"], +"Reyn" -> Measure[1,USQ[DynamicViscosity],"IPS"], +"Diopter" -> Measure[1,d1/dL,"Metric"], +"Kayser" -> Measure[1,d1/dL,"Gauss"], +"Stokes" -> Measure[1,USQ[KinematicViscosity],"Gauss"], +"Katal" -> Measure[1,USQ[Catalysis],"Metric"], +"Curie" -> Measure[37 Pre["giga"],d1/dT,"Metric"], +"Sievert" -> Measure[1,USQ[Energy]/dM,"Metric"], +"REM" -> Measure[1/100,USQ[Energy]/dM,"Metric"], +"Rayl" -> Measure[1,USQ[SpecificAcousticImpedance],"Metric"], +"Langley" -> Measure[2^2 5 3^2/43,USQ[Energy],"International"]/Measure[10^-4,dL^2,"Metric"], +"Jansky" -> Measure[10^-26,USQ[EnergyPerArea],"Metric"], +"SolarFlux" -> Measure[10^-22,USQ[EnergyPerArea],"Metric"]|> + + + +(*Map[( +transformBoxes[transform[#,USQ[Frequency]],#] := "Hz"; +transformBoxes[transform[#,USQ[FrequencyDrift]],#] := "Hz"/"s"; +transformBoxes[transform[#,USQ[Illuminance]],#] := "lx"; +transformBoxes[transform[#,USQ[LuminousExposure]],#] := "lx" "s"; +transformBoxes[#,USQ[Luminance]] := "nt"; +) &, {"MetricEngineering","SI2019Engineering","GravitationalMetric","GravitationalSI2019"}] + +Map[( +transformBoxes[transform[#,USQ[SpecificForce]],#] := "g0"; +) &, {"MetricEngineering","SI2019Engineering","MeridianEngineering","English","Survey"}] + +Map[( +transformBoxes[transform[#,USQ[Frequency]],#] := "Hz"; +transformBoxes[transform[#,USQ[FrequencyDrift]],#] := "Hz"/"s"; +transformBoxes[transform[#,USQ[Force]],#] := "N"; +transformBoxes[transform[#,d1/USQ[Force]],#] := 1/"N"; +transformBoxes[transform[#,USQ[Pressure]],#] := "Pa"; +transformBoxes[transform[#,USQ[Compressibility]],#] := 1/"Pa"; +transformBoxes[transform[#,USQ[Energy]],#] := "J"; +transformBoxes[transform[#,d1/USQ[Energy]],#] := 1/"J"; +transformBoxes[transform[#,USQ[Power]],#] := "W"; +transformBoxes[transform[#,d1/USQ[Power]],#] := 1/"W"; + +transformBoxes[transform[#,USQ[ElectricPotential]],#] := "V"; +transformBoxes[transform[#,d1/USQ[ElectricPotential]],#] := 1/"V"; +transformBoxes[transform[#,USQ[ElectricCapacitance]],#] := "F"; +transformBoxes[transform[#,d1/USQ[ElectricCapacitance]],#] := 1/"F"; +transformBoxes[transform[#,USQ[ElectricResistance]],#] := "\[Omega]"; +transformBoxes[transform[#,USQ[ElectricConductance]],#] := "S"; +transformBoxes[transform[#,USQ[MagneticFlux]],#] := "Wb"; +transformBoxes[transform[#,d1/USQ[MagneticFlux]],#] := "Hz"/"V"; +transformBoxes[transform[#,USQ[MagneticFluxDensity]],#] := "T"; +transformBoxes[transform[#,d1/USQ[MagneticFluxDensity]],#] := 1/"T"; +transformBoxes[transform[#,USQ[MagneticPermeance]],#] := "H"; +transformBoxes[transform[#,USQ[MagneticReluctance]],#] := 1/"H"; + +transformBoxes[transform[#,USQ[Catalysis]],#] := "kat"; +transformBoxes[transform[#,USQ[MolarEnergy]],#] := "J"/"mol"; +transformBoxes[transform[#,USQ[MolarEntropy]],#] := "J"/"K"/"mol"; + +transformBoxes[transform[#,USQ[LuminousEfficacyOfRadiation]],#] := "lm"/"W"; +transformBoxes[transform[#,d1/USQ[LuminousEfficacyOfRadiation]],#] := "W"/"lm"; +transformBoxes[transform[#,USQ[LuminousIntensity]],#] := "cd"; +transformBoxes[transform[#,USQ[Illuminance]],#] := "lx"; +transformBoxes[transform[#,USQ[LuminousExposure]],#] := "lx" "s"; +transformBoxes[#,USQ[Luminance]] := "nt"; + +transformBoxes[transform[#,USQ[AngularMomentum]],#] := "J" "s"; +transformBoxes[transform[#,USQ[Action] USQ[Speed]],#] := "J" "m"; +transformBoxes[transform[#,USQ[Impulse]],#] := "N" "s"; +transformBoxes[transform[#,USQ[ForceOnsetRate]],#] := "N"/"s"; +transformBoxes[transform[#,USQ[EnergyPerArea]],#] := "N"/"m"; +transformBoxes[transform[#,USQ[Compliance]],#] := "m"/"N"; + +transformBoxes[transform[#,USQ[DynamicViscosity]],#] := "Pa" "s"; +transformBoxes[transform[#,USQ[Irradiance]],#] := "W"/"m"^2; +transformBoxes[transform[#,USQ[PowerDensity]],#] := "W"/"m"^3; +transformBoxes[transform[#,USQ[Irradiance]/d0^4],#] := "W"/"m"^2/"K"^4; +transformBoxes[transform[#,USQ[Pressure]/d0^4],#] := "J"/"m"^3/"K"^4; +transformBoxes[transform[#,d1/dT/d0],#] := "Hz"/"K"; +transformBoxes[transform[#,USQ[Entropy]/dQ],#] := "V"/"K"; +transformBoxes[transform[#,USQ[Entropy]],#] := "J"/"K"; +transformBoxes[transform[#,USQ[SpecificEntropy]],#] := "J"/"K"/"kg"; +transformBoxes[transform[#,USQ[SpecificEnergy]],#] := "J"/"kg"; +transformBoxes[transform[#,USQ[ThermalConductivity]],#] := "W"/"m"/"K"; +transformBoxes[transform[#,USQ[ThermalConductance]],#] := "W"/"K"; +transformBoxes[transform[#,USQ[ThermalResistance]],#] := "K"/"W"; +transformBoxes[transform[#,USQ[ThermalResistivity]],#] := "K" "m"/"W"; +transformBoxes[transform[#,USQ[MolarConductivity]],#] := "S" "m"^2/"mol"; + +transformBoxes[transform[#,USQ[ElectricPotential]/dM],#] := "V"/"kg"; +transformBoxes[transform[#,USQ[ElectricPotential] dL],#] := "V" "m"; +transformBoxes[transform[#,USQ[ElectricFieldStrength]],#] := "V"/"m"; +transformBoxes[transform[#,USQ[ElectricPermittivity]],#] := "F"/"m"; +transformBoxes[transform[#,d1/USQ[ElectricPermittivity]],#] := "m"/"F"; +transformBoxes[transform[#,USQ[MagneticPermeability]],#] := "H"/"m"; +transformBoxes[transform[#,d1/USQ[MagneticPermeability]],#] := "m"/"H"; +transformBoxes[transform[#,USQ[Resistivity]],#] := "\[Omega]" "m"; +transformBoxes[transform[#,USQ[Conductivity]],#] := "S"/"m"; +transformBoxes[transform[#,USQ[MagneticDipoleMoment]],#] := "J"/"T"; +transformBoxes[transform[#,USQ[MagneticVectorPotential]],#] := "Wb"/"m"; +transformBoxes[transform[#,USQ[MagneticMoment]],#] := "Wb" "m"; +transformBoxes[transform[#,USQ[ElectricalMobility]],#] := "m"^2/"s"/"V"; +) &, {"Metric","SI2019","CODATA","Conventional","International","InternationalMean"}] + +transformBoxes[transform["Meridian",USQ[Frequency]],"Meridian"] := "Hz"; +transformBoxes[transform["Meridian",USQ[FrequencyDrift]],"Meridian"] := "Hz"/"s"; +transformBoxes[transform["Meridian",USQ[Force]],"Meridian"] := "eN"; +transformBoxes[transform["Meridian",d1/USQ[Force]],"Meridian"] := 1/"eN"; +transformBoxes[transform["Meridian",USQ[Pressure]],"Meridian"] := "ePa"; +transformBoxes[transform["Meridian",USQ[Compressibility]],"Meridian"] := 1/"ePa"; +transformBoxes[transform["Meridian",USQ[Energy]],"Meridian"] := "eJ"; +transformBoxes[transform["Meridian",d1/USQ[Energy]],"Meridian"] := 1/"eJ"; +transformBoxes[transform["Meridian",USQ[Power]],"Meridian"] := "eW"; +transformBoxes[transform["Meridian",d1/USQ[Power]],"Meridian"] := 1/"eW"; + +transformBoxes[transform["Meridian",USQ[ElectricPotential]],"Meridian"] := "eV"; +transformBoxes[transform["Meridian",d1/USQ[ElectricPotential]],"Meridian"] := 1/"eV"; +transformBoxes[transform["Meridian",USQ[ElectricCapacitance]],"Meridian"] := "eF"; +transformBoxes[transform["Meridian",d1/USQ[ElectricCapacitance]],"Meridian"] := 1/"eF"; +transformBoxes[transform["Meridian",USQ[ElectricResistance]],"Meridian"] := "e\[Omega]"; +transformBoxes[transform["Meridian",USQ[ElectricConductance]],"Meridian"] := "eS"; +transformBoxes[transform["Meridian",USQ[MagneticFlux]],"Meridian"] := "eWb"; +transformBoxes[transform["Meridian",d1/USQ[MagneticFlux]],"Meridian"] := "Hz"/"eV"; +transformBoxes[transform["Meridian",USQ[MagneticFluxDensity]],"Meridian"] := "eT"; +transformBoxes[transform["Meridian",d1/USQ[MagneticFluxDensity]],"Meridian"] := 1/"eT"; +transformBoxes[transform["Meridian",USQ[MagneticPermeance]],"Meridian"] := "eH"; +transformBoxes[transform["Meridian",USQ[MagneticReluctance]],"Meridian"] := 1/"eH"; + +transformBoxes[transform["Meridian",USQ[Catalysis]],"Meridian"] := "ekat"; +transformBoxes[transform["Meridian",USQ[MolarEnergy]],"Meridian"] := "eJ"/"eg-mol"; +transformBoxes[transform["Meridian",USQ[MolarEntropy]],"Meridian"] := "eJ"/"K"/"eg-mol"; + +transformBoxes[transform["Meridian",USQ[LuminousEfficacyOfRadiation]],"Meridian"] := "lm"/"eW"; +transformBoxes[transform["Meridian",d1/USQ[LuminousEfficacyOfRadiation]],"Meridian"] := "eW"/"lm"; +transformBoxes[transform["Meridian",USQ[LuminousIntensity]],"Meridian"] := "cd"; +transformBoxes[transform["Meridian",USQ[Illuminance]],"Meridian"] := "lx"; +transformBoxes[transform["Meridian",USQ[LuminousExposure]],"Meridian"] := "lx" "s"; +transformBoxes[USQ[Luminance],"Meridian"] := "nt"; + +transformBoxes[transform["Meridian",USQ[AngularMomentum]],"Meridian"] := "eJ" "s"; +transformBoxes[transform["Meridian",USQ[Action] USQ[Speed]],"Meridian"] := "eJ" "em"; +transformBoxes[transform["Meridian",USQ[Impulse]],"Meridian"] := "eN" "s"; +transformBoxes[transform["Meridian",USQ[ForceOnsetRate]],"Meridian"] := "eN"/"s"; +transformBoxes[transform["Meridian",USQ[EnergyPerArea]],"Meridian"] := "eN"/"em"; +transformBoxes[transform["Meridian",USQ[Compliance]],"Meridian"] := "em"/"eN"; + +transformBoxes[transform["Meridian",USQ[DynamicViscosity]],"Meridian"] := "ePa" "s"; +transformBoxes[transform["Meridian",USQ[Irradiance]],"Meridian"] := "eW"/"em"^2; +transformBoxes[transform["Meridian",USQ[PowerDensity]],"Meridian"] := "eW"/"em"^3; +transformBoxes[transform["Meridian",USQ[Irradiance]/d0^4],"Meridian"] := "eW"/"em"^2/"K"^4; +transformBoxes[transform["Meridian",USQ[Pressure]/d0^4],"Meridian"] := "eJ"/"em"^3/"K"^4; +transformBoxes[transform["Meridian",d1/dT/d0],"Meridian"] := "Hz"/"K"; +transformBoxes[transform["Meridian",USQ[Entropy]/dQ],"Meridian"] := "eV"/"K"; +transformBoxes[transform["Meridian",USQ[Entropy]],"Meridian"] := "eJ"/"K"; +transformBoxes[transform["Meridian",USQ[SpecificEntropy]],"Meridian"] := "eJ"/"K"/"keg"; +transformBoxes[transform["Meridian",USQ[SpecificEnergy]],"Meridian"] := "eJ"/"keg"; +transformBoxes[transform["Meridian",USQ[ThermalConductivity]],"Meridian"] := "eW"/"em"/"K"; +transformBoxes[transform["Meridian",USQ[ThermalConductance]],"Meridian"] := "eW"/"K"; +transformBoxes[transform["Meridian",USQ[ThermalResistance]],"Meridian"] := "K"/"eW"; +transformBoxes[transform["Meridian",USQ[ThermalResistivity]],"Meridian"] := "K" "em"/"eW"; +transformBoxes[transform["Meridian",USQ[MolarConductivity]],"Meridian"] := "eS" "em"^2/"eg-mol"; + +transformBoxes[transform["Meridian",USQ[ElectricPotential]/dM],"Meridian"] := "eV"/"keg"; +transformBoxes[transform["Meridian",USQ[ElectricPotential] dL],"Meridian"] := "eV" "em"; +transformBoxes[transform["Meridian",USQ[ElectricFieldStrength]],"Meridian"] := "eV"/"em"; +transformBoxes[transform["Meridian",USQ[ElectricPermittivity]],"Meridian"] := "eF"/"em"; +transformBoxes[transform["Meridian",d1/USQ[ElectricPermittivity]],"Meridian"] := "em"/"eF"; +transformBoxes[transform["Meridian",USQ[MagneticPermeability]],"Meridian"] := "eH"/"em"; +transformBoxes[transform["Meridian",d1/USQ[MagneticPermeability]],"Meridian"] := "em"/"eH"; +transformBoxes[transform["Meridian",USQ[Resistivity]],"Meridian"] := "e\[Omega]" "em"; +transformBoxes[transform["Meridian",USQ[Conductivity]],"Meridian"] := "eS"/"em"; +transformBoxes[transform["Meridian",USQ[MagneticDipoleMoment]],"Meridian"] := "eJ"/"eT"; +transformBoxes[transform["Meridian",USQ[MagneticVectorPotential]],"Meridian"] := "eWb"/"em"; +transformBoxes[transform["Meridian",USQ[MagneticMoment]],"Meridian"] := "eWb" "em"; +transformBoxes[transform["Meridian",USQ[ElectricalMobility]],"Meridian"] := "em"^2/"s"/"eV"; + +Map[( +transformBoxes[transform[#,USQ[Frequency]],#] := "Hz"; +transformBoxes[transform[#,USQ[Force]],#] := "dyn"; +transformBoxes[transform[#,d1/USQ[Force]],#] := 1/"dyn"; +transformBoxes[transform[#,USQ[SpecificForce]],#] := "gal"; +transformBoxes[transform[#,USQ[SpecificForce]/dL],#] := "gal"/"cm"; +transformBoxes[transform[#,USQ[Pressure]],#] := "Ba"; +transformBoxes[transform[#,USQ[Compressibility]],#] := 1/"Ba"; +transformBoxes[transform[#,USQ[Energy]],#] := "erg"; +transformBoxes[transform[#,d1/USQ[Energy]],#] := 1/"erg"; +transformBoxes[transform[#,USQ[Power]],#] := "erg"/"s"; +transformBoxes[transform[#,d1/USQ[Power]],#] := "s"/"erg"; + +transformBoxes[transform[#,USQ[Catalysis]],#] := "kat"; +transformBoxes[transform[#,USQ[MolarEnergy]],#] := "erg"/"mol"; +transformBoxes[transform[#,USQ[MolarEntropy]],#] := "erg"/"K"/"mol"; + +transformBoxes[transform[#,USQ[LuminousEfficacyOfRadiation]],#] := "lm" "s"/"erg"; +transformBoxes[transform[#,d1/USQ[LuminousEfficacyOfRadiation]],#] := "erg"/"s"/"lm"; +transformBoxes[transform[#,USQ[LuminousIntensity]],#] := "cd"; +transformBoxes[transform[#,USQ[Illuminance]],#] := "ph"; +transformBoxes[#,USQ[Luminance]] := "sb"; + +transformBoxes[transform[#,USQ[AngularMomentum]],#] := "erg" "s"; +transformBoxes[transform[#,USQ[Action] USQ[Speed]],#] := "erg" "cm"; +transformBoxes[transform[#,USQ[Impulse]],#] := "dyn" "s"; +transformBoxes[transform[#,USQ[ForceOnsetRate]],#] := "dyn"/"s"; +transformBoxes[transform[#,USQ[EnergyPerArea]],#] := "dyn"/"cm"; +transformBoxes[transform[#,USQ[Compliance]],#] := "cm"/"dyn"; + +transformBoxes[transform[#,USQ[DynamicViscosity]],#] := "P"; +transformBoxes[transform[#,USQ[KinematicViscosity]],#] := "St"; +transformBoxes[transform[#,USQ[Irradiance]],#] := "erg"/"s"/"cm"^2; +transformBoxes[transform[#,USQ[PowerDensity]],#] := "erg"/"s"/"cm"^3; +transformBoxes[transform[#,USQ[Irradiance]/d0^4],#] := "erg"/"s"/"cm"^2/"K"^4; +transformBoxes[transform[#,USQ[Pressure]/d0^4],#] := "Ba"/"K"^4; +transformBoxes[transform[#,d1/dT/d0],#] := "Hz"/"K"; +transformBoxes[transform[#,USQ[Entropy]],#] := "erg"/"K"; +transformBoxes[transform[#,USQ[SpecificEntropy]],#] := "erg"/"K"/"g"; +transformBoxes[transform[#,USQ[SpecificEnergy]],#] := "erg"/"g"; +transformBoxes[transform[#,USQ[ThermalConductivity]],#] := "erg"/"s"/"cm"/"K"; +transformBoxes[transform[#,USQ[ThermalConductance]],#] := "erg"/"s"/"K"; +transformBoxes[transform[#,USQ[ThermalResistance]],#] := "K" "s"/"erg"; +transformBoxes[transform[#,USQ[ThermalResistivity]],#] := "K" "cm" "s"/"erg"; +) &, {"Gauss", "EMU", "ESU", "LorentzHeaviside"}] + +transformBoxes[transform["EMU",USQ[ElectricCurrent]],"EMU"] := "Bi"; +transformBoxes[transform["EMU",USQ[MagneticFlux]],"EMU"] := "Mx"; +transformBoxes[transform["EMU",USQ[MagneticFluxDensity]],"EMU"] := "G"; +transformBoxes[transform["EMU",USQ[MagneticFieldStrength]],"EMU"] := "Oe"; +transformBoxes[transform["EMU",USQ[MagneticReluctance]],"EMU"] := "Bi"/"Mx"; +transformBoxes[transform["EMU",USQ[MagneticDipoleMoment]],"EMU"] := "erg"/"G"; +transformBoxes[transform["EMU",USQ[MagneticVectorPotential]],"EMU"] := "Mx"/"cm"; +transformBoxes[transform["EMU",USQ[MagneticMoment]],"EMU"] := "Mx" "cm"; +transformBoxes[transform["EMU",USQ[MagneticPoleStrength]],"EMU"] := "pole"; + +transformBoxes[transform["Gauss",USQ[ElectricCharge]],"Gauss"] := "Fr"; +transformBoxes[transform["Gauss",USQ[MagneticFlux]],"Gauss"] := "Mx"; +transformBoxes[transform["Gauss",USQ[MagneticFluxDensity]],"Gauss"] := "G"; +transformBoxes[transform["Gauss",USQ[MagneticFieldStrength]],"Gauss"] := "Oe"; +transformBoxes[transform["Gauss",USQ[MagneticReluctance]],"Gauss"] := "Fr"/"s"/"Mx"; +transformBoxes[transform["Gauss",USQ[MagneticDipoleMoment]],"Gauss"] := "erg"/"G"; +transformBoxes[transform["Gauss",USQ[MagneticVectorPotential]],"Gauss"] := "Mx"/"cm"; +transformBoxes[transform["Gauss",USQ[MagneticMoment]],"Gauss"] := "Mx" "cm"; + +transformBoxes[transform["MTS",USQ[Force]],"MTS"] := "sn"; +transformBoxes[transform["MTS",d1/USQ[Force]],"MTS"] := 1/"sn"; +transformBoxes[transform["MTS",USQ[Pressure]],"MTS"] := "p"; +transformBoxes[transform["MTS",USQ[Compressibility]],"MTS"] := 1/"pz"; + +transformBoxes[transform["GravitationalMetric",USQ[Mass]],"GravitationalMetric"] := "hyl"; +transformBoxes[transform["GravitationalSI2019",USQ[Mass]],"GravitationalSI2019"] := "hyl"; +transformBoxes[transform["GravitationalMeridian",USQ[Mass]],"GravitationalMeridian"] := "ehyl"; +transformBoxes[transform["British",USQ[Mass]],"British"] := "slug"; +transformBoxes[transform["IPS",USQ[Mass]],"IPS"] := "slinch"; +transformBoxes[transform["FPS",USQ[Force]],"FPS"] := "pdl"; +transformBoxes[transform["FPS",USQ[Pressure]],"FPS"] := "pdl"/"ft"^2; +(*transformBoxes[transform["British",USQ[Density]],"British"] := "slug"/"ft"^3; +transformBoxes[transform["IPS",USQ[Density]],"IPS"] := "slinch"/"in"^3; +transformBoxes[transform["GravitationalMetric",USQ[Density]],"GravitationalMetric"] := "hyl"/"m"^3; +transformBoxes[transform["GravitationalSI2019",USQ[Density]],"GravitationalSI2019"] := "hyl"/"m"^3; +transformBoxes[transform["GravitationalMeridian",USQ[Density]],"GravitationalMeridian"] := "ehyl"/"m"^3;*) + +Map[( +transformBoxes[transform[#,USQ[Frequency]],#] := "Hz"; +transformBoxes[transform[#,USQ[FrequencyDrift]],#] := "Hz"/"s"; +transformBoxes[transform[#,d1/dT/d0],#] := "Hz"/"\[Degree]R"; +) &, {"FPS", "IPS", "British", "English", "Survey"}] + +Map[( +transformBoxes[transform[#,USQ[LuminousIntensity]],#] := "cd"; +transformBoxes[transform[#,USQ[Illuminance]],#] := "fc"; +) &, {"FPS", "British", "English", "Survey"}] +*) diff --git a/Kernel/systems.wl b/Kernel/systems.wl index e4fd9ce..82c4aec 100644 --- a/Kernel/systems.wl +++ b/Kernel/systems.wl @@ -36,15 +36,15 @@ UnitData = <| "GMJ" -> Aronund[1.26686534 10^17, 9 10^9], "day" -> 60^2 24, "aj" -> 36525/100, -"au" -> 149597870700, +"au" -> Around[149597870700, 3], "fur" -> 201168/1000, -"k" -> 1720209895/10^11, +"kG" -> 354818761/10^5, "H0" -> Around[67.66, 0.42], "\[CapitalOmega]\[CapitalLambda]" -> Around[0.6889, 0.0056], "\[CapitalOmega]it" -> 1000495/10^6, "Vit" -> 100033/10^5, "ks" -> 5778/10^4, -"Ts" -> 28816/100, +"T0" -> 27315/100, "inHg" -> 1000/3386389|> AbstractUnitData = <| @@ -55,9 +55,12 @@ 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, +"k" -> "kG" Pi/(2^6 3^4 5^3), +"em" -> Sqrt["GME"/"g0"] Pi/2^8/5^7, +"nm" -> Sqrt["GME"/"g0"] Pi/2^4/3^3/5^2, "pc" -> "au" 3*60^3/Pi|> +AppendTo[AbstractUnitData, "GMsun" -> "au"^3 AbstractUnitData["k"]^2/"day"^2] AppendTo[AbstractUnitData, "\[Alpha]G" -> (AbstractUnitData["me"]/"mP")^2] AppendTo[AbstractUnitData, "G" -> "c" AbstractUnitData["\[HBar]"]/"mP"^2] AppendTo[AbstractUnitData, "Mu" -> "NA" AbstractUnitData["me"]/"\[Mu]eu"] @@ -98,27 +101,28 @@ MeasureSystem[n_,kB_,h_,c_,mu_,me_,Mu_:1,Kcd_:1,a_:1,r_:1,l_:1,g_:1,t_:(2 Pi),u_ 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"]]; +MetricSystem[name_, mu_, perm_, ru_, g0_, h_, mass_] := MeasureSystem[name, ru mass/mu/"\[Mu]eu"/g0, h/2/Pi/g0, "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] +RankineSystem[u_, s_, l_, m_, g0_:1] := EntropySystem[u,s,1,l,m,"\[Degree]R",MM@MagneticConstant[u]/m/l/g0, 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["SI2019Engineering"] := MetricSystem["AbstractSI2019Engineering",AbstractUnitData["Mu"], AbstractUnitData["\[Mu]0"]/"g0", AbstractUnitData["Ru"], "g0"] +MetricSystem["MetricEngineering"] := MetricSystem["AbstractMetricEngineering",1/1000, 4 Pi/10^7/"g0", 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["IPS"] := RankineSystem["AbstractMetric","IPS","ft"/12,"lb" "g0" 12/"ft"] RankineSystem["British"] := RankineSystem["AbstractMetric","British","ft",AbstractUnitData["slug"]] -RankineSystem["British2019"] := RankineSystem["AbstractSI2019","British2019","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["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["English2019"] := RankineSystem["AbstractSI2019","English2019","ft","lb","g0"/"ft"]*) RankineSystem["FPS"] := RankineSystem["AbstractMetric","FPS","ft","lb"] -RankineSystem["FPS2019"] := RankineSystem["AbstractSI2019","FPS2019","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] @@ -134,11 +138,11 @@ 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["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_:1] := + EntropySystem[u, s, time, length, mass, temp, PowerExpand[MM@MagneticConstant[u]/mass/length],MM@MolarMassConstant[u]/mass, MM@GravityConstant[u], PowerExpand[mass length^2/time^2]] 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_] := @@ -146,14 +150,16 @@ EntropySystem[u_, s_, time_, length_, mass_, temp_, perm_, mol_] := 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]] + MeasureSystem[StringJoin["Abstract",s], MM@BoltzmannConstant[u] temp/energy/g0, MM@ReducedPlanckConstant[u]/time/energy/g0, time MM@SpeedOfLight[u]/length, perm, MM@ElectronMass[u]/mass, mol, MM@MonochromaticRadiation540THzLuminousEfficacy[u]*energy/time g0, MM@AngleConstant[u], rat, lor, g0, MM@Turn[u], Universe[u]] -EntropySystem["Astronomical"] := AstronomicalSystem["AbstractMetric","Astronomical"] +(*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["Nautical"] := EntropySystem["AbstractMetric", "Nautical", 60^2, AbstractUnitData["nm"], AbstractUnitData["em"]^3, 1, 27 Pi/2^9/5^12,1/1000] +EntropySystem["Meridian"] := EntropySystem["AbstractMetric", "Meridian", 1, AbstractUnitData["em"], AbstractUnitData["em"]^3, 1, Pi/2^5/5^7,1/1000] +EntropySystem["MeridianEngineering"] := EntropySystem["AbstractMetric", "MeridianEngineering", 1, AbstractUnitData["em"], AbstractUnitData["em"]^3, 1, Pi/2^5/5^7 AbstractUnitData["em"]/"g0",1/1000, "g0"/AbstractUnitData["em"]] +EntropySystem["MPH"] := EntropySystem["AbstractFPS", "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"]] @@ -162,12 +168,13 @@ EntropySystem["IAUJ"] := EntropySystem["AbstractMetric", "IAUJ", "day", "au", "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["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["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] +EntropySystem["GravitationalMeridian"] := EntropySystem["AbstractMetric", "GravitationalMeridian", 1, AbstractUnitData["em"], "g0" AbstractUnitData["em"]^2, 1, Pi/2^5/5^7 AbstractUnitData["em"]/"g0",1/1000] +EntropySystem["FFF"] := EntropySystem["AbstractMetric", "FFF", 14 "day", "fur", 90 "lb", "\[Degree]R", 0, 1] (*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"]] @@ -186,7 +193,8 @@ 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["Planck",x_] := DimensionRules["PlanckGauss", x] /. "Q" -> "M" +DimensionRules["QCDoriginal",x_] := DimensionRules["PlanckGauss", x] /. "Q" -> 1 DimensionRules["NaturalGauss",x_] := DimensionRules["PlanckGauss", x] /. "M" -> 1 DimensionRules["Rydberg",x_] := x //. {"\[CapitalTheta]" -> "M" "L"^2/"T"^2, "T" -> "L"^2 "M"} DimensionRules["Hartree",x_] := DimensionRules["Rydberg", x] /. "M" -> 1 @@ -206,33 +214,36 @@ DimensionSystem["Stoney"] := DimensionRules["Stoney","ISQEM"] DimensionSystem["Electronic"] := DimensionRules["Electronic","Stoney"] DimensionSystem["PlanckGauss"] := DimensionRules["PlanckGauss","Stoney"] DimensionSystem["Planck"] := DimensionRules["Planck","PlanckGauss"] +DimensionSystem["QCDoriginal"] := DimensionRules["QCDoriginal","PlanckGauss"] DimensionSystem["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["ESU2019"] := DimensionSystem["ISQES"]*) DimensionSystem["LorentzHeaviside"] := Dimension["Gauss"] DimensionSystem["HLU"] := DimensionSystem["Gauss"] DimensionSystem["CGS"] := DimensionSystem["Gauss"] DimensionSystem["CGSm"] := DimensionSystem["EMU"] DimensionSystem["CGSe"] := DimensionSystem["ESU"] -DimensionSystem["Thomson"] := DimensionSystem["EMU"] +(*DimensionSystem["Thomson"] := DimensionSystem["EMU"]*) DimensionSystem["Kennelly"] := DimensionSystem["EMU"] DimensionSystem["Schrodinger"] := DimensionSystem["Rydberg"] DimensionSystem["QCD"] := DimensionSystem["Planck"] DimensionSystem["QCDGauss"] := DimensionSystem["PlanckGauss"] -DimensionSystem["QCDoriginal"] := DimensionSystem["PlanckGauss"] DimensionSystem["Cosmological"] := DimensionSystem["Hubble"] DimensionSystem["SI2019Engineering"] := DimensionSystem["MetricEngineering"] +DimensionSystem["MeridianEngineering"] := DimensionSystem["MetricEngineering"] DimensionSystem["GravitationalSI2019"] := DimensionSystem["GravitationalMetric"] +DimensionSystem["GravitationalMeridian"] := DimensionSystem["GravitationalMetric"] +DimensionSystem["IPS"] := DimensionSystem["GravitationalMetric"] DimensionSystem["British"] := DimensionSystem["GravitationalMetric"] -DimensionSystem["British2019"] := DimensionSystem["GravitationalMetric"] +(*DimensionSystem["British2019"] := DimensionSystem["GravitationalMetric"]*) DimensionSystem["English"] := DimensionSystem["MetricEngineering"] -DimensionSystem["English2019"] := DimensionSystem["MetricEngineering"] +(*DimensionSystem["English2019"] := DimensionSystem["MetricEngineering"]*) DimensionSystem["Survey"] := DimensionSystem["MetricEngineering"] -DimensionSystem["Survey2019"] := DimensionSystem["MetricEngineering"] +(*DimensionSystem["Survey2019"] := DimensionSystem["MetricEngineering"]*) DimensionSystemQ[DimensionSystem["Hartree"]] = True DimensionSystemQ[DimensionSystem["Electronic"]] = True @@ -249,9 +260,9 @@ AppendTo[AbstractUnitSystem, Map[(StringJoin["Dimension",#] -> DimensionSystem[# AppendSystems[f_, l_] := AppendTo[AbstractUnitSystem, Map[(# -> f[#]) &, l]] 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, {"International", "InternationalMean", "Nautical", "MPH", "KKH", "MTS", "IAU", "IAUE", "IAUJ", "Astronomical", "Hubble", "Cosmological", "CosmologicalQuantum", "EMU2019", "ESU2019", "Mixed", "GravitationalMetric", "GravitationalSI2019", "FFF"}] +AppendSystems[RankineSystem, {"FPS", "IPS", "British", "English", "Survey"}] +AppendSystems[GaussSystem, {"EMU", "ESU", "Gauss", "LorentzHeaviside", "Kennelly"}] +AppendSystems[EntropySystem, {"International", "InternationalMean", "Nautical", "Meridian", "MeridianEngineering", "MPH", "KKH", "MTS", "IAU", "IAUE", "IAUJ", "Hubble", "Cosmological", "CosmologicalQuantum", "GravitationalMetric", "GravitationalSI2019", "GravitationalMeridian", "FFF"}] AppendTo[AbstractUnitSystem, { "Planck" -> MeasureSystem["Planck", 1, 1, 1, 1, PowerExpand[Sqrt[4 Pi AbstractUnitData["\[Alpha]G"]]]], @@ -285,15 +296,10 @@ AppendTo[AbstractUnitSystem, { "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","SIE","ME","GSI2019","GSI","GM","CGS","CGS2019","CGSm","CGSe","HLU","EnglishEngineering","BritishGravitational","BG","EnglishUS","AbsoluteEnglish","AE","EE","EE2019","EnglishEngineering2019","BritishGravitational2019","AbsoluteEnglish2019","AE2019"}] +{"AbstractUnits","AbstractUnits1","AbstractUnits2","ISQ","SI","MKS","SIE","ME","GSI2019","GSI","GM","CGS","CGSm","CGSe","HLU","EnglishEngineering","BritishGravitational","BG","EnglishUS","AbsoluteEnglish","AE","EE"}] 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"}] +{"Gauss","LorentzHeaviside","Kennelly","ESU","EMU","Nautical","Meridian","MeridianEngineering","MPH","KKH","MTS","Metric","SI2019","MetricEngineering","SI2019Engineering","GravitationalMetric","GravitationalSI2019","GravitationalMeridian","SI1976","CODATA","Conventional","British","Survey","English","FPS","IPS","IAU","IAUE","IAUJ","FFF","Planck","PlanckGauss","Stoney","Hartree","Rydberg","Schrodinger","Electronic","QCD","QCDGauss","QCDoriginal","International","InternationalMean","Hubble","Cosmological","CosmologicalQuantum","Natural","NaturalGauss"}] diff --git a/README.md b/README.md index 708a73c..af8d036 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,8 @@ Defaults are shared: `Metric`, `SI2019`, `CODATA`, `Conventional`, `Internationa julia> using UnitSystems # or Similitude or MeasureSystems ``` +An optional environment variable `ENV["SIMILITUDE"]` induces `UnitSystems.similitude()` to return `true`, giving flexibility for building dependencies whenever it is desirable to toggle usage between `UnitSystems` (default) and `Similitude` (requires environment variable specification). For example, in `MeasureSystems` and `Geophysics` this option is used to increase flexibility with variety in local compilation workflow. + A `UnitSystem` is a consistent set of dimensional values selected to accomodate a particular use case or standardization. It is possible to convert derived physical quantities from any `UnitSystem` specification into any other using accurate values. Eleven fundamental constants `kB`, `ħ`, `𝘤`, `μ₀`, `mₑ`, `Mᵤ`, `Kcd`, `θ`, `λ`, `αL`, `g₀` are used to govern a specific unit system consistent scaling. @@ -47,7 +49,7 @@ additional constants `molarmass`, `luminousefficacy`, `gravity`, `angle`, `turn` Physics constant documentation is at https://geophysics.crucialflow.com/dev/constants -Standardized unit/derived quantities are `hyperfine`, `loschmidt`, `wienwavelength`, `wienfrequency`, `mechanicalheat`, `solarmass`, `jupitermass`, `earthmass`, `lunarmass`, `earthradius`, `greatcircle`, `radarmile`, `hubble`, `cosmological`, `radian`, `steradian`, `degree`, `gradian`, `arcminute`, `arcsecond`, `second`, `minute`, `hour`, `day`, `year`, `gaussianyear`, `siderealyear`, `angstrom`, `inch`, `foot`, `surveyfoot`, `yard`, `meter`, `earthmeter`, `mile`, `statutemile`, `meridianmile`, `admiraltymile`, `nauticalmile`, `lunardistance`, `astronomicalunit`, `lightyear`, `parsec`, `barn`, `hectare`, `acre`, `surveyacre`, `liter`, `gallon`, `quart`, `pint`, `cup`, `fluidounce`, `teaspoon`, `tablespoon`, `grain`, `gram`, `earthgram`, `kilogram`, `tonne`, `ton`, `pound`, `ounce`, `slug`, `slinch`, `hyl`, `dyne`, `newton`, `poundal`, `poundforce`, `kilopond`, `psi`, `pascal`, `bar`, `barye`, `technicalatmosphere`, `atmosphere`, `inchmercury`, `torr`, `electronvolt`, `erg`, `joule`, `footpound`, `calorie`, `kilocalorie`, `meancalorie`, `earthcalorie`, `thermalunit`, `gasgallon`, `tontnt`, `watt`, `horsepower`, `horsepowerwatt`, `horsepowermetric`, `electricalhorsepower`, `tonsrefrigeration`, `boilerhorsepower`, `coulomb`, `earthcoulomb`, `ampere`, `volt`, `henry`, `ohm`, `siemens`, `farad`, `weber`, `tesla`, `abcoulomb`, `abampere`, `abvolt`, `abhenry`, `abohm`, `abmho`, `abfarad`, `maxwell`, `gauss`, `oersted`, `gilbert`, `statcoulomb`, `statampere`, `statvolt`, `stathenry`, `statohm`, `statmho`, `statfarad`, `statweber`, `stattesla`, `kelvin`, `rankine`, `sealevel`, `mole`, `earthmole`, `poundmole`, `slugmole`, `slinchmole`, `katal`, `amagat`, `lumen`, `candela`, `lux`, `phot`, `footcandle`, `nit`, `apostilb`, `stilb`, `lambert`, `footlambert`, `bril`, `neper`, `bel`, `decibel`, `hertz`, `rpm`, `kayser`, `diopter`, `bubnoff`, `gforce`, `galileo`, `eotvos`, `darcy`, `poise`, `reyn`, `stokes`, `rayl`, `mpge`, `langley`, `jansky`, `solarflux`, `curie`, `sievert`, `roentgen`, `rem`. +Standardized unit/derived quantities are `hyperfine`, `loschmidt`, `wienwavelength`, `wienfrequency`, `mechanicalheat`, `solarmass`, `jupitermass`, `earthmass`, `lunarmass`, `earthradius`, `greatcircle`, `radarmile`, `hubble`, `cosmological`, `radian`, `steradian`, `degree`, `gradian`, `arcminute`, `arcsecond`, `second`, `minute`, `hour`, `day`, `year`, `gaussianyear`, `siderealyear`, `angstrom`, `inch`, `foot`, `surveyfoot`, `yard`, `meter`, `earthmeter`, `mile`, `statutemile`, `meridianmile`, `admiraltymile`, `nauticalmile`, `lunardistance`, `astronomicalunit`, `lightyear`, `parsec`, `barn`, `hectare`, `acre`, `surveyacre`, `liter`, `gallon`, `quart`, `pint`, `cup`, `fluidounce`, `teaspoon`, `tablespoon`, `grain`, `gram`, `earthgram`, `kilogram`, `tonne`, `ton`, `pound`, `ounce`, `slug`, `slinch`, `hyl`, `dyne`, `newton`, `poundal`, `poundforce`, `kilopond`, `psi`, `pascal`, `bar`, `barye`, `technicalatmosphere`, `atmosphere`, `inchmercury`, `torr`, `electronvolt`, `erg`, `joule`, `footpound`, `calorie`, `kilocalorie`, `meancalorie`, `earthcalorie`, `thermalunit`, `gasgallon`, `tontnt`, `watt`, `horsepower`, `horsepowerwatt`, `horsepowermetric`, `electricalhorsepower`, `tonsrefrigeration`, `boilerhorsepower`, `coulomb`, `earthcoulomb`, `ampere`, `volt`, `henry`, `ohm`, `siemens`, `farad`, `weber`, `tesla`, `abcoulomb`, `abampere`, `abvolt`, `abhenry`, `abohm`, `abmho`, `abfarad`, `maxwell`, `gauss`, `oersted`, `gilbert`, `statcoulomb`, `statampere`, `statvolt`, `stathenry`, `statohm`, `statmho`, `statfarad`, `statweber`, `stattesla`, `kelvin`, `rankine`, `celsius`, `fahrenheit`, `sealevel`, `boiling`, `mole`, `earthmole`, `poundmole`, `slugmole`, `slinchmole`, `katal`, `amagat`, `lumen`, `candela`, `lux`, `phot`, `footcandle`, `nit`, `apostilb`, `stilb`, `lambert`, `footlambert`, `bril`, `neper`, `bel`, `decibel`, `hertz`, `rpm`, `kayser`, `diopter`, `bubnoff`, `gforce`, `galileo`, `eotvos`, `darcy`, `poise`, `reyn`, `stokes`, `rayl`, `mpge`, `langley`, `jansky`, `solarflux`, `curie`, `sievert`, `roentgen`, `rem`. Standard physics units are at https://geophysics.crucialflow.com/dev/units diff --git a/src/UnitSystems.jl b/src/UnitSystems.jl index 0ee2f90..ed4b1a9 100644 --- a/src/UnitSystems.jl +++ b/src/UnitSystems.jl @@ -21,7 +21,7 @@ import Base: @pure, length, time, angle, rem const Systems = (:Metric,:SI2019,:SI1976,:CODATA,:Conventional,:International,:InternationalMean,:MetricEngineering,:SI2019Engineering,:GravitationalMetric,:GravitationalSI2019,:MTS,:EMU,:ESU,:Gauss,:LorentzHeaviside,:Kennelly,:FPS,:IPS,:British,:English,:Survey,:FFF,:MPH,:KKH,:Nautical,:Meridian,:MeridianEngineering,:GravitationalMeridian,:IAU☉,:IAUE,:IAUJ,:Hubble,:Cosmological,:CosmologicalQuantum,:Planck,:PlanckGauss,:Stoney,:Hartree,:Rydberg,:Schrodinger,:Electronic,:Natural,:NaturalGauss,:QCD,:QCDGauss,:QCDoriginal) const Dimensionless = (:coupling,:finestructure,:electronunit,:protonunit,:protonelectron,:darkenergydensity) const Constants = (:lightspeed,:planck,:planckreduced,:electronmass,:molarmass,:boltzmann,:permeability,:rationalization,:lorentz,:luminousefficacy,:gravity) #angle -const Physics = (:turn,:spat,:atomicmass,:protonmass,:planckmass,:gravitation,:einstein,:hartree,:rydberg,:bohr,:electronradius,:avogadro,:molargas,:stefan,:radiationdensity,:vacuumpermeability,:vacuumpermittivity,:electrostatic,:magnetostatic,:biotsavart,:elementarycharge,:faraday,:vacuumimpedance,:conductancequantum,:klitzing,:josephson,:magneticfluxquantum,:magneton,:gaussgravitation) +const Physics = (:turn,:spat,:atomicmass,:protonmass,:planckmass,:gravitation,:gaussgravitation,:einstein,:hartree,:rydberg,:bohr,:electronradius,:avogadro,:molargas,:stefan,:radiationdensity,:vacuumpermeability,:vacuumpermittivity,:electrostatic,:magnetostatic,:biotsavart,:elementarycharge,:faraday,:vacuumimpedance,:conductancequantum,:klitzing,:josephson,:magneticfluxquantum,:magneton) const Derived = (:hyperfine,:loschmidt,:wienwavelength,:wienfrequency,:mechanicalheat,:solarmass,:jupitermass,:earthmass,:lunarmass,:earthradius,:greatcircle,:radarmile,:hubble,:cosmological, :radian,:steradian,:degree,:gradian,:arcminute,:arcsecond, :second,:minute,:hour,:day,:year,:gaussianyear,:siderealyear, @@ -36,7 +36,7 @@ const Derived = (:hyperfine,:loschmidt,:wienwavelength,:wienfrequency,:mechanica :coulomb,:earthcoulomb,:ampere,:volt,:henry,:ohm,:siemens,:farad,:weber,:tesla, :abcoulomb,:abampere,:abvolt,:abhenry,:abohm,:abmho,:abfarad,:maxwell,:gauss,:oersted,:gilbert, :statcoulomb,:statampere,:statvolt,:stathenry,:statohm,:statmho,:statfarad,:statweber,:stattesla, - :kelvin,:rankine,:sealevel,:mole,:earthmole,:poundmole,:slugmole,:slinchmole,:katal,:amagat, + :kelvin,:rankine,:celsius,:fahrenheit,:sealevel,:boiling,:mole,:earthmole,:poundmole,:slugmole,:slinchmole,:katal,:amagat, :lumen,:candela,:lux,:phot,:footcandle,:nit,:apostilb,:stilb,:lambert,:footlambert,:bril, :neper,:bel,:decibel,:hertz,:rpm, :kayser,:diopter,:bubnoff,:gforce,:galileo,:eotvos,:darcy,:poise,:reyn,:stokes,:rayl, @@ -52,6 +52,11 @@ const Convert = [Mechanics...,Electromagnetic...,Thermodynamic...,Molar...,Photo listext(x) = join(x,"`, `") +""" + UnitSystems.similitude() = haskey(ENV,"SIMILITUDE") + +An optional environment variable `ENV["SIMILITUDE"]` induces `UnitSystems.similitude()` to return `true`, giving flexibility for building dependencies whenever it is desirable to toggle usage between `UnitSystems` (default) and `Similitude` (requires environment variable specification). For example, in `MeasureSystems` and `Geophysics` this option is used to increase flexibility with variety in local compilation workflow. +""" similitude() = haskey(ENV,"SIMILITUDE") include("constant.jl") @@ -244,7 +249,7 @@ Examples of this type include `Nautical`, `Meridian`, `MeridianEngineering`, `Gr 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 +function EntropySystem(u,t,l,m,θ=one(u)) EntropySystem(u,t,l,m,θ,permeability(u)/(m*l),molarmass(u)/m,gravity(u),m*l*l/(t*t)) 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)) @@ -310,7 +315,8 @@ const RK2014,KJ2014 = Constant(25812.8074555),Constant(4.835978525e14) const GME,GMJ = Constant(398600441.8e6),Constant(1.26686534e17) const kG,H0,ΩΛ = Constant(3548.18761),Constant(67.66),Constant(0.6889) const aⱼ,au,LD = Constant(365.25),Constant(149597870.7e3),Constant(384402e3) -const zetta, yotta, yocto = Constant(1e21), Constant(1e24), Constant(1e-24) +const zetta,zepto = Constant(1e21),Constant(1e-21) +const yotta,yocto = Constant(1e24),Constant(1e-24) const 𝟏,𝟐,𝟑,𝟓,𝟕,𝟏𝟎,𝟏𝟏,𝟏𝟗,𝟒𝟑,τ,α = Constant(1),Constant(2),Constant(3),Constant(5),Constant(7),Constant(10),Constant(11),Constant(19),Constant(43),Constant(2π),inv(αinv) include("initdata.jl") @@ -326,6 +332,35 @@ const units, temp = UnitSystem, temperature 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 +@pure deka(U::UnitSystem) = two(U)*five(U) +@pure hecto(U::UnitSystem) = deka(U)^2 +@pure kilo(U::UnitSystem) = deka(U)^3 +@pure mega(U::UnitSystem) = (Constant(1.0)*kilo(U))^2 +@pure giga(U::UnitSystem) = (Constant(1.0)*kilo(U))^3 +@pure tera(U::UnitSystem) = (Constant(1.0)*kilo(U))^4 +@pure peta(U::UnitSystem) = (Constant(1.0)*kilo(U))^5 +@pure exa(U::UnitSystem) = (Constant(1.0)*kilo(U))^6 +@pure zetta(U::UnitSystem) = (Constant(1.0)*kilo(U))^7 +@pure yotta(U::UnitSystem) = (Constant(1.0)*kilo(U))^8 +@pure deci(U::UnitSystem) = inv(deka(U)) +@pure centi(U::UnitSystem) = inv(hecto(U)) +@pure milli(U::UnitSystem) = inv(kilo(U)) +@pure micro(U::UnitSystem) = inv(mega(U)) +@pure nano(U::UnitSystem) = inv(giga(U)) +@pure pico(U::UnitSystem) = inv(tera(U)) +@pure femto(U::UnitSystem) = inv(peta(U)) +@pure atto(U::UnitSystem) = inv(exa(U)) +@pure zepto(U::UnitSystem) = inv(zetta(U)) +@pure yocto(U::UnitSystem) = inv(yotta(U)) +@pure kibi(U::UnitSystem) = two(U)^10 +@pure mebi(U::UnitSystem) = two(U)^20 +@pure gibi(U::UnitSystem) = two(U)^30 +@pure tebi(U::UnitSystem) = two(U)^40 +@pure pebi(U::UnitSystem) = two(U)^50 +@pure exbi(U::UnitSystem) = two(U)^60 +@pure zebi(U::UnitSystem) = (Constant(1.0)*two(U))^70 +@pure yobi(U::UnitSystem) = (Constant(1.0)*two(U))^80 + # physical constants @pure electronmass(U::typeof(Planck),C::Coupling) = sqrt(spat(U)*coupling(C)) diff --git a/src/derived.jl b/src/derived.jl index b703e28..97aff3b 100644 --- a/src/derived.jl +++ b/src/derived.jl @@ -12,35 +12,6 @@ # https://github.com/chakravala # https://crucialflow.com -@pure deka(U::UnitSystem) = two(U)*five(U) -@pure hecto(U::UnitSystem) = deka(U)^2 -@pure kilo(U::UnitSystem) = deka(U)^3 -@pure mega(U::UnitSystem) = (Constant(1.0)*kilo(U))^2 -@pure giga(U::UnitSystem) = (Constant(1.0)*kilo(U))^3 -@pure tera(U::UnitSystem) = (Constant(1.0)*kilo(U))^4 -@pure peta(U::UnitSystem) = (Constant(1.0)*kilo(U))^5 -@pure exa(U::UnitSystem) = (Constant(1.0)*kilo(U))^6 -@pure zetta(U::UnitSystem) = (Constant(1.0)*kilo(U))^7 -@pure yotta(U::UnitSystem) = (Constant(1.0)*kilo(U))^8 -@pure deci(U::UnitSystem) = inv(deka(U)) -@pure centi(U::UnitSystem) = inv(hecto(U)) -@pure milli(U::UnitSystem) = inv(kilo(U)) -@pure micro(U::UnitSystem) = inv(mega(U)) -@pure nano(U::UnitSystem) = inv(giga(U)) -@pure pico(U::UnitSystem) = inv(tera(U)) -@pure femto(U::UnitSystem) = inv(peta(U)) -@pure atto(U::UnitSystem) = inv(exa(U)) -@pure zepto(U::UnitSystem) = inv(zetta(U)) -@pure yocto(U::UnitSystem) = inv(yotta(U)) -@pure kibi(U::UnitSystem) = two(U)^10 -@pure mebi(U::UnitSystem) = two(U)^20 -@pure gibi(U::UnitSystem) = two(U)^30 -@pure tebi(U::UnitSystem) = two(U)^40 -@pure pebi(U::UnitSystem) = two(U)^50 -@pure exbi(U::UnitSystem) = two(U)^60 -@pure zebi(U::UnitSystem) = (Constant(1.0)*two(U))^70 -@pure yobi(U::UnitSystem) = (Constant(1.0)*two(U))^80 - # angle @pure radian(U::UnitSystem) = angle(one(U),U,Metric) @@ -203,9 +174,13 @@ # temperature +#@pure freezing(U::UnitSystem) = temperature(T₀-milli,U,Metric) +@pure boiling(U::UnitSystem) = temperature(T₀+Constant(99.9839),U,Metric) @pure sealevel(U::UnitSystem) = temperature(T₀+𝟑*𝟓,U,Metric) @pure kelvin(U::UnitSystem) = temperature(one(U),U,Metric) @pure rankine(U::UnitSystem) = temperature(one(U),U,English) +@pure celsius(U::UnitSystem) = temperature(T₀,U,Metric) +@pure fahrenheit(U::UnitSystem) = temperature(Constant(459.67),U,English) #@pure delisle(U::UnitSystem) = temperature(two(U)/three(U),U,Metric) #@pure reaumur(U::UnitSystem) = temperature(five(U)/two(U)^2,U,Metric) diff --git a/src/derivedocs.jl b/src/derivedocs.jl index 8abb0f6..c03e580 100644 --- a/src/derivedocs.jl +++ b/src/derivedocs.jl @@ -422,8 +422,8 @@ $(astronomicalunit(Metric)) julia> astronomicalunit(English) # ft $(astronomicalunit(English)) -julia> astronomicalunit(Nautical) # nm -$(astronomicalunit(Nautical)) +julia> astronomicalunit(Metric)/lightspeed(Metric) # s +$(astronomicalunit(Metric)/lightspeed(Metric)) ``` """ astronomicalunit, au @@ -435,11 +435,11 @@ Standard distance between the Earth and the Moon (m or ft). julia> lunardistance(Metric) # m $(lunardistance(Metric)) -julia> lunardistance(English) # ft -$(lunardistance(English)) - julia> lunardistance(Nautical) # nm $(lunardistance(Nautical)) + +julia> lunardistance(Metric)/lightspeed(Metric) # s +$(lunardistance(Metric)/lightspeed(Metric)) ``` """ lunardistance, LD @@ -2029,6 +2029,38 @@ $(rankine(British)) ``` """ rankine +@doc """ +$(unitext(:celsius,"temperature(T₀,U,Metric)")) + +Metric unit of `temperature` (K or °R). +```Julia +julia> celsius(Metric) # K +$(celsius(Metric)) + +julia> celsius(SI2019) # K +$(celsius(SI2019)) + +julia> celsius(British) # °R +$(celsius(British)) +``` +""" celsius, T₀ + +@doc """ +$(unitext(:fahrenheit,"temperature(Constant(459.67),U,English)")) + +English unit of `temperature` (K or °R). +```Julia +julia> fahrenheit(Metric) # K +$(fahrenheit(Metric)) + +julia> fahrenheit(SI2019) # K +$(fahrenheit(SI2019)) + +julia> fahrenheit(British) # °R +$(fahrenheit(British)) +``` +""" fahrenheit + #=@doc """ $(unitext(:delisle,"temperature(𝟐/𝟑,U,Metric)")) @@ -2059,7 +2091,39 @@ $(reaumur(SI2019)) julia> reaumur(British) # °R $(reaumur(British)) ``` -""" reaumur=# +""" reaumur + +@doc """ +$(unitext(:freezing,"temperature(T₀-milli,U)")) + +Standard `temperature` reference at `freezing` point of water (K or °R). +```Julia +julia> freezing(Metric) # K +$(freezing(Metric)) + +julia> freezing(SI2019) # K +$(freezing(SI2019)) + +julia> freezing(English) # °R +$(freezing(English)) +``` +""" freezing=# + +@doc """ +$(unitext(:boiling,"temperature(T₀+Constant(99.9839),U)")) + +Standard `temperature` reference at `boiling` point of water (K or °R). +```Julia +julia> boiling(Metric) # K +$(boiling(Metric)) + +julia> boiling(SI2019) # K +$(boiling(SI2019)) + +julia> boiling(English) # °R +$(boiling(English)) +``` +""" boiling @doc """ $(unitext(:sealevel,"temperature(T₀+𝟑*𝟓,U)")) @@ -2075,7 +2139,7 @@ $(sealevel(SI2019)) julia> sealevel(English) # °R $(sealevel(English)) ``` -""" sealevel, T₀ +""" sealevel # mole diff --git a/src/electromagnetic.jl b/src/electromagnetic.jl index f06bfac..4e89c01 100644 --- a/src/electromagnetic.jl +++ b/src/electromagnetic.jl @@ -45,7 +45,7 @@ const voltage = electricpotential #@pure rigidity(U::UnitSystem,S::UnitSystem) = unit(magneticfluxdensity(U,S)*length(U,S)) @pure susceptibility(U::UnitSystem,S::UnitSystem) = unit(rationalization(S,U)) -# WARNING unchecked: rigidity, magneticmoment, vectorpotential, mobility, linearchargedensity, exposure +# WARNING unchecked: rigidity, magneticmoment, vectorpotential linearchargedensity # CGS extra: polarizability, permeance, magnetic-current? + density, magneticresistance diff --git a/src/electromagneticdocs.jl b/src/electromagneticdocs.jl index 41418b9..2f3124c 100644 --- a/src/electromagneticdocs.jl +++ b/src/electromagneticdocs.jl @@ -554,10 +554,10 @@ $(magneticpotential(Metric,SI2019)) @doc """ $(convertext(:polestrength,"magneticdipolemoment(U,S)/length(U,S)")) -Magnetic `polestrength` is analogous to `charge` (A⋅m⁻¹), unit conversion factor. +Magnetic `polestrength` is analogous to `charge` (A⋅m), unit conversion factor. ```Julia -julia> polestrength(EMU,Metric) # A⋅m⁻¹⋅pole⁻¹ +julia> polestrength(EMU,Metric) # A⋅m⋅pole⁻¹ $(polestrength(EMU,Metric)) julia> polestrength(Metric,SI2019) # A⋅A⁻¹⋅ diff --git a/src/initdata.jl b/src/initdata.jl index 0bbfdab..c38e630 100644 --- a/src/initdata.jl +++ b/src/initdata.jl @@ -15,7 +15,7 @@ const deka,byte = 𝟐*𝟓,𝟐^3 const hecto, kilo = deka^2, deka^3 const mega,giga,tera,peta,exa = kilo^2, kilo^3, kilo^4, kilo^5, kilo^6 -const deci,centi,milli,micro,nano,pico,femto,atto,zepto = inv(deka),inv(hecto),inv(kilo),inv(mega),inv(giga),inv(tera),inv(peta),inv(exa),inv(zetta) +const deci,centi,milli,micro,nano,pico,femto,atto = inv(deka),inv(hecto),inv(kilo),inv(mega),inv(giga),inv(tera),inv(peta),inv(exa) const kibi,mebi,gibi,tebi,pebi,exbi,zebi,yobi = 𝟐^10,𝟐^20,𝟐^30,𝟐^40,𝟐^50,𝟐^60,(Constant(1.0)*𝟐)^70,(Constant(1.0)*𝟐)^80 const fur,°R,K,HOUR,k = 𝟐^2*𝟑*𝟓*𝟏𝟏*ft,𝟓/𝟑^2,𝟑^2/𝟓,𝟐^4*𝟑^2*𝟓^2,kG*τ/(𝟐^7*𝟑^4*𝟓^3) @@ -106,7 +106,7 @@ const Meridian = Quantity(EntropySystem(Metric,𝟏,em,em^3,𝟏,τ/𝟐^6/𝟓^ const MeridianEngineering = Quantity(EntropySystem(Metric,𝟏,em,em^3,𝟏,τ/𝟐^6/𝟓^7*em/g₀,milli,g₀/em)) const GravitationalSI2019 = Quantity(EntropySystem(SI2019,𝟏,𝟏,g₀)) const GravitationalMetric = Quantity(EntropySystem(Metric,𝟏,𝟏,g₀)) -const GravitationalMeridian = Quantity(EntropySystem(Metric,𝟏,em,g₀*em^3,𝟏,τ/𝟐^6/𝟓^7/g₀,milli)) +const GravitationalMeridian = Quantity(EntropySystem(Metric,𝟏,em,g₀*em^2,𝟏,τ/𝟐^6/𝟓^7*em/g₀,milli)) 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)) diff --git a/src/kinematicdocs.jl b/src/kinematicdocs.jl index 60571b0..201ab42 100644 --- a/src/kinematicdocs.jl +++ b/src/kinematicdocs.jl @@ -750,7 +750,7 @@ $(massflow(English,Metric)) @doc """ $(convertext(:spectralflux,"power(U,S)/length(U,S)")) -Spectral power or `radiantflux` per wave `length` (W⋅m⁻¹), unit conversion factor. +Spectral power or `power` per wave `length` (W⋅m⁻¹), unit conversion factor. ```Julia julia> spectralflux(CGS,Metric) # kg⋅m⋅g⁻¹⋅cm⁻¹ @@ -899,7 +899,7 @@ $(admittance(English,Metric)) @doc """ $(convertext(:compliance,"time(U,S)^2/mass(U,S)")) -Acoustic `compliance` is reciprocal of `stiffness` (m⋅N⁻¹, m³⋅Pa⁻¹), unit conversion factor. +Acoustic `compliance` is reciprocal of `fluence` (m⋅N⁻¹, m³⋅Pa⁻¹), unit conversion factor. ```Julia julia> compliance(CGS,Metric) # kg⋅g⁻¹ diff --git a/src/physicsdocs.jl b/src/physicsdocs.jl index 52be393..11ca66a 100644 --- a/src/physicsdocs.jl +++ b/src/physicsdocs.jl @@ -186,10 +186,6 @@ $(planck(British)) $(unitext(:boltzmann,"molargas(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⁻¹ @@ -238,6 +234,9 @@ $(lightspeed(Metric)) julia> lightspeed(English) # ft⋅s⁻¹ $(lightspeed(English)) + +julia> lightspeed(IAU) # au⋅D⁻¹ +$(lightspeed(IAU)) ``` """ lightspeed, 𝘤, cc @@ -473,10 +472,6 @@ $(gravity(English)) $(unitext(:molargas,"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> molargas(SI2019) # J⋅K⁻¹⋅mol⁻¹ @@ -1083,7 +1078,7 @@ $(wienwavelength(English)) @doc """ $(unitext(:wienfrequency,"(𝟑+W₀(-𝟑*exp(-𝟑)))*boltzmann(U)/planck(U)")) -Wien frequency displacement law constant based on Lambert `W₀` evaluation (Hz⋅K⁻¹). +Wien frequency radiation law constant based on Lambert `W₀` evaluation (Hz⋅K⁻¹). ```Julia julia> wienfrequency(Metric) # Hz⋅K⁻¹ $(wienfrequency(Metric)) diff --git a/src/systems.jl b/src/systems.jl index 806fa10..4be18cb 100644 --- a/src/systems.jl +++ b/src/systems.jl @@ -80,6 +80,17 @@ export αG, αinv, μₚₑ, μₑᵤ, μₚᵤ, mpe, meu, mpu, mP, δμ₀, M 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 +@doc """ + Constant{D} <: Real + +Numerical constant `D` used in `UnitSystem` derivations. +```Julia +julia> Constant(100) +$(Constant(100)) +``` +Can be multiplied, added, subtracted, and so on. +""" Constant + # engineering unit systems docs @doc """