File indexing completed on 2024-05-12 03:47:44
0001 #include "constants.h" 0002 0003 #include <gsl/gsl_const_mksa.h> 0004 #include <gsl/gsl_const_num.h> 0005 #include <gsl/gsl_math.h> 0006 0007 #include <KLocalizedString> 0008 0009 QString constantGroupsToString(ConstantGroups group) { 0010 switch (group) { 0011 case ConstantGroups::MathematicalConstants: 0012 return i18n("Mathematical constants"); 0013 case ConstantGroups::FundamentalConstants: 0014 return i18n("Fundamental constants"); 0015 case ConstantGroups::AstronomyAndAstrophysics: 0016 return i18n("Astronomy and Astrophysics"); 0017 case ConstantGroups::AtomicAndNuclearPhysics: 0018 return i18n("Atomic and Nuclear Physics"); 0019 case ConstantGroups::MeasurementOfTime: 0020 return i18n("Measurement of Time"); 0021 case ConstantGroups::ImperialUnits: 0022 return i18n("Imperial Units"); 0023 case ConstantGroups::SpeedAndNauticalUnits: 0024 return i18n("Speed and Nautical Units"); 0025 case ConstantGroups::PrintersUnits: 0026 return i18n("Printers Units"); 0027 case ConstantGroups::VolumeAreaAndLength: 0028 return i18n("Volume, Area and Length"); 0029 case ConstantGroups::MassAndWeight: 0030 return i18n("Mass and Weight"); 0031 case ConstantGroups::ThermalEnergyAndPower: 0032 return i18n("Thermal Energy and Power"); 0033 case ConstantGroups::Pressure: 0034 return i18n("Pressure"); 0035 case ConstantGroups::Viscosity: 0036 return i18n("Viscosity"); 0037 case ConstantGroups::LightAndIllumination: 0038 return i18n("Light and Illumination"); 0039 case ConstantGroups::Radioactivity: 0040 return i18n("Radioactivity"); 0041 case ConstantGroups::ForceAndEnergy: 0042 return i18n("Force and Energy"); 0043 case ConstantGroups::END: 0044 break; 0045 } 0046 return i18n("Unknown Constant"); 0047 } 0048 0049 // clang-format off 0050 0051 /* sync with ExpressionParser.cpp */ 0052 struct cons _constants[] = { 0053 /* Physical constants: https://www.gnu.org/software/gsl/doc/html/const.html */ 0054 /* Physical constants in MKSA system */ 0055 0056 // MathematicalConstants = addConstantsGroup(i18n("Mathematical constants")); 0057 {[]() { return i18n("Base of exponentials");}, "e", M_E, "", ConstantGroups::MathematicalConstants}, 0058 {[]() { return i18n("Pi");}, "pi", M_PI, "", ConstantGroups::MathematicalConstants}, 0059 {[]() { return i18n("Euler's constant");}, "euler", M_EULER, "", ConstantGroups::MathematicalConstants}, 0060 {[]() { return i18n("Not a number");}, "nan", std::nan("0"), "", ConstantGroups::MathematicalConstants}, 0061 0062 // FundamentalConstants = addConstantsGroup(i18n("Fundamental constants")); 0063 {[]() { return i18n("Speed of light");}, "cL", GSL_CONST_MKSA_SPEED_OF_LIGHT, "m / s", ConstantGroups::FundamentalConstants}, 0064 {[]() { return i18n("Vacuum permeability");}, "mu0", GSL_CONST_MKSA_VACUUM_PERMEABILITY, "kg m / A^2 s^2", ConstantGroups::FundamentalConstants}, 0065 {[]() { return i18n("Vacuum permittivity");}, "e0", GSL_CONST_MKSA_VACUUM_PERMITTIVITY, "A^2 s^4 / kg m^3", ConstantGroups::FundamentalConstants}, 0066 {[]() { return i18n("Planck constant");}, "hPlanck", GSL_CONST_MKSA_PLANCKS_CONSTANT_H, "kg m^2 / s", ConstantGroups::FundamentalConstants}, 0067 {[]() { return i18n("Reduced Planck constant");}, "hbar", GSL_CONST_MKSA_PLANCKS_CONSTANT_HBAR, "kg m^2 / s", ConstantGroups::FundamentalConstants}, 0068 {[]() { return i18n("Avogadro constant");}, "NA", GSL_CONST_NUM_AVOGADRO, "1 / mol", ConstantGroups::FundamentalConstants}, 0069 {[]() { return i18n("Faraday");}, "Faraday", GSL_CONST_MKSA_FARADAY, "A s / mol", ConstantGroups::FundamentalConstants}, 0070 {[]() { return i18n("Boltzmann constant");}, "kB", GSL_CONST_MKSA_BOLTZMANN, "kg m^2 / K s^2", ConstantGroups::FundamentalConstants}, 0071 {[]() { return i18n("Molar gas");}, "r0", GSL_CONST_MKSA_MOLAR_GAS, "kg m^2 / K mol s^2", ConstantGroups::FundamentalConstants}, 0072 {[]() { return i18n("Standard gas volume");}, "v0", GSL_CONST_MKSA_STANDARD_GAS_VOLUME, "m^3 / mol", ConstantGroups::FundamentalConstants}, 0073 {[]() { return i18n("Stefan-Boltzmann constant");}, "sigma", GSL_CONST_MKSA_STEFAN_BOLTZMANN_CONSTANT, "kg / K^4 s^3", ConstantGroups::FundamentalConstants}, 0074 {[]() { return i18n("Gauss");}, "Gauss", GSL_CONST_MKSA_GAUSS, "kg / A s^2", ConstantGroups::FundamentalConstants}, 0075 0076 // AstronomyAndAstrophysics = addConstantsGroup(i18n("Astronomy and Astrophysics")); 0077 {[]() { return i18n("Astronomical unit");}, "au", GSL_CONST_MKSA_ASTRONOMICAL_UNIT, "m", ConstantGroups::AstronomyAndAstrophysics}, 0078 {[]() { return i18n("Gravitational constant");}, "G", GSL_CONST_MKSA_GRAVITATIONAL_CONSTANT, "m^3 / kg s^2", ConstantGroups::AstronomyAndAstrophysics}, 0079 {[]() { return i18n("Light year");}, "ly", GSL_CONST_MKSA_LIGHT_YEAR, "m", ConstantGroups::AstronomyAndAstrophysics}, 0080 {[]() { return i18n("Parsec");}, "pc", GSL_CONST_MKSA_PARSEC, "m", ConstantGroups::AstronomyAndAstrophysics}, 0081 {[]() { return i18n("Gravitational acceleration");}, "gg", GSL_CONST_MKSA_GRAV_ACCEL, "m / s^2", ConstantGroups::AstronomyAndAstrophysics}, 0082 {[]() { return i18n("Solar mass");}, "ms", GSL_CONST_MKSA_SOLAR_MASS, "kg", ConstantGroups::AstronomyAndAstrophysics}, 0083 0084 // AtomicAndNuclearPhysics = addConstantsGroup(i18n("Atomic and Nuclear Physics")); 0085 {[]() { return i18n("Charge of the electron");}, "ee", GSL_CONST_MKSA_ELECTRON_CHARGE, "A s", ConstantGroups::AtomicAndNuclearPhysics}, 0086 {[]() { return i18n("Energy of 1 electron volt");}, "ev", GSL_CONST_MKSA_ELECTRON_VOLT, "kg m^2 / s^2", ConstantGroups::AtomicAndNuclearPhysics}, 0087 {[]() { return i18n("Unified atomic mass");}, "amu", GSL_CONST_MKSA_UNIFIED_ATOMIC_MASS, "kg", ConstantGroups::AtomicAndNuclearPhysics}, 0088 {[]() { return i18n("Mass of the electron");}, "me", GSL_CONST_MKSA_MASS_ELECTRON, "kg", ConstantGroups::AtomicAndNuclearPhysics}, 0089 {[]() { return i18n("Mass of the muon");}, "mmu", GSL_CONST_MKSA_MASS_MUON, "kg", ConstantGroups::AtomicAndNuclearPhysics}, 0090 {[]() { return i18n("Mass of the proton");}, "mp", GSL_CONST_MKSA_MASS_PROTON, "kg", ConstantGroups::AtomicAndNuclearPhysics}, 0091 {[]() { return i18n("Mass of the neutron");}, "mn", GSL_CONST_MKSA_MASS_NEUTRON, "kg", ConstantGroups::AtomicAndNuclearPhysics}, 0092 {[]() { return i18n("Electromagnetic fine structure constant");}, "alpha", GSL_CONST_NUM_FINE_STRUCTURE, "", ConstantGroups::AtomicAndNuclearPhysics}, 0093 {[]() { return i18n("Rydberg constant");}, "Ry", GSL_CONST_MKSA_RYDBERG, "kg m^2 / s^2", ConstantGroups::AtomicAndNuclearPhysics}, 0094 {[]() { return i18n("Bohr radius");}, "aB", GSL_CONST_MKSA_BOHR_RADIUS, "m", ConstantGroups::AtomicAndNuclearPhysics}, 0095 {[]() { return i18n("Length of 1 angstrom");}, "ao", GSL_CONST_MKSA_ANGSTROM, "m", ConstantGroups::AtomicAndNuclearPhysics}, 0096 {[]() { return i18n("Area of 1 barn");}, "barn", GSL_CONST_MKSA_BARN, "m^2", ConstantGroups::AtomicAndNuclearPhysics}, 0097 {[]() { return i18n("Bohr Magneton");}, "muB", GSL_CONST_MKSA_BOHR_MAGNETON, "A m^2", ConstantGroups::AtomicAndNuclearPhysics}, 0098 {[]() { return i18n("Nuclear Magneton");}, "mun", GSL_CONST_MKSA_NUCLEAR_MAGNETON, "A m^2", ConstantGroups::AtomicAndNuclearPhysics}, 0099 {[]() { return i18n("Magnetic moment of the electron [absolute value]");}, "mue", GSL_CONST_MKSA_ELECTRON_MAGNETIC_MOMENT, "A m^2", ConstantGroups::AtomicAndNuclearPhysics}, 0100 {[]() { return i18n("Magnetic moment of the proton");}, "mup", GSL_CONST_MKSA_PROTON_MAGNETIC_MOMENT, "A m^2", ConstantGroups::AtomicAndNuclearPhysics}, 0101 {[]() { return i18n("Thomson cross section");}, "sigmaT", GSL_CONST_MKSA_THOMSON_CROSS_SECTION, "m^2", ConstantGroups::AtomicAndNuclearPhysics}, 0102 {[]() { return i18n("Electric dipole moment of 1 Debye");}, "pD", GSL_CONST_MKSA_DEBYE, "A s^2 / m^2", ConstantGroups::AtomicAndNuclearPhysics}, 0103 0104 // MeasurementOfTime = addConstantsGroup(i18n("Measurement of Time")); 0105 {[]() { return i18n("Number of seconds in 1 minute");}, "minute", GSL_CONST_MKSA_MINUTE, "s", ConstantGroups::MeasurementOfTime}, 0106 {[]() { return i18n("Number of seconds in 1 hour");}, "hour", GSL_CONST_MKSA_HOUR, "s", ConstantGroups::MeasurementOfTime}, 0107 {[]() { return i18n("Number of seconds in 1 day");}, "day", GSL_CONST_MKSA_DAY, "s", ConstantGroups::MeasurementOfTime}, 0108 {[]() { return i18n("Number of seconds in 1 week");}, "week", GSL_CONST_MKSA_WEEK, "s", ConstantGroups::MeasurementOfTime}, 0109 0110 // ImperialUnits = addConstantsGroup(i18n("Imperial Units")); 0111 {[]() { return i18n("Length of 1 inch");}, "in", GSL_CONST_MKSA_INCH, "m", ConstantGroups::ImperialUnits}, 0112 {[]() { return i18n("Length of 1 foot");}, "ft", GSL_CONST_MKSA_FOOT, "m", ConstantGroups::ImperialUnits}, 0113 {[]() { return i18n("Length of 1 yard");}, "yard", GSL_CONST_MKSA_YARD, "m", ConstantGroups::ImperialUnits}, 0114 {[]() { return i18n("Length of 1 mile");}, "mile", GSL_CONST_MKSA_MILE, "m", ConstantGroups::ImperialUnits}, 0115 {[]() { return i18n("Length of 1/1000th of an inch");}, "mil", GSL_CONST_MKSA_MIL, "m", ConstantGroups::ImperialUnits}, 0116 0117 // SpeedAndNauticalUnits = addConstantsGroup(i18n("Speed and Nautical Units")); 0118 {[]() { return i18n("Speed of 1 kilometer per hour");}, "v_km_per_h", GSL_CONST_MKSA_KILOMETERS_PER_HOUR, "m / s", ConstantGroups::SpeedAndNauticalUnits}, 0119 {[]() { return i18n("Speed of 1 mile per hour");}, "v_mile_per_h", GSL_CONST_MKSA_MILES_PER_HOUR, "m / s", ConstantGroups::SpeedAndNauticalUnits}, 0120 {[]() { return i18n("Length of 1 nautical mile");}, "nmile", GSL_CONST_MKSA_NAUTICAL_MILE, "m", ConstantGroups::SpeedAndNauticalUnits}, 0121 {[]() { return i18n("Length of 1 fathom");}, "fathom", GSL_CONST_MKSA_FATHOM, "m", ConstantGroups::SpeedAndNauticalUnits}, 0122 {[]() { return i18n("Speed of 1 knot");}, "knot", GSL_CONST_MKSA_KNOT, "m / s", ConstantGroups::SpeedAndNauticalUnits}, 0123 0124 // PrintersUnits = addConstantsGroup(i18n("Printers Units")); 0125 {[]() { return i18n("length of 1 printer's point [1/72 inch]");}, "pt", GSL_CONST_MKSA_POINT, "m", ConstantGroups::PrintersUnits}, 0126 {[]() { return i18n("length of 1 TeX point [1/72.27 inch]");}, "texpt", GSL_CONST_MKSA_TEXPOINT, "m", ConstantGroups::PrintersUnits}, 0127 0128 // VolumeAreaAndLength = addConstantsGroup(i18n("Volume, Area and Length")); 0129 {[]() { return i18n("Length of 1 micron");}, "micron", GSL_CONST_MKSA_MICRON, "m", ConstantGroups::VolumeAreaAndLength}, 0130 {[]() { return i18n("Area of 1 hectare");}, "hectare", GSL_CONST_MKSA_HECTARE, "m^2", ConstantGroups::VolumeAreaAndLength}, 0131 {[]() { return i18n("Area of 1 acre");}, "acre", GSL_CONST_MKSA_ACRE, "m^2", ConstantGroups::VolumeAreaAndLength}, 0132 {[]() { return i18n("Volume of 1 liter");}, "liter", GSL_CONST_MKSA_LITER, "m^3", ConstantGroups::VolumeAreaAndLength}, 0133 {[]() { return i18n("Volume of 1 US gallon");}, "us_gallon", GSL_CONST_MKSA_US_GALLON, "m^3", ConstantGroups::VolumeAreaAndLength}, 0134 {[]() { return i18n("Volume of 1 Canadian gallon");}, "can_gallon", GSL_CONST_MKSA_CANADIAN_GALLON, "m^3", ConstantGroups::VolumeAreaAndLength}, 0135 {[]() { return i18n("Volume of 1 UK gallon");}, "uk_gallon", GSL_CONST_MKSA_UK_GALLON, "m^3", ConstantGroups::VolumeAreaAndLength}, 0136 {[]() { return i18n("Volume of 1 quart");}, "quart", GSL_CONST_MKSA_QUART, "m^3", ConstantGroups::VolumeAreaAndLength}, 0137 {[]() { return i18n("Volume of 1 pint");}, "pint", GSL_CONST_MKSA_PINT, "m^3", ConstantGroups::VolumeAreaAndLength}, 0138 0139 // MassAndWeight = addConstantsGroup(i18n("Mass and Weight")); 0140 {[]() { return i18n("Mass of 1 pound");}, "pound", GSL_CONST_MKSA_POUND_MASS, "kg", ConstantGroups::MassAndWeight}, 0141 {[]() { return i18n("Mass of 1 ounce");}, "ounce", GSL_CONST_MKSA_OUNCE_MASS, "kg", ConstantGroups::MassAndWeight}, 0142 {[]() { return i18n("Mass of 1 ton");}, "ton", GSL_CONST_MKSA_TON, "kg", ConstantGroups::MassAndWeight}, 0143 {[]() { return i18n("Mass of 1 metric ton [1000 kg]");}, "mton", GSL_CONST_MKSA_METRIC_TON, "kg", ConstantGroups::MassAndWeight}, 0144 {[]() { return i18n("Mass of 1 UK ton");}, "uk_ton", GSL_CONST_MKSA_UK_TON, "kg", ConstantGroups::MassAndWeight}, 0145 {[]() { return i18n("Mass of 1 troy ounce");}, "troy_ounce", GSL_CONST_MKSA_TROY_OUNCE, "kg", ConstantGroups::MassAndWeight}, 0146 {[]() { return i18n("Mass of 1 carat");}, "carat", GSL_CONST_MKSA_CARAT, "kg", ConstantGroups::MassAndWeight}, 0147 {[]() { return i18n("Force of 1 gram weight");}, "gram_force", GSL_CONST_MKSA_GRAM_FORCE, "kg m / s^2", ConstantGroups::MassAndWeight}, 0148 {[]() { return i18n("Force of 1 pound weight");}, "pound_force", GSL_CONST_MKSA_POUND_FORCE, "kg m / s^2", ConstantGroups::MassAndWeight}, 0149 {[]() { return i18n("Force of 1 kilopound weight");}, "kilepound_force", GSL_CONST_MKSA_KILOPOUND_FORCE, "kg m / s^2", ConstantGroups::MassAndWeight}, 0150 {[]() { return i18n("Force of 1 poundal");}, "poundal", GSL_CONST_MKSA_POUNDAL, "kg m / s^2", ConstantGroups::MassAndWeight}, 0151 0152 // ThermalEnergyAndPower = addConstantsGroup(i18n("Thermal Energy and Power")); 0153 {[]() { return i18n("Energy of 1 calorie");}, "cal", GSL_CONST_MKSA_CALORIE, "kg m^2 / s^2", ConstantGroups::ThermalEnergyAndPower}, 0154 {[]() { return i18n("Energy of 1 British Thermal Unit");}, "btu", GSL_CONST_MKSA_BTU, "kg m^2 / s^2", ConstantGroups::ThermalEnergyAndPower}, 0155 {[]() { return i18n("Energy of 1 Therm");}, "therm", GSL_CONST_MKSA_THERM, "kg m^2 / s^2", ConstantGroups::ThermalEnergyAndPower}, 0156 {[]() { return i18n("Power of 1 horsepower");}, "hp", GSL_CONST_MKSA_HORSEPOWER, "kg m^2 / s^3", ConstantGroups::ThermalEnergyAndPower}, 0157 0158 // Pressure = addConstantsGroup(i18n("Pressure")); 0159 {[]() { return i18n("Pressure of 1 bar");}, "bar", GSL_CONST_MKSA_BAR, "kg / m s^2", ConstantGroups::Pressure}, 0160 {[]() { return i18n("Pressure of 1 standard atmosphere");}, "atm", GSL_CONST_MKSA_STD_ATMOSPHERE, "kg / m s^2", ConstantGroups::Pressure}, 0161 {[]() { return i18n("Pressure of 1 torr");}, "torr", GSL_CONST_MKSA_TORR, "kg / m s^2", ConstantGroups::Pressure}, 0162 {[]() { return i18n("Pressure of 1 meter of mercury");}, "mhg", GSL_CONST_MKSA_METER_OF_MERCURY, "kg / m s^2", ConstantGroups::Pressure}, 0163 {[]() { return i18n("Pressure of 1 inch of mercury");}, "inhg", GSL_CONST_MKSA_INCH_OF_MERCURY, "kg / m s^2", ConstantGroups::Pressure}, 0164 {[]() { return i18n("Pressure of 1 inch of water");}, "inh2o", GSL_CONST_MKSA_INCH_OF_WATER, "kg / m s^2", ConstantGroups::Pressure}, 0165 {[]() { return i18n("Pressure of 1 pound per square inch");}, "psi", GSL_CONST_MKSA_PSI, "kg / m s^2", ConstantGroups::Pressure}, 0166 0167 // Viscosity = addConstantsGroup(i18n("Viscosity")); 0168 {[]() { return i18n("Dynamic viscosity of 1 poise");}, "poise", GSL_CONST_MKSA_POISE, "kg / m s", ConstantGroups::Viscosity}, 0169 {[]() { return i18n("Kinematic viscosity of 1 stokes");}, "stokes", GSL_CONST_MKSA_STOKES, "m^2 / s", ConstantGroups::Viscosity}, 0170 0171 // LightAndIllumination = addConstantsGroup(i18n("Light and Illumination")); 0172 {[]() { return i18n("Luminance of 1 stilb");}, "stilb", GSL_CONST_MKSA_STILB, "cd / m^2", ConstantGroups::LightAndIllumination}, 0173 {[]() { return i18n("Luminous flux of 1 lumen");}, "lumen", GSL_CONST_MKSA_LUMEN, "cd sr", ConstantGroups::LightAndIllumination}, 0174 {[]() { return i18n("Illuminance of 1 lux");}, "lux", GSL_CONST_MKSA_LUX, "cd sr / m^2", ConstantGroups::LightAndIllumination}, 0175 {[]() { return i18n("Illuminance of 1 phot");}, "phot", GSL_CONST_MKSA_PHOT, "cd sr / m^2", ConstantGroups::LightAndIllumination}, 0176 {[]() { return i18n("Illuminance of 1 footcandle");}, "ftcandle", GSL_CONST_MKSA_FOOTCANDLE, "cd sr / m^2", ConstantGroups::LightAndIllumination}, 0177 {[]() { return i18n("Luminance of 1 lambert");}, "lambert", GSL_CONST_MKSA_LAMBERT, "cd sr / m^2", ConstantGroups::LightAndIllumination}, 0178 {[]() { return i18n("Luminance of 1 footlambert");}, "ftlambert", GSL_CONST_MKSA_FOOTLAMBERT, "cd sr / m^2", ConstantGroups::LightAndIllumination}, 0179 0180 // Radioactivity = addConstantsGroup(i18n("Radioactivity")); 0181 {[]() { return i18n("Activity of 1 curie");}, "Curie", GSL_CONST_MKSA_CURIE, "1 / s", ConstantGroups::Radioactivity}, 0182 {[]() { return i18n("Exposure of 1 roentgen");}, "Roentgen", GSL_CONST_MKSA_ROENTGEN, "A s / kg", ConstantGroups::Radioactivity}, 0183 {[]() { return i18n("Absorbed dose of 1 rad");}, "rad", GSL_CONST_MKSA_RAD, "m^2 / s^2", ConstantGroups::Radioactivity}, 0184 0185 // ForceAndEnergy = addConstantsGroup(i18n("Force and Energy")); 0186 {[]() { return i18n("SI unit of force");}, "Newton", GSL_CONST_MKSA_NEWTON, "kg m / s^2", ConstantGroups::ForceAndEnergy}, 0187 {[]() { return i18n("Force of 1 Dyne");}, "dyne", GSL_CONST_MKSA_DYNE, "kg m / s^2", ConstantGroups::ForceAndEnergy}, 0188 {[]() { return i18n("SI unit of energy");}, "Joule", GSL_CONST_MKSA_JOULE, "kg m^2 / s^2", ConstantGroups::ForceAndEnergy}, 0189 {[]() { return i18n("Energy 1 erg");}, "erg", GSL_CONST_MKSA_ERG, "kg m^2 / s^2", ConstantGroups::ForceAndEnergy}, 0190 }; 0191 0192 // clang-format on 0193 0194 const int _number_constants = sizeof(_constants) / sizeof(cons);