Boost logo

Boost Users :

Subject: [Boost-users] [boost][units] reciprocal conversion / inter unit conversion
From: Matthias Wohlgemuth (mail_at_[hidden])
Date: 2015-04-02 07:42:14


Dear users,

I just started to use boost::units for some simulations. However, I have
some problems with unit conversions and I hope someone can help me.

Let's say I have a quantity given in terms of energy in "electron volts"
(eV) with the unit "energy". I defined the unit the following:

BOOST_UNITS_DEFINE_BASE_UNIT_WITH_CONVERSIONS(si, electron_volts,
"electron volts", "eV", PHYSICAL_CONSTANT_DVALUE(e), si::energy, 5000);
namespace si {
   typedef make_system<electron_volts_base_unit>::type
        electron_volt_system;
   typedef unit<energy_dimension,si::electron_volt_system>
electron_volt_type;
   BOOST_UNITS_STATIC_CONSTANT(eV,electron_volt_type);
}

where PHYSICAL_CONSTANT_DVALUE(e) gives me the double representation of
si::constants::codata::e.value().
This works fine, for conversions like eV=>Joule etc.
(By the way, is there a more straight forward way, to define
non-rational scaled units, than defining a new unit sytem?)

Now I want to convert eV to nanometers (wavelength)
This is defined as:

wavelength = c/frequency = h*c/energy

(c=speed of light, h = Planck's constant)

I would again define a system with the base unit of wavelength and the
unit wavelength_type initialized e.g. with wavelength_nanometer.

First Problem:
What would be the derived dimension/unit: energy, length or a new
dimension like wavelength_dimenson?
If I would define it as something else than energy, I will have problems
when using quantity<si::electron_volt_type>(x*si::wavelength_nanometer)
or quantity<si::nanometer_type>(x*si::eV)

Second problem:
The relationship is reciprocal: wavelength ~ 1/energy. How do I define a
proper conversion?

Thanks for your help!

Cheers,

Matthias


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net