https://mooseframework.inl.gov
Classes | Namespaces | Functions
Units.h File Reference

Go to the source code of this file.

Classes

class  MooseUnits
 Physical unit management class with runtime unit string parsing, unit checking, unit conversion, and output. More...
 

Namespaces

 std
 

Functions

MooseUnits std::pow (const MooseUnits &, int)
 
std::ostream & operator<< (std::ostream &os, const MooseUnits &u)
 

Function Documentation

◆ operator<<()

std::ostream& operator<< ( std::ostream &  os,
const MooseUnits u 
)

Definition at line 569 of file Units.C.

570 {
571  bool latex = (os.iword(MooseUnits::geti()) == 1);
572  static const std::vector<std::string> base_unit = {"m", "kg", "s", "A", "K", "at", "cd"};
573 
574  if (u._factor != 1.0 || u._base.empty())
575  {
576  os << u._factor;
577  if (!u._base.empty())
578  os << ' ';
579  }
580 
581  for (const auto i : index_range(u._base))
582  {
583  os << (i ? (latex ? "\\cdot " : "*") : "");
584 
585  const auto & unit = base_unit[int(u._base[i].first)];
586  if (latex)
587  os << "\\text{" << unit << "}";
588  else
589  os << unit;
590 
591  if (u._base[i].second != 1)
592  {
593  if (latex)
594  os << "^{" << u._base[i].second << '}';
595  else
596  os << '^' << u._base[i].second;
597  }
598  }
599 
600  return os;
601 }
std::basic_ostream< charT, traits > * os
Definition: InfixIterator.h:33
std::vector< std::pair< BaseUnit, int > > _base
base SI units and their exponents
Definition: Units.h:118
static int geti()
iosteam manipulator helper to toggle latex / text output
Definition: Units.C:562
Real _factor
conversion factor w.r.t. the base SI units
Definition: Units.h:109
void ErrorVector unsigned int
auto index_range(const T &sizable)