From 2cb9bd8c40b2e926c04074a942eb081ac77eb6d8 Mon Sep 17 00:00:00 2001 From: Christopher Jones <chrisdjones15@gmail.com> Date: Fri, 4 Dec 2020 12:36:48 -0600 Subject: [PATCH] Avoid taking lock during Evaluator constructor --- .../include/Evaluator/detail/Evaluator.h | 8 + DDParsers/src/Evaluator/Evaluator.cpp | 19 + DDParsers/src/Evaluator/setStdMath.cpp | 108 +++--- DDParsers/src/Evaluator/setSystemOfUnits.cpp | 342 +++++++++--------- 4 files changed, 252 insertions(+), 225 deletions(-) diff --git a/DDParsers/include/Evaluator/detail/Evaluator.h b/DDParsers/include/Evaluator/detail/Evaluator.h index 62d840ca9..ac706c88b 100644 --- a/DDParsers/include/Evaluator/detail/Evaluator.h +++ b/DDParsers/include/Evaluator/detail/Evaluator.h @@ -306,6 +306,14 @@ namespace dd4hep { */ void setStdMath(); + /** + * Used only during construction + */ + void setVariableNoLock(const char* name, double value); + void setFunctionNoLock(const char* name, double (*fun)(double)); + void setFunctionNoLock(const char* name, double (*fun)(double, double)); + + Struct* imp {0}; // private data Object(const Object &) = delete; // copy constructor is not allowed Object & operator=(const Object &) = delete; // assignment is not allowed diff --git a/DDParsers/src/Evaluator/Evaluator.cpp b/DDParsers/src/Evaluator/Evaluator.cpp index e94f838af..df8e3c55e 100644 --- a/DDParsers/src/Evaluator/Evaluator.cpp +++ b/DDParsers/src/Evaluator/Evaluator.cpp @@ -791,6 +791,12 @@ int Evaluator::Object::setVariable(const char * name, const char * expression) return setItem("", name, Item(expression), imp); } +void Evaluator::Object::setVariableNoLock(const char * name, double value) { + string item_name = name; + Item item(value); + imp->theDictionary[item_name] = item; +} + int Evaluator::Object::setFunction(const char * name,double (*fun)()) { return setItem("0", name, Item(FCN(fun).ptr), imp); } @@ -815,6 +821,19 @@ int Evaluator::Object::setFunction(const char * name, double (*fun)(double,doubl return setItem("5", name, Item(FCN(fun).ptr), imp); } +void Evaluator::Object::setFunctionNoLock(const char * name,double (*fun)(double)) { + string item_name = "1"+string(name); + Item item(FCN(fun).ptr); + imp->theDictionary[item_name] = item; +} + +void Evaluator::Object::setFunctionNoLock(const char * name, double (*fun)(double,double)) { + string item_name = "2"+string(name); + Item item(FCN(fun).ptr); + imp->theDictionary[item_name] = item; +} + + //--------------------------------------------------------------------------- bool Evaluator::Object::findVariable(const char * name) const { if (name == 0 || *name == '\0') return false; diff --git a/DDParsers/src/Evaluator/setStdMath.cpp b/DDParsers/src/Evaluator/setStdMath.cpp index e5fecd255..0f84ae368 100644 --- a/DDParsers/src/Evaluator/setStdMath.cpp +++ b/DDParsers/src/Evaluator/setStdMath.cpp @@ -73,65 +73,65 @@ namespace dd4hep { // S E T S T A N D A R D C O N S T A N T S - setVariable("pi", 3.14159265358979323846); - setVariable("e", 2.7182818284590452354); - setVariable("gamma", 0.577215664901532861); + setVariableNoLock("pi", 3.14159265358979323846); + setVariableNoLock("e", 2.7182818284590452354); + setVariableNoLock("gamma", 0.577215664901532861); - // setVariable("radian", 1.0); - // setVariable("rad", 1.0); - // setVariable("degree", 3.14159265358979323846/180.); - // setVariable("deg", 3.14159265358979323846/180.); - setVariable("radian", units::radian ); - setVariable("rad", units::radian ); - setVariable("degree", units::degree ); - setVariable("deg", units::degree ); - setVariable("int:epsilon", std::numeric_limits<int>::epsilon()); - setVariable("long:epsilon", std::numeric_limits<long>::epsilon()); - setVariable("float:epsilon", std::numeric_limits<float>::epsilon()); - setVariable("double:epsilon", std::numeric_limits<double>::epsilon()); + // setVariableNoLock("radian", 1.0); + // setVariableNoLock("rad", 1.0); + // setVariableNoLock("degree", 3.14159265358979323846/180.); + // setVariableNoLock("deg", 3.14159265358979323846/180.); + setVariableNoLock("radian", units::radian ); + setVariableNoLock("rad", units::radian ); + setVariableNoLock("degree", units::degree ); + setVariableNoLock("deg", units::degree ); + setVariableNoLock("int:epsilon", std::numeric_limits<int>::epsilon()); + setVariableNoLock("long:epsilon", std::numeric_limits<long>::epsilon()); + setVariableNoLock("float:epsilon", std::numeric_limits<float>::epsilon()); + setVariableNoLock("double:epsilon", std::numeric_limits<double>::epsilon()); // S E T S T A N D A R D F U N C T I O N S - setFunction("abs", eval_abs); - setFunction("fabs", eval_fabs); - setFunction("fmod", eval_fmod); - setFunction("min", eval_min); - setFunction("max", eval_max); - setFunction("sqrt", eval_sqrt); - setFunction("cbrt", eval_cbrt); - setFunction("pow", eval_pow); - setFunction("sin", eval_sin); - setFunction("cos", eval_cos); - setFunction("tan", eval_tan); - setFunction("asin", eval_asin); - setFunction("acos", eval_acos); - setFunction("atan", eval_atan); - setFunction("atan2", eval_atan2); - setFunction("sinh", eval_sinh); - setFunction("cosh", eval_cosh); - setFunction("tanh", eval_tanh); - setFunction("exp", eval_exp); - setFunction("exp2", eval_exp2); - setFunction("exp10", eval_exp10); - setFunction("expm1", eval_expm1); - setFunction("log", eval_log); - setFunction("logb", eval_logb); - setFunction("log10", eval_log10); - setFunction("log1p", eval_log1p); - setFunction("hypot", eval_hypot); - setFunction("erf", eval_erf); - setFunction("erfc", eval_erfc); - setFunction("gamma", eval_gamma); - setFunction("double", eval_double); - setFunction("int", eval_int); - setFunction("nint", eval_nint); - setFunction("floor", eval_floor); - setFunction("round", eval_round); - setFunction("ceil", eval_ceil); - setFunction("isnan", eval_isnan); - setFunction("isinf", eval_isinf); - setFunction("nearbyint", eval_nearbyint); + setFunctionNoLock("abs", eval_abs); + setFunctionNoLock("fabs", eval_fabs); + setFunctionNoLock("fmod", eval_fmod); + setFunctionNoLock("min", eval_min); + setFunctionNoLock("max", eval_max); + setFunctionNoLock("sqrt", eval_sqrt); + setFunctionNoLock("cbrt", eval_cbrt); + setFunctionNoLock("pow", eval_pow); + setFunctionNoLock("sin", eval_sin); + setFunctionNoLock("cos", eval_cos); + setFunctionNoLock("tan", eval_tan); + setFunctionNoLock("asin", eval_asin); + setFunctionNoLock("acos", eval_acos); + setFunctionNoLock("atan", eval_atan); + setFunctionNoLock("atan2", eval_atan2); + setFunctionNoLock("sinh", eval_sinh); + setFunctionNoLock("cosh", eval_cosh); + setFunctionNoLock("tanh", eval_tanh); + setFunctionNoLock("exp", eval_exp); + setFunctionNoLock("exp2", eval_exp2); + setFunctionNoLock("exp10", eval_exp10); + setFunctionNoLock("expm1", eval_expm1); + setFunctionNoLock("log", eval_log); + setFunctionNoLock("logb", eval_logb); + setFunctionNoLock("log10", eval_log10); + setFunctionNoLock("log1p", eval_log1p); + setFunctionNoLock("hypot", eval_hypot); + setFunctionNoLock("erf", eval_erf); + setFunctionNoLock("erfc", eval_erfc); + setFunctionNoLock("gamma", eval_gamma); + setFunctionNoLock("double", eval_double); + setFunctionNoLock("int", eval_int); + setFunctionNoLock("nint", eval_nint); + setFunctionNoLock("floor", eval_floor); + setFunctionNoLock("round", eval_round); + setFunctionNoLock("ceil", eval_ceil); + setFunctionNoLock("isnan", eval_isnan); + setFunctionNoLock("isinf", eval_isinf); + setFunctionNoLock("nearbyint", eval_nearbyint); } } // namespace tools diff --git a/DDParsers/src/Evaluator/setSystemOfUnits.cpp b/DDParsers/src/Evaluator/setSystemOfUnits.cpp index b1308cc95..13850ef1c 100644 --- a/DDParsers/src/Evaluator/setSystemOfUnits.cpp +++ b/DDParsers/src/Evaluator/setSystemOfUnits.cpp @@ -42,43 +42,43 @@ namespace dd4hep { // Length // metrum (Latin) and metron (Greek) "measure" const double m = meter; - setVariable("meter", m); - setVariable("metre", m); - setVariable("m", m); + setVariableNoLock("meter", m); + setVariableNoLock("metre", m); + setVariableNoLock("m", m); // Mass const double kg = kilogram; - setVariable("kilogram", kg); - setVariable("kg", kg); + setVariableNoLock("kilogram", kg); + setVariableNoLock("kg", kg); // Time // minuta secundam (Latin) "second small one" const double s = second; - setVariable("second", s); - setVariable("s", s); + setVariableNoLock("second", s); + setVariableNoLock("s", s); // Current // --- honors Andre-Marie Ampere (1775-1836) of France const double A = ampere; - setVariable("ampere", A); - setVariable("amp", A); - setVariable("A", A); + setVariableNoLock("ampere", A); + setVariableNoLock("amp", A); + setVariableNoLock("A", A); // Temperature // --- honors William Thomson, 1st Baron Lord Kelvin (1824-1907) of England const double K = kelvin; - setVariable("kelvin", K); - setVariable("K", K); + setVariableNoLock("kelvin", K); + setVariableNoLock("K", K); // Amount of substance const double mol = mole; - setVariable("mole", mol); - setVariable("mol", mol); + setVariableNoLock("mole", mol); + setVariableNoLock("mol", mol); // Luminous intensity const double cd = candela; - setVariable("candela", cd); - setVariable("cd", cd); + setVariableNoLock("candela", cd); + setVariableNoLock("cd", cd); // ====================================================================== // @@ -93,20 +93,20 @@ namespace dd4hep { const double rad = radians ; - setVariable("radian", rad); - setVariable("rad", rad); - setVariable("milliradian", milli_ * rad); - setVariable("mrad", milli_ * rad); + setVariableNoLock("radian", rad); + setVariableNoLock("rad", rad); + setVariableNoLock("milliradian", milli_ * rad); + setVariableNoLock("mrad", milli_ * rad); const double deg = rad*pi/180.; - setVariable("degree", deg); - setVariable("deg", deg); + setVariableNoLock("degree", deg); + setVariableNoLock("deg", deg); // Solid angle const double sr = 1.; - setVariable("steradian", sr); - setVariable("sr", sr); + setVariableNoLock("steradian", sr); + setVariableNoLock("sr", sr); // ====================================================================== // @@ -117,126 +117,126 @@ namespace dd4hep { // Frequency // --- honors Heinrich Rudolf Hertz (1857-1894) of Germany const double Hz = 1./s; - setVariable("hertz", Hz); - setVariable("Hz", Hz); + setVariableNoLock("hertz", Hz); + setVariableNoLock("Hz", Hz); // Force // --- honors Sir Isaac Newton (1642-1727) of England const double N = m * kg / (s*s); - setVariable("newton", N); - setVariable("N", N); + setVariableNoLock("newton", N); + setVariableNoLock("N", N); // Pressure // --- honors Blaise Pascal (1623-1662) of France const double Pa = N / (m*m); - setVariable("pascal", Pa); - setVariable("Pa", Pa); - setVariable("hPa", 100.0*Pa); + setVariableNoLock("pascal", Pa); + setVariableNoLock("Pa", Pa); + setVariableNoLock("hPa", 100.0*Pa); const double atm = 101325. * Pa; - setVariable("atmosphere", atm); - setVariable("atm", atm); + setVariableNoLock("atmosphere", atm); + setVariableNoLock("atm", atm); const double bar = 100000*Pa; - setVariable("bar", bar); + setVariableNoLock("bar", bar); // Energy // --- honors James Prescott Joule (1818-1889) of England const double J = N * m; - setVariable("joule", J); - setVariable("J", J); + setVariableNoLock("joule", J); + setVariableNoLock("J", J); // Power // --- honors James Watt (1736-1819) of Scotland const double W = J / s; - setVariable("watt", W); - setVariable("W", W); + setVariableNoLock("watt", W); + setVariableNoLock("W", W); // Electric charge // --- honors Charles-Augustin de Coulomb (1736-1806) of France const double C = A * s; - setVariable("coulomb", C); - setVariable("C", C); + setVariableNoLock("coulomb", C); + setVariableNoLock("C", C); // Electric potential // --- honors Count Alessandro Volta (1745-1827) of Italy const double V = J / C; - setVariable("volt", V); - setVariable("V", V); + setVariableNoLock("volt", V); + setVariableNoLock("V", V); // Electric resistance // --- honors Georg Simon Ohm (1787-1854) of Germany const double ohm = V / A; - setVariable("ohm", ohm); + setVariableNoLock("ohm", ohm); // Electric conductance // --- honors Ernst Werner von Siemens (1816-1892) or // his brother Sir William (Karl Wilhelm von) Siemens (1823-1883) // of Germany (England) const double S = 1./ ohm; - setVariable("siemens", S); - setVariable("S", S); + setVariableNoLock("siemens", S); + setVariableNoLock("S", S); // Electric capacitance // --- honors Michael Faraday (1791-1867) of England const double F = C / V; - setVariable("farad", F); - setVariable("F", F); + setVariableNoLock("farad", F); + setVariableNoLock("F", F); // Magnetic flux density // --- honors Nikola Tesla (1856-1943) of Croatia (United States) const double T = V * s / (m*m); - setVariable("tesla", T); - setVariable("T", T); + setVariableNoLock("tesla", T); + setVariableNoLock("T", T); // --- honors Karl Friedrich Gauss (1777-1855) of Germany const double Gs = 1.e-4*T; - setVariable("gauss", Gs); - setVariable("Gs", Gs); + setVariableNoLock("gauss", Gs); + setVariableNoLock("Gs", Gs); // Magnetic flux // --- honors Wilhelm Eduard Weber (1804-1891) of Germany const double Wb = V * s; - setVariable("weber", Wb); - setVariable("Wb", Wb); + setVariableNoLock("weber", Wb); + setVariableNoLock("Wb", Wb); // Inductance // --- honors Joseph Henry (1797-1878) of the United States const double H = Wb / A; - setVariable("henry", H); - setVariable("H", H); + setVariableNoLock("henry", H); + setVariableNoLock("H", H); // Luminous flux const double lm = cd * sr; - setVariable("lumen", lm); - setVariable("lm", lm); + setVariableNoLock("lumen", lm); + setVariableNoLock("lm", lm); // Illuminace const double lx = lm / (m*m); - setVariable("lux", lx); - setVariable("lx", lx); + setVariableNoLock("lux", lx); + setVariableNoLock("lx", lx); // Radioactivity // --- honors Antoine-Henri Becquerel (1852-1908) of France const double Bq = 1./s; - setVariable("becquerel", Bq); - setVariable("Bq", Bq); + setVariableNoLock("becquerel", Bq); + setVariableNoLock("Bq", Bq); // --- honors Pierre Curie (1859-1906) of France // and Marie Sklodowska Curie (1867-1934) of Poland - setVariable("curie", 3.7e+10 * Bq); - setVariable("Ci", 3.7e+10 * Bq); + setVariableNoLock("curie", 3.7e+10 * Bq); + setVariableNoLock("Ci", 3.7e+10 * Bq); // Specific energy // --- honors Louis Harold Gray, F.R.S. (1905-1965) of England const double Gy = J / kg; - setVariable("gray", Gy); - setVariable("Gy", Gy); + setVariableNoLock("gray", Gy); + setVariableNoLock("Gy", Gy); // Dose equivalent const double Sv = J / kg; - setVariable("sievert", Sv); - setVariable("Sv", Sv); + setVariableNoLock("sievert", Sv); + setVariableNoLock("Sv", Sv); // ====================================================================== // @@ -247,165 +247,165 @@ namespace dd4hep { // Length const double mm = milli_ * m; - setVariable("millimeter", mm); - setVariable("mm", mm); + setVariableNoLock("millimeter", mm); + setVariableNoLock("mm", mm); const double cm = centi_ * m; - setVariable("centimeter", cm); - setVariable("cm", cm); + setVariableNoLock("centimeter", cm); + setVariableNoLock("cm", cm); - setVariable("decimeter", deci_ * m); + setVariableNoLock("decimeter", deci_ * m); const double km = kilo_ * m; - setVariable("kilometer", km); - setVariable("km", km); + setVariableNoLock("kilometer", km); + setVariableNoLock("km", km); - setVariable("micrometer", micro_ * m); - setVariable("micron", micro_ * m); - setVariable("mum", micro_ * m); - setVariable("um", micro_ * m); - setVariable("nanometer", nano_ * m); - setVariable("nm", nano_ * m); + setVariableNoLock("micrometer", micro_ * m); + setVariableNoLock("micron", micro_ * m); + setVariableNoLock("mum", micro_ * m); + setVariableNoLock("um", micro_ * m); + setVariableNoLock("nanometer", nano_ * m); + setVariableNoLock("nm", nano_ * m); // --- honors Anders Jonas Angstrom (1814-1874) of Sweden - setVariable("angstrom", 1.e-10 * m); + setVariableNoLock("angstrom", 1.e-10 * m); // --- honors Enrico Fermi (1901-1954) of Italy - setVariable("fermi", 1.e-15 * m); - setVariable("femtometer", femto_ * m); - setVariable("fm", femto_ * m); + setVariableNoLock("fermi", 1.e-15 * m); + setVariableNoLock("femtometer", femto_ * m); + setVariableNoLock("fm", femto_ * m); // Length^2 - setVariable("m2", m*m); - setVariable("mm2", mm*mm); - setVariable("cm2", cm*cm); - setVariable("km2", km*km); + setVariableNoLock("m2", m*m); + setVariableNoLock("mm2", mm*mm); + setVariableNoLock("cm2", cm*cm); + setVariableNoLock("km2", km*km); const double barn = 1.e-28 * m*m; - setVariable("barn", barn); - setVariable("millibarn", milli_ * barn); - setVariable("mbarn", milli_ * barn); - setVariable("microbarn", micro_ * barn); - setVariable("nanobarn", nano_ * barn); - setVariable("picobarn", pico_ * barn); + setVariableNoLock("barn", barn); + setVariableNoLock("millibarn", milli_ * barn); + setVariableNoLock("mbarn", milli_ * barn); + setVariableNoLock("microbarn", micro_ * barn); + setVariableNoLock("nanobarn", nano_ * barn); + setVariableNoLock("picobarn", pico_ * barn); // LengthL^3 - setVariable("m3", m*m*m); - setVariable("mm3", mm*mm*mm); - setVariable("cm3", cm*cm*cm); - setVariable("cc", cm*cm*cm); - setVariable("km3", km*km*km); + setVariableNoLock("m3", m*m*m); + setVariableNoLock("mm3", mm*mm*mm); + setVariableNoLock("cm3", cm*cm*cm); + setVariableNoLock("cc", cm*cm*cm); + setVariableNoLock("km3", km*km*km); const double L = 1.e-3*m*m*m; - setVariable("liter", L); - setVariable("litre", L); - setVariable("L", L); - setVariable("centiliter", centi_ * L); - setVariable("cL", centi_ * L); - setVariable("milliliter", milli_ * L); - setVariable("mL", milli_ * L); + setVariableNoLock("liter", L); + setVariableNoLock("litre", L); + setVariableNoLock("L", L); + setVariableNoLock("centiliter", centi_ * L); + setVariableNoLock("cL", centi_ * L); + setVariableNoLock("milliliter", milli_ * L); + setVariableNoLock("mL", milli_ * L); // Length^-1 const double dpt = 1./m; - setVariable("diopter", dpt); - setVariable("dioptre", dpt); - setVariable("dpt", dpt); + setVariableNoLock("diopter", dpt); + setVariableNoLock("dioptre", dpt); + setVariableNoLock("dpt", dpt); // Mass const double g = 0.001*kg; - setVariable("gram", g); - setVariable("g", g); - setVariable("milligram", milli_ * g); - setVariable("mg", milli_ * g); + setVariableNoLock("gram", g); + setVariableNoLock("g", g); + setVariableNoLock("milligram", milli_ * g); + setVariableNoLock("mg", milli_ * g); // Time - setVariable("millisecond", milli_ * s); - setVariable("ms", milli_ * s); - setVariable("microsecond", micro_ * s); - setVariable("nanosecond", nano_ * s); - setVariable("ns", nano_ * s); - setVariable("picosecond", pico_ * s); + setVariableNoLock("millisecond", milli_ * s); + setVariableNoLock("ms", milli_ * s); + setVariableNoLock("microsecond", micro_ * s); + setVariableNoLock("nanosecond", nano_ * s); + setVariableNoLock("ns", nano_ * s); + setVariableNoLock("picosecond", pico_ * s); // Current - setVariable("milliampere", milli_ * A); - setVariable("mA", milli_ * A); - setVariable("microampere", micro_ * A); - setVariable("nanoampere", nano_ * A); + setVariableNoLock("milliampere", milli_ * A); + setVariableNoLock("mA", milli_ * A); + setVariableNoLock("microampere", micro_ * A); + setVariableNoLock("nanoampere", nano_ * A); // Frequency - setVariable("kilohertz", kilo_ * Hz); - setVariable("kHz", kilo_ * Hz); - setVariable("megahertz", mega_ * Hz); - setVariable("MHz", mega_ * Hz); + setVariableNoLock("kilohertz", kilo_ * Hz); + setVariableNoLock("kHz", kilo_ * Hz); + setVariableNoLock("megahertz", mega_ * Hz); + setVariableNoLock("MHz", mega_ * Hz); // Force - setVariable("kilonewton", kilo_ * N); - setVariable("kN", kilo_ * N); + setVariableNoLock("kilonewton", kilo_ * N); + setVariableNoLock("kN", kilo_ * N); // Pressure - setVariable("kilobar", kilo_ * bar); - setVariable("kbar", kilo_ * bar); - setVariable("millibar", milli_ * bar); - setVariable("mbar", milli_ * bar); + setVariableNoLock("kilobar", kilo_ * bar); + setVariableNoLock("kbar", kilo_ * bar); + setVariableNoLock("millibar", milli_ * bar); + setVariableNoLock("mbar", milli_ * bar); // Energy - setVariable("kilojoule", kilo_ * J); - setVariable("kJ", kilo_ * J); - setVariable("megajoule", mega_ * J); - setVariable("MJ", mega_ * J); - setVariable("gigajoule", giga_ * J); - setVariable("GJ", giga_ * J); + setVariableNoLock("kilojoule", kilo_ * J); + setVariableNoLock("kJ", kilo_ * J); + setVariableNoLock("megajoule", mega_ * J); + setVariableNoLock("MJ", mega_ * J); + setVariableNoLock("gigajoule", giga_ * J); + setVariableNoLock("GJ", giga_ * J); const double e_SI = 1.60217733e-19; // positron charge in coulomb const double ePlus = e_SI * C; // positron charge const double eV = ePlus * V; - setVariable("electronvolt", eV); - setVariable("eV", eV); - setVariable("kiloelectronvolt", kilo_ * eV); - setVariable("keV", kilo_ * eV); - setVariable("megaelectronvolt", mega_ * eV); - setVariable("MeV", mega_ * eV); - setVariable("gigaelectronvolt", giga_ * eV); - setVariable("GeV", giga_ * eV); - setVariable("teraelectronvolt", tera_ * eV); - setVariable("TeV", tera_ * eV); - setVariable("petaelectronvolt", peta_ * eV); - setVariable("PeV", peta_ * eV); + setVariableNoLock("electronvolt", eV); + setVariableNoLock("eV", eV); + setVariableNoLock("kiloelectronvolt", kilo_ * eV); + setVariableNoLock("keV", kilo_ * eV); + setVariableNoLock("megaelectronvolt", mega_ * eV); + setVariableNoLock("MeV", mega_ * eV); + setVariableNoLock("gigaelectronvolt", giga_ * eV); + setVariableNoLock("GeV", giga_ * eV); + setVariableNoLock("teraelectronvolt", tera_ * eV); + setVariableNoLock("TeV", tera_ * eV); + setVariableNoLock("petaelectronvolt", peta_ * eV); + setVariableNoLock("PeV", peta_ * eV); // Power - setVariable("kilowatt", kilo_ * W); - setVariable("kW", kilo_ * W); - setVariable("megawatt", mega_ * W); - setVariable("MW", mega_ * W); - setVariable("gigawatt", giga_ * W); - setVariable("GW", giga_ * W); + setVariableNoLock("kilowatt", kilo_ * W); + setVariableNoLock("kW", kilo_ * W); + setVariableNoLock("megawatt", mega_ * W); + setVariableNoLock("MW", mega_ * W); + setVariableNoLock("gigawatt", giga_ * W); + setVariableNoLock("GW", giga_ * W); // Electric potential - setVariable("kilovolt", kilo_ * V); - setVariable("kV", kilo_ * V); - setVariable("megavolt", mega_ * V); - setVariable("MV", mega_ * V); + setVariableNoLock("kilovolt", kilo_ * V); + setVariableNoLock("kV", kilo_ * V); + setVariableNoLock("megavolt", mega_ * V); + setVariableNoLock("MV", mega_ * V); // Electric capacitance - setVariable("millifarad", milli_ * F); - setVariable("mF", milli_ * F); - setVariable("microfarad", micro_ * F); - setVariable("uF", micro_ * F); - setVariable("nanofarad", nano_ * F); - setVariable("nF", nano_ * F); - setVariable("picofarad", pico_ * F); - setVariable("pF", pico_ * F); + setVariableNoLock("millifarad", milli_ * F); + setVariableNoLock("mF", milli_ * F); + setVariableNoLock("microfarad", micro_ * F); + setVariableNoLock("uF", micro_ * F); + setVariableNoLock("nanofarad", nano_ * F); + setVariableNoLock("nF", nano_ * F); + setVariableNoLock("picofarad", pico_ * F); + setVariableNoLock("pF", pico_ * F); // Magnetic flux density - setVariable("kilogauss", kilo_ * Gs); - setVariable("kGs", kilo_ * Gs); + setVariableNoLock("kilogauss", kilo_ * Gs); + setVariableNoLock("kGs", kilo_ * Gs); } } // namespace tools -- GitLab