12#if (__cplusplus < 201402L)
14#define CONSTTYPE const
15#define CONSTEXPR_DECOR
17#define FULLY_COMPILE_TIME_OPT
18#define CONSTTYPE constexpr
19#define CONSTEXPR_DECOR constexpr
40constexpr std::complex<real_precision>
im(0.0L, 1.0L);
41constexpr std::complex<real_precision>
iu(1.0L, 0.0L);
42constexpr std::complex<real_precision>
iz(0.0L, 0.0L);
47 unit_error(std::string
const text) : std::runtime_error(text) {}
52#if (__cplusplus < 201703L)
59template <
int N,
int... S>
65template <
typename T, std::
size_t N>
66constexpr T
array_add_n(
const std::array<T, N> a,
const std::array<T, N> b,
int n) {
69template <
typename T, std::size_t N,
int... S>
73template <
typename T, std::
size_t N>
74constexpr std::array<T, N>
array_add(
const std::array<T, N> a,
const std::array<T, N> b) {
78template <
typename T, std::
size_t N>
79constexpr T
array_minus_n(
const std::array<T, N> a,
const std::array<T, N> b,
int n) {
82template <
typename T, std::size_t N,
int... S>
86template <
typename T, std::
size_t N>
87constexpr std::array<T, N>
array_minus(
const std::array<T, N> a,
const std::array<T, N> b) {
91template <
typename T, std::
size_t N>
95template <
typename T, std::size_t N,
int... S>
99template <
typename T, std::
size_t N>
100constexpr std::array<T, N>
array_scale(
const std::array<T, N> a, T b) {
106template <
typename T, std::
size_t N>
107constexpr std::array<T, N>
array_add(
const std::array<T, N> a,
const std::array<T, N> b) {
108 std::array<T, N> res{};
109 for (
int i = 0; i <
N; ++i) res[i] = a[i] + b[i];
112template <
typename T, std::
size_t N>
113constexpr std::array<T, N>
array_minus(
const std::array<T, N> a,
const std::array<T, N> b) {
114 std::array<T, N> res{};
115 for (
int i = 0; i <
N; ++i) res[i] = a[i] - b[i];
118template <
typename T, std::
size_t N>
119constexpr std::array<T, N>
array_scale(
const std::array<T, N> a, T b) {
120 std::array<T, N> res{};
121 for (
int i = 0; i <
N; ++i) res[i] = a[i] * b;
127template <
typename T, std::
size_t N>
152 std::ostringstream os;
154 for (
auto i :
_data) os << i <<
", ";
176 return (
int{dim.
_data[0] != 0L} +
int{dim.
_data[1] != 0L} +
int{dim.
_data[2] != 0L} +
int{dim.
_data[3] != 0L} +
177 int{dim.
_data[4] != 0L} +
int{dim.
_data[5] != 0L} +
int{dim.
_data[6] != 0L});
349const std::map<const dimension7, const std::string>
description = {
373 {
area_flow_rate_d,
"area_flow_rate, kinematic_viscosity, thermal_diffusivity"},
389 {
energy_d,
"energy, moment_of_force, torque"},
401 "electric_area_charge_density, electric_flux_density, electric_displacement_field, electric_polarization_field"},
458 if (lhs.
dim != rhs.
dim) {
throw unit_error(
"add function must fit the same unit"); }
462 if (lhs.
dim != rhs.
dim) {
throw unit_error(
"minus function must fit the same unit"); }
471 std::ostringstream os;
472 os << std::setiosflags(std::ios::scientific) << std::setprecision(6) << std::setw(12) << u.
value;
530 {
"Y", 1e+24L}, {
"Z", 1e+21L}, {
"E", 1e+18L}, {
"P", 1e+15L}, {
"T", 1e+12L}, {
"G", 1e+9L},
531 {
"M", 1e+6L}, {
"k", 1e+3L}, {
"h", 1e+2L}, {
"c", 1e-2L}, {
"m", 1e-3L}, {
"µ", 1e-6L},
532 {
"n", 1e-9L}, {
"p", 1e-12L}, {
"f", 1e-15L}, {
"a", 1e-18L}, {
"z", 1e-21L}, {
"y", 1e-24L},
573 long double x = 2.7182818284590452353602874713526624977572470937000L;
574 if (n == 0)
return 1;
575 if (n < 0) x = 1. / x, n = -n;
590 long double sum = 0L;
591 long double term = 1L;
592 long int num_i = (
long int) (num);
593 long double pref = exp_int<long double>(num_i);
595 for (
unsigned int count = 1; term >= 1e-100 || count < 100; ++count) {
597 term *= ((
long double) num) / count;
603 long double log2 = 0.69314718055994530941723212145817656807550013436026L;
604 long double sum = 0L;
605 while (num < 1) num *= 2L, sum -= log2;
606 while (num > 2) num /= 2L, sum += log2;
607 long double term = ((
long double) num - 1) / ((
long double) num + 1);
608 long double mul = term * term;
609 for (
unsigned int tmp_odd = 1; term >= 1e-100 || tmp_odd < 100; tmp_odd += 2) {
610 sum += 2 * term / tmp_odd;
623template <
typename T, std::
size_t M, std::
size_t N>
625 static_assert(M != 0 && N != 0,
"matrix requires positive dimension7");
631#ifdef FULLY_COMPILE_TIME_OPT
639template <
typename T, std::
size_t M, std::
size_t N>
642 std::size_t i = 0, j = 0;
643 while (i < M && j < N) {
644 for (std::size_t ip = i + 1; ip < M; ++ip) {
645 if (std::abs(m[ip][j]) > std::abs(m[i][j])) {
646 for (std::size_t jp = 0; jp < N; ++jp) {
648 m[i][jp] = m[ip][jp];
655 if (!(std::abs(m[i][j]) < tolerance)) {
658 for (std::size_t jp = 0; jp < N; ++jp) m[i][jp] /= s;
661 for (std::size_t ip = 0; ip < M; ++ip) {
662 if (ip == i)
continue;
663 if (!(std::abs(m[ip][j]) < tolerance)) {
665 for (std::size_t jp = 0; jp < N; ++jp) m[ip][jp] -= s * m[i][jp];
672 det = (i == M) ? det : 0;
673 return std::make_tuple(m, i, det);
676template <
typename T, std::
size_t M>
680 for (std::size_t i = 0; i < M; ++i) {
682 for (std::size_t j1 = 0; j1 < M; ++j1, ++j) mI[i][j] = m[i][j1];
683 for (std::size_t j2 = 0; j2 < M; ++j2, ++j) mI[i][j] = (i == j2) ? T{1} : T{0};
687 if (std::get<1>(t) < M)
throw unit_error(
"not full rank in unit systems");
688 auto Iinv = std::get<0>(t);
689 for (std::size_t i = 0; i < M; ++i) {
691 for (std::size_t j2 = 0; j2 < M; ++j2, ++j) inv[i][j2] = Iinv[i][j];
696template <
typename T, std::
size_t M, std::
size_t N, std::
size_t P>
699 for (std::size_t i = 0; i < M; ++i) {
700 for (std::size_t j = 0; j < N; ++j) {
701 for (std::size_t k = 0; k < P; ++k) { c[i][k] += a[i][j] * b[j][k]; }
707template <
typename T, std::
size_t M, std::
size_t N>
709 for (std::size_t i = 0; i < M; ++i) {
710 for (std::size_t j = 0; j < N; ++j) os <<
" " << m[i][j];
723 std::array<uval, dimension7_size>
units;
732 :
units{u0, u1, u2, u3, u4, u5, u6},
734 u0.dim._data[0], u1.dim._data[0], u2.dim._data[0], u3.dim._data[0],
735 u4.dim._data[0], u5.dim._data[0], u6.dim._data[0],
736 u0.dim._data[1], u1.dim._data[1], u2.dim._data[1], u3.dim._data[1],
737 u4.dim._data[1], u5.dim._data[1], u6.dim._data[1],
738 u0.dim._data[2], u1.dim._data[2], u2.dim._data[2], u3.dim._data[2],
739 u4.dim._data[2], u5.dim._data[2], u6.dim._data[2],
740 u0.dim._data[3], u1.dim._data[3], u2.dim._data[3], u3.dim._data[3],
741 u4.dim._data[3], u5.dim._data[3], u6.dim._data[3],
742 u0.dim._data[4], u1.dim._data[4], u2.dim._data[4], u3.dim._data[4],
743 u4.dim._data[4], u5.dim._data[4], u6.dim._data[4],
744 u0.dim._data[5], u1.dim._data[5], u2.dim._data[5], u3.dim._data[5],
745 u4.dim._data[5], u5.dim._data[5], u6.dim._data[5],
746 u0.dim._data[6], u1.dim._data[6], u2.dim._data[6], u3.dim._data[6],
747 u4.dim._data[6], u5.dim._data[6], u6.dim._data[6]
781 return from_us.
eval(dim) / to_us.
eval(dim);
791 size_t pos = str.npos;
792 if ((pos = str.find_last_of(
" ")) != str.npos) {
795 v = std::stod(str.substr(0, pos));
796 }
catch (std::runtime_error& e) {
throw unit_error(str +
": parse_error in blankspace"); }
797 std::string token2 = str.substr(pos + 1);
798 return v *
parse(token2);
800 if ((pos = str.find_last_of(
"*")) != str.npos) {
801 std::string token1 = str.substr(0, pos);
802 std::string token2 = str.substr(pos + 1);
805 if ((pos = str.find_last_of(
"/")) != str.npos) {
806 std::string token1 = str.substr(0, pos);
807 std::string token2 = str.substr(pos + 1);
810 if ((pos = str.find_last_of(
"^")) != str.npos) {
811 std::string token1 = str.substr(0, pos);
812 std::string token2 = str.substr(pos + 1);
813 std::stringstream sstr(token2);
821 }
catch (std::out_of_range& e) {
826 }
catch (std::out_of_range& e) {
throw unit_error(str +
": parse_error in uval"); }
844 if (ovlp == 0)
throw unit_error(
"invalid conversion");
845 uval ux = (ovlp > 0) ? u : 1L / u;
859 value_type coeff_c = -diffT - coeff_h - 2 * coeff_k;
861 return vx * std::pow(
us.
_h, coeff_h) * std::pow(
us.
_c, coeff_c) * std::pow(
us.
_k, coeff_k) *
862 std::pow(
us.
_N, coeff_N);
870#define PHYS_DEFINE_UNITSYS_NAMESPACE(USNAME, _0, _1, _2, _3, _4, _5, _6) \
873 using value_type = real_precision; \
874 CONSTTYPE unitsys unit(_0, _1, _2, _3, _4, _5, _6); \
875 CONSTTYPE value_type c = unitsys::conv(phys::c_lightspeed, unit); \
876 CONSTTYPE value_type h = unitsys::conv(phys::h_Planck, unit); \
877 CONSTTYPE value_type hb = unitsys::conv(phys::hb_Planck, unit); \
878 CONSTTYPE value_type ke = unitsys::conv(phys::ke_Comloub, unit); \
879 CONSTTYPE value_type me = unitsys::conv(phys::me_mass, unit); \
880 CONSTTYPE value_type e = unitsys::conv(phys::e_charge, unit); \
881 CONSTTYPE value_type k = unitsys::conv(phys::k_Boltzman, unit); \
882 CONSTTYPE value_type N = unitsys::conv(phys::N_Avagadro, unit); \
883 CONSTTYPE value_type G = unitsys::conv(phys::G_gravitional_constant, unit); \
884 inline value_type as(const dimension7 dim, const uval& u) { return unitsys::as(dim, u, unit); } \
885 inline value_type as(const dimension7 dim, const std::string& str) { return unitsys::as(dim, str, unit); } \
972namespace plk = planck;
973namespace god = god_given;
974namespace sty = stoney;
975namespace nat = natural;
976namespace cgs = gauss;
977namespace ryd = rydberg;
978namespace hat = hartree;
979namespace au = ghartree;
980namespace qcd = quantum_chromo_dynamics;
1007#undef CONSTEXPR_DECOR
constexpr dimensions operator*(const dimensions rdim) const
constexpr bool operator>(const dimensions &rdim) const
constexpr bool operator!=(const dimensions &rdim) const
constexpr dimensions(const std::array< T, N > &a)
constexpr dimensions power(const T index) const
constexpr bool operator<(const dimensions &rdim) const
constexpr dimensions operator/(const dimensions rdim) const
constexpr bool operator==(const dimensions &rdim) const
std::string to_string() const
static value_type as(const dimension7 dim, const uval &u, const unitsys &us)
convert different quantities based on energy equivalence priciples [E] = [M]* c^2 = h / [T] = h * c /...
CONSTEXPR_DECOR value_type eval(const dimension7 dim) const
static CONSTEXPR_DECOR value_type conv(const uval &u, const unitsys &to_us)
static value_type conv(const unitsys &from_us, const std::string &str)
Coverting unit system to a string-style unit [dimension7 used].
static CONSTEXPR_DECOR value_type conv(const unitsys &from_us, const uval &u)
std::array< uval, dimension7_size > units
static value_type conv(const std::string &str, const unitsys &to_us)
Coverting string-style unit [dimension7 used] to a unit system.
static value_type as(const dimension7 dim, const std::string &str, const unitsys &us)
static CONSTEXPR_DECOR value_type conv(const dimension7 dim, const unitsys &from_us, const unitsys &to_us)
CONSTEXPR_DECOR unitsys(const uval &u0, const uval &u1, const uval &u2, const uval &u3, const uval &u4, const uval &u5, const uval &u6)
static uval parse(const std::string &str)
CONSTEXPR_DECOR value_type conv(const uval &u)
real_precision value_type
constexpr uval(const dimension7 &dim, const value_type &val=1L)
real_precision value_type
constexpr uval(const value_type &val)
value_type value
magnitude
Param::LoadOption::fromString value("fromFile", Param::LoadOption::fromFile) .export_values()
std::ostream & operator<<(std::ostream &os, matrix< T, M, N > m)
CONSTEXPR_DECOR long double exp(T num)
CONSTEXPR_DECOR T exp_int(int n)
CONSTEXPR_DECOR long double log(T num)
CONSTTYPE matrix< T, M, M > inverse(matrix< T, M, M > m)
CONSTTYPE matrix< T, M, P > matmul(matrix< T, M, N > a, matrix< T, N, P > b)
CONSTEXPR_DECOR long double pow(T a, T b)
CONSTTYPE std::tuple< matrix< T, M, N >, std::size_t, T > gauss_jordan_impl(matrix< T, M, N > m, T tolerance)
constexpr real_precision halfpi
constexpr real_precision eps32
constexpr std::complex< real_precision > iu(1.0L, 0.0L)
constexpr real_precision sqrttwo
constexpr real_precision eps8
constexpr real_precision eu
Euler'Constant.
constexpr real_precision pi
pi
constexpr real_precision sqrthalf
constexpr real_precision eps16
constexpr std::complex< real_precision > im(0.0L, 1.0L)
Imaginary Unit.
constexpr real_precision twopi
constexpr std::complex< real_precision > iz(0.0L, 0.0L)
constexpr std::array< T, N > array_minus_impl(const std::array< T, N > a, const std::array< T, N > b, seq< S... >)
constexpr dimension7 electric_flux_density_d
[I/L^2*T]
unitsys us
< generalized hatree is same to hatree when out of statistics (k_Boltzman & N_Avagadro)
constexpr dimension7 molar_energy_d
[M*L^2/T^2/N] energy per amount
static CONSTTYPE real_precision au_2_g_1mea
constexpr uval Bohr_length(length_d, 5.291772106712E-11L)
hb^2/(ke*me*e^2)
constexpr uval _base_1F(electric_capacitance_d)
1 faraday
constexpr dimension7 temperature_d
constexpr dimension7 energy_density_d
[M/L/T^2] energy per volume
constexpr uval _base_1Om(electric_resistance_d)
1 ohm
constexpr uval ep0_permittivity(permittivity_d, 8.854187817E-12L)
1/(4*pi*ke)
constexpr dimension7 electric_resistance_d
[M*L^2/T^3/I^2] electric potential versus current
constexpr dimension7 electric_resistivity_d
[M*L^3/T^3/I^2] electric_resistance time length
constexpr uval _base_1Wb(magnetic_flux_d)
1 weber
constexpr uval e_charge(electric_charge_d, 1.602176620898E-19L)
constexpr dimension7 wave_number_d
[L^-1]
constexpr uval _base_1Pa(pressure_d)
1 pascal
constexpr dimension7 acceleration_d
[L*T^-2]
constexpr dimension7 length_d
[L]
constexpr uval N_Avagadro(dimensionless_d/amount_of_substance_d, 6.02214085774E+23L)
constexpr dimension7 inertia_d
[M*L^2]
constexpr dimension7 mass_d
[M]
constexpr dimension7 magnetization_d
[I/L] magnetic moment per volume
constexpr dimension7 specific_heat_capacity_d
[L^2/T^2/Q] capacity per mass
constexpr dimension7 current_density_d
[I/L^2] current per area
constexpr uval _base_1A(electric_current_d)
1 ampere
constexpr real_precision reduce_l_nonzero(const dimension7 dim)
constexpr dimension7 absorbed_dose_rate_d
[L^2/T^3] (radiation) power per mass
constexpr dimension7 activity_of_a_nuclide_d
static const std::map< std::string, real_precision > uval_prefix
constexpr dimension7 mass_line_density_d
[M/L] mass per line
constexpr dimension7 luminous_flux_d
[J]
constexpr dimension7 current_d
constexpr dimension7 area_flow_rate_d
[L^2*T^-1]
const uval operator+(const uval &lhs, const uval &rhs)
constexpr dimension7 dimensionless_d
[1]
constexpr dimension7 force_d
[M*L/T^2] mass times acceleration
constexpr uval Faraday_constant(electric_charge_d/amount_of_substance_d, 96485.3328959L)
e*N
const uval operator-(const uval &lhs, const uval &rhs)
std::string to_string(const uval &u)
constexpr dimension7 action_d
[M*L^2/T] energy integrate time
constexpr dimension7 amount_of_substance_d
[N]
constexpr dimension7 energy_d
[M*L^2/T^2] force integrate length
constexpr uval amu_mass(mass_d, 1.66053886E-27L)
static CONSTTYPE real_precision au_2_angoverps
constexpr dimension7 radiance_d
[M/T^3] (radiation) power per area
constexpr dimension7 electric_charge_density_d
[I/L^3*T] charge per volume
constexpr dimension7 heat_density_flow_rate_d
[M/T^3] (heat flow) energy per area per time
constexpr uval _base_1Hz(frequency_d)
1 hertz
static CONSTTYPE real_precision au_2_amu
1mea means we measure a quantity at 1*N level.
constexpr dimension7 luminance_d
[J/L^2] luminous_intensity per area
static CONSTTYPE real_precision au_2_J_1mea
constexpr dimension7 thermal_insulance_d
[M^-1*T^3*Q] = 1 / heat_transfer_coefficient
constexpr dimension7 energy_line_density_d
[M/L/T^2] energy per line
constexpr dimension7 magnetic_permeability_d
[M*L/T^2/I^2], mu
constexpr dimension7 thermal_conductivity_d
[M*L/T^3/Q]
constexpr dimension7 power_area_density_d
[M/T^3] power per area
constexpr uval operator/(const uval &lhs, const uval &rhs)
constexpr dimension7 absorbed_dose_d
[L^2/T^2] (radiation) energy per mass
constexpr uval _base_1V(electric_potential_d)
1 volt
constexpr dimension7 magnetic_moment_d
[I*L^2] current integrate area
constexpr dimension7 electric_field_strenth_d
[M*L/T^3/I] electric potential per length
const std::map< const dimension7, const std::string > description
constexpr dimension7 pop_d
[L*T^-6]
constexpr dimension7 mass_flow_rate_d
[M/T] mass per time
constexpr uval _base_1s(time_d)
1 second
constexpr dimension7 permittivity_d
[M^-1*L^-2*T^4*I^2], epsilon
constexpr dimension7 mass_density_d
[M/L^3] mass per volume
constexpr real_precision reduce_l_energy(const dimension7 dim)
static CONSTTYPE real_precision au_2_wn
constexpr uval _base_1m(length_d)
1 meter
constexpr dimension7 wavelength_d
constexpr dimension7 mass_flow_acceleration_d
[M/T^2] mass per per time
constexpr uval _base_1S(electric_conductance_d)
1 siemens
constexpr dimension7 electric_polarization_field_d
[I/L^2*T], P = dipole moment pe volume
constexpr uval mn_mass(mass_d, 1.67492749804e-27L)
constexpr dimension7 torque_d
constexpr uval muB_magnetic_moment(magnetic_moment_d, 9.27400999457E-24L)
e*hb / (2*me)
constexpr dimension7 electric_potential_d
[M*L^2/T^3/I] energy per charge
constexpr dimension7 irradiance_d
[M/T^3] (radiation) power per area
constexpr dimension7 concentration_d
[N/L^3] amount per volume
constexpr uval _base_1(dimensionless_d)
1
constexpr dimension7 substance_permeability_d
[L^-1*T]
constexpr dimension7 electric_capacitance_d
[M^-1*L^-2*T^4*I^2] charge versus electric potential
constexpr uval Rydberg_constant(wave_number_d, 10973731.56850865L)
me* e ^ 4 / (8 * ep0 ^ 2 * h ^ 3 * c)
constexpr dimension7 electric_line_charge_density_d
[I/L*T] charge per line
constexpr dimension7 jerk_d
[L*T^-3]
constexpr dimension7 thermal_resistance_d
[M^-1*L^-2*T^3*Q]
constexpr dimension7 inductance_d
[M*L^2/T^2/I^2] magnetic flux versus current, L
constexpr dimension7 electric_dipole_moment_d
[I*L*T] charge times length
constexpr dimension7 crackle_d
[L*T^-5]
constexpr dimension7 power_d
[M*L^2/T^3] energy per time
constexpr dimension7 specific_volume_d
[L^3/M] volume per mass
constexpr uval _base_1kg(mass_d)
1 kilogram
constexpr dimension7 electric_chargme_mass_ratio_d
[M^-1*T*I]
constexpr dimension7 heat_capacity_d
[M*L^2/T^2/Q] energy per temperature
constexpr dimension7 thermal_resistivity_d
[M^-1*L^-1*T^3*Q]
constexpr uval muN_magnetic_moment(magnetic_moment_d, 5.05078369931E-27L)
e*hb / (2*mn)
constexpr dimension7 heat_transfer_coefficient_d
[M/T^3/Q] heat_flux_density versus temperature
constexpr dimension7 electric_displacement_field_d
[I/L^2*T], D
static const std::map< std::string, uval > uval_names
static CONSTTYPE real_precision au_2_ang
constexpr dimension7 heat_flow_rate_d
[M/L/T^3] (heat) energy per time
constexpr uval mp_mass(mass_d, 1.67262189821E-27L)
constexpr dimension7 electric_current_d
[I]
constexpr dimension7 angular_momentum_d
[M*L^2/T] torque integrate time
constexpr uval R_gas_constant(molar_entropy_d, 8.314459848L)
k * N
constexpr dimension7 volume_flow_rate_d
[L^3*T^-1]
constexpr dimension7 radiant_intensity_d
[M/L/T^3] (radiation) energy per time
constexpr dimension7 electric_area_charge_density_d
[I/L^2*T] charge per area
constexpr dimension7 luminous_intensity_d
[J]
constexpr dimension7 mass_area_density_d
[M/L^2] mass per area
constexpr dimension7 mass_flow_jerk_d
[M/T^3] mass per per per time
static CONSTTYPE real_precision au_2_fs
constexpr dimension7 illuminance_d
[J/L^2] luminous_intensity per area
static CONSTTYPE real_precision au_2_ps
constexpr dimension7 angular_acceleration_d
[T^-2]
constexpr dimension7 electric_charge_d
[I*T] current integrate time
constexpr uval _base_1W(power_d)
1 watt
constexpr std::array< T, N > array_scale(const std::array< T, N > a, T b)
constexpr dimension7 speed_d
[L*T^-1]
constexpr uval _base_1H(inductance_d)
1 henry
static CONSTTYPE real_precision au_2_kcal_1mea
constexpr dimension7 dose_equivalent_d
[L^2/T^2] (radiation) energy per mass
constexpr uval k_Boltzman(entropy_d, 1.3806490351E-23L)
constexpr uval G_gravitional_constant(dimension7{{3, -2, -1}}, 6.6740831E-11L)
constexpr uval _base_1C(electric_charge_d)
1 comloub
constexpr uval hb_Planck(action_d, 1.05457180013E-34L)
h/(2*pi)
constexpr dimension7 volume_d
[L^3]
constexpr dimension7 thermal_diffusivity_d
[L^2*T^-1] = thermal_conductivity / (specific_heat_capacity * density)
constexpr dimension7 absement_d
[L*T]
constexpr uval h_Planck(action_d, 6.62607004081E-34L)
constexpr std::array< T, N > array_minus(const std::array< T, N > a, const std::array< T, N > b)
constexpr dimension7 time_d
[T]
constexpr uval me_mass(mass_d, 9.1093835611E-31L)
constexpr dimension7 magnetic_field_strength_d
[I/L] magnetic moment per volume
constexpr uval operator*(const uval &lhs, const uval &rhs)
constexpr dimension7 electric_conductivity_d
[M^-1*L^-3*T^3*I^2] 1 / electric_resistivity
constexpr dimension7 surface_tension_d
[M/T^2] energy per area
constexpr dimension7 electric_conductance_d
[M^-1*L^-2*T^3*I^2] = 1 / electric_resistance
constexpr dimension7 entropy_d
[M*L^2/T^2/Q] energy per temperature
constexpr uval _base_1T(magnetic_flux_density_d)
1 tesla
dimensions< real_precision, dimension7_size > dimension7
constexpr dimension7 none_d
constexpr dimension7 kinematic_viscosity_d
[L^2*T^-1] = viscosity / density
constexpr uval ke_Comloub(dimensionless_d/permittivity_d, 8.9875517873681764E+9L)
constexpr uval _base_1N(force_d)
1 newton
constexpr dimension7 jounce_d
[L*T^-4]
constexpr dimension7 magnetic_flux_d
[M*L^2/T^2/I] energy per current = E/I = B*S
const int dimension7_size
dimension7 is provided as compile-time dimensional tools
constexpr T array_add_n(const std::array< T, N > a, const std::array< T, N > b, int n)
constexpr uval _nostd_1cal
1 cal (non-standard)
constexpr dimension7 molar_entropy_d
[M*L^2/T^2/Q/N] entropy per amount
constexpr dimension7 dynamic_viscosity_d
[M/L/T] force / (area * gradient(velocity))
constexpr uval Stefan_constant(dimension7{{0, -3, 1, -4}}, 5.67036713E-8L)
pi^2 kB^4/(60*hb^3*c^2)
constexpr dimension7 frequency_d
[T^-1]
constexpr dimension7 angular_velocity_d
[T^-1]
constexpr uval mu0_permeability(magnetic_permeability_d, 1.256637061E-6L)
4*pi*ke/c^2
static CONSTTYPE real_precision au_2_ev
constexpr dimension7 heat_density_d
[M/T^2] (heat flow) energy per area
static CONSTTYPE real_precision au_2_K
constexpr T array_scale_n(const std::array< T, N > a, T b_val, int n)
constexpr dimension7 amount_d
constexpr dimension7 magnetic_flux_density_d
[M*T^-2/I] B = electric_field_strenth_d versus velocity
constexpr std::array< T, N > array_add(const std::array< T, N > a, const std::array< T, N > b)
constexpr uval c_lightspeed(speed_d, 2.997924580E+8L)
constexpr dimension7 distance_d
constexpr dimension7 thermodynamic_temperature_d
[Q]
constexpr T array_minus_n(const std::array< T, N > a, const std::array< T, N > b, int n)
constexpr uval _base_1J(energy_d)
1 joule
constexpr dimension7 inv_temp_d
constexpr dimension7 heat_flux_density_d
[M/T^3] (heat) energy per time per area
constexpr dimension7 momentum_d
[M*L/T] force integrate time
constexpr dimension7 area_d
[L^2]
constexpr std::array< T, N > array_scale_impl(const std::array< T, N > a, const T b, seq< S... >)
constexpr dimension7 specific_energy_d
[L^2/T^2] (count) energy per mass
constexpr uval _base_1cd(luminous_intensity_d)
1 candela
constexpr dimension7 pressure_d
[M/L/T^2] energy per volume = force per area
constexpr std::array< T, N > array_add_impl(const std::array< T, N > a, const std::array< T, N > b, seq< S... >)
constexpr uval _base_1K(thermodynamic_temperature_d)
1 kelvins
constexpr uval _base_1mol(amount_of_substance_d)
1 mole
bool is_same_dimension7(const uval &lhs, const uval &rhs)
constexpr dimension7 inv_ener_d
[M^-1*L^-2*T^2], inversed energy, such as 1/(kB * T)
constexpr dimension7 moment_of_force_d
[M*L^2/T^2] force cross length
constexpr dimension7 power_density_d
[M/L/T^3] power per volume
uval power(const uval &lhs, const real_precision &index)
#define CONSTTYPE
make this header is compatible to c++11 standard
#define PHYS_DEFINE_UNITSYS_NAMESPACE(USNAME, _0, _1, _2, _3, _4, _5, _6)
static constexpr size_type column_size
static constexpr size_type row_size
CONSTEXPR_DECOR T * operator[](std::size_t i)
compile-time array operations realized in c++11 standard
unit_error(std::string const text)