|
Boost Users : |
Subject: [Boost-users] boost::units - converting from one derived_dimension to another across systems (imperial to metric)
From: Matt Vinson (matt.vinson_at_[hidden])
Date: 2018-11-20 04:09:20
Eisuke Kawashima: Thank You. I'll have a look. When I saw Boost.Units did not have imperial and we had to create it ourselves, I thought: the US is s 5 trillion dollar market, most of those markets need programming, all are on imperial. Boost.Units needs imperial and programmers would find and use it.
Steven Watanabe:Â Thank You.Â
This solution doesn't seem correct as it does not consider "length"....
boost::units::derived_dimension<
 boost::units::mass_base_dimension, 1,
 boost::units::time_base_dimension, -2>::typeI thought I'd at it (L M T^-2 L-1) but this didn't do well.:      typedef boost::units::derived_dimension<
         boost::units::length_base_dimension, 1,
         boost::units::mass_base_dimension, 1,
         boost::units::time_base_dimension, -2,
         boost::units::length_base_dimension, -1
      >::type
         lineal_force_dimension;
So, I tried the " typedef boost::mpl::divides<...>" solution as it has force and length. I am closer, I hope.
*.h------------------------------------------------------------------------------------------------------------------------------------------
namespace dimensional_analysis {
    typedef boost::units::length_base_dimension::dimension_type length_dimension;
    typedef boost::units::mass_base_dimension::dimension_type mass_dimension;
    typedef boost::units::make_system<
         boost::units::us::inch_base_unit,
         boost::units::us::pound_base_unit
      >::type ip_system;
   namespace lineal_force {
      typedef boost::mpl::divides<
         boost::units::force_dimension,
         boost::units::length_dimension>::type
         lineal_force_dimension;
      namespace imperial {
         typedef boost::units::unit<
            lineal_force_dimension,
            dimensional_analysis ::ip_system
         > lineal_force_unit;
         typedef boost::units::quantity<lineal_force_unit, double> pound_per_in_quantity;
         BOOST_UNITS_STATIC_CONSTANT(pound_per_inch, pound_per_in_quantity);
      }
      namespace si {
         typedef boost::units::unit<
            lineal_force_dimension,
            boost::units::si::system
         > lineal_force_unit;
         typedef boost::units::quantity<lineal_force_dimension, double> kg_per_meter_quantity;
         BOOST_UNITS_STATIC_CONSTANT(kg_per_meter, kg_per_meter_quantity);
      }
   }//lineal_force
}//dimensional_analysis
*.cpp------------------------------------------------------------------------------------------------------------------------------------------
BOOST_UNITS_DEFINE_CONVERSION_FACTOR(dimensional_analysis::lineal_force::imperial::lineal_force_unit, dimensional_analysis::lineal_force::si::lineal_force_unit, double, 17.858); // exact conversion
BOOST_UNITS_DEFAULT_CONVERSION(dimensional_analysis::lineal_force::imperial::lineal_force_unit, dimensional_analysis::lineal_force::si::lineal_force_unit);
BOOST_UNITS_DEFINE_CONVERSION_FACTOR(dimensional_analysis::lineal_force::si::lineal_force_unit, dimensional_analysis::lineal_force::imperial::lineal_force_unit, double, 0.0559974); // exact conversion
BOOST_UNITS_DEFAULT_CONVERSION(dimensional_analysis::lineal_force::si::lineal_force_unit, dimensional_analysis::lineal_force::imperial::lineal_force_unit);
//This is not converting force/length and is converting si -> imperial mass (only) = 110.2. Needs to consider force/length, =50*0.0559974
auto t1 = static_cast<boost::units::quantity<dimensional_analysis::lineal_force::imperial::lineal_force_unit>>(
50.0 * dimensional_analysis::lineal_force::si::lineal_force_unit::unit_type());
/ This is not converting force/length and i sconverting imperial -> si mass (only) = 22.7. Needs to consider force/length, =50*17.858
auto t2 = static_cast<boost::units::quantity<dimensional_analysis::lineal_force::si::lineal_force_unit>>(
50.0 * dimensional_analysis::lineal_force::imperial::lineal_force_unit::unit_type());
//This is again only converting mass and needs to convert force/length
const auto t3 = boost::units::conversion_factor(
dimensional_analysis::lineal_force::imperial::lineal_force_unit::unit_type(),
dimensional_analysis::lineal_force::si::lineal_force_unit::unit_type());
On Monday, November 19, 2018, 12:46:57 PM CST, boost-users-request_at_[hidden] <boost-users-request_at_[hidden]> wrote:
Send Boost-users mailing list submissions to
   boost-users_at_[hidden]
To subscribe or unsubscribe via the World Wide Web, visit
   https://lists.boost.org/mailman/listinfo.cgi/boost-users
or, via email, send a message with subject or body 'help' to
   boost-users-request_at_[hidden]
You can reach the person managing the list at
   boost-users-owner_at_[hidden]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Boost-users digest..."
Today's Topics:
 1. Re: boost::units - converting from one derived_dimension to
   another across systems (imperial to metric) (Eisuke Kawashima)
 2. Re: Fwd: Boost::Filesystem - How to iterate, through the
   whole drive (Richard Z?vodn?)
 3. Re: boost::units - converting from one derived_dimension to
   another across systems (imperial to metric) (Steven Watanabe)
 4. Re: [release] Boost 1.69.0 Beta 1 (Marshall Clow)
----------------------------------------------------------------------
Message: 1
Date: Tue, 20 Nov 2018 02:23:10 +0900
From: Eisuke Kawashima <e.kawaschima+boost_at_[hidden]>
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] boost::units - converting from one
   derived_dimension to another across systems (imperial to metric)
Message-ID:
   <CAHhxtD6A9Jwhv5amKnTa1bmNkD0U4_LGre8ySKFfQXK7w62oEQ_at_[hidden]>
Content-Type: text/plain; charset="UTF-8"
Hi list,
> I am having trouble converting from one derived_dimension to another across systems (imperial to metric). I'd like to convert, say, lb/in to, say, kg/m. I thought I would do the following but get a compiler error #:
>
> *.h--------------------------------------------------------------------------------
> namespace dimensional_analysis {
>Â Â namespace lineal_force {
>Â Â Â Â //lb/in
>Â Â Â Â typedef boost::units::derived_dimension<
>Â Â Â Â Â Â boost::units::us::pound_force_base_unit, 1,
>Â Â Â Â Â Â boost::units::us::inch_base_unit, -1
>Â Â Â Â >::type lb_per_inch_dimension;
>Â Â Â Â typedef boost::units::unit<
>Â Â Â Â Â Â lb_per_inch_dimension,
>Â Â Â Â Â Â dimensional_analysis::lengths::ip_system
>Â Â Â Â > lb_per_inch_unit;
>Â Â Â Â typedef boost::units::quantity<lb_per_inch_unit, double> lb_per_inch_quantity;
>Â Â Â Â BOOST_UNITS_STATIC_CONSTANT(lbpin, lb_per_inch_quantity);
>Â Â Â Â Â //kg/m
>Â Â Â Â typedef boost::units::derived_dimension<
>Â Â Â Â Â Â boost::units::si::kilogram_base_unit, 1,
>Â Â Â Â Â Â boost::units::si::meter_base_unit, -1
>Â Â Â Â >::type kg_per_meter_dimension;
>Â Â Â Â typedef boost::units::unit<
>Â Â Â Â Â Â kg_per_meter_dimension,
>Â Â Â Â Â Â boost::units::si::system
>Â Â Â Â > kg_per_meter_unit;
>Â Â Â Â typedef boost::units::quantity<kg_per_meter_unit, double> kg_per_meter_unit_quantity;
>Â Â Â Â BOOST_UNITS_STATIC_CONSTANT(kgpm, kg_per_meter_unit_quantity);
>Â Â }//lineal_force
> }//dimensional_analysis
>
> *.cp ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> //Do I need these?
> BOOST_UNITS_DEFINE_CONVERSION_FACTOR(dimensional_analysis::lineal_force::kg_per_meter_unit, dimensional_analysis::lineal_force::lb_per_inch_unit, double, 0.0559974); // exact conversion
> BOOST_UNITS_DEFAULT_CONVERSION(dimensional_analysis::lineal_force::kg_per_meter_unit, dimensional_analysis::lineal_force::lb_per_inch_unit);
>
> //This does not compile#
> const auto conv_factor_try0 = conversion_factor(dimensional_analysis::lineal_force::kg_per_meter_unit::unit_type(), dimensional_analysis::lineal_force::lb_per_inch_unit::unit_type());
>
> # *\boost_1_68_0\boost\units\detail\conversion_impl.hpp(340): error C2672: 'conversion_factor': no matching overloaded function found (compiling source file...*.cpp)
>
> Any help is appreciated
I opened a PR (https://github.com/boostorg/units/pull/32) to address
such a situation;
the following code
```cpp
#include <iostream>
#include <boost/units/base_units/us/inch.hpp>
#include <boost/units/base_units/us/pound_force.hpp>
#include <boost/units/io.hpp>
#include <boost/units/physical_dimensions.hpp>
#include <boost/units/systems/si.hpp>
int main() {
 auto force_us{1.0 * boost::units::us::pound_force};
 auto length_us{1.0 * boost::units::us::inch};
 boost::units::quantity<boost::units::si::force, double> force_si{force_us};
 boost::units::quantity<boost::units::si::length, double> length_si{length_us};
 std::cout << force_us << " = " << force_si << '\n';
 std::cout << length_us << " = " << length_si << '\n';
 std::cout << force_us / length_us << " = " << force_si / length_si << '\n';
 return 0;
}
```
will print
```
1 lbf = 4.44822 m kg s^-2
1 in = 0.0254 m
1 lbf in^-1 = 175.127 kg s^-2
```
Best
-- Eisuke Kawashima ------------------------------ Message: 2 Date: Mon, 19 Nov 2018 19:24:58 +0100 From: Richard Z?vodn? <zavodnyrichard_at_[hidden]> To: degski <degski_at_[hidden]>, boost-users_at_[hidden] Subject: Re: [Boost-users] Fwd: Boost::Filesystem - How to iterate,    through the whole drive Message-ID: <d13622b0-9a68-d109-c26e-b60e3a5c45c8_at_[hidden]> Content-Type: text/plain; charset="utf-8"; Format="flowed" I just wanna try it again here, maybe somebody will shop up who knows where is the problem as I unfortunately couldn't fix it with degski (but still, thank you for your time :)). His example (can be found below) doesn't work on my system. The problem is I can't start iteration from the drive root (for example E:\), because it will iterate only the directory above (E:\projects\boost\build) the directory that the executable is located in (the executable is located in E:\projects\boost\build\Debug). What is weird that if I move the executable to the different directory (let's say C:\Users\USER_NAME\Downloads) it will still iterate only the build directory. I tried to play with Visual Studio -> PROJECT_NAME -> Properties -> Debugging -> Working Directory, but without a success. According to degski he has the value of this entry set to $(ProjectDir) which is the same value as mine. Thank you. On 11/18/2018 9:04 AM, degski wrote: > On Sun, 18 Nov 2018 at 05:31, Richard Z?vodn? via Boost-users > <boost-users_at_[hidden] <mailto:boost-users_at_[hidden]>> wrote: > > > >  ---------- Forwarded message --------- >  From: *Richard Z?vodn?* <zavodnyrichard_at_[hidden] >  <mailto:zavodnyrichard_at_[hidden]>> >  Date: Sat, Nov 17, 2018, 3:59 PM >  Subject: Boost::Filesystem - How to iterate, through the whole drive >  To: <boost-users_at_[hidden] <mailto:boost-users_at_[hidden]>> > > >  Hey guys, I need iterate over all directories from starting path. >  If I start iterating from C:\some-dir it works very well, however >  if I try to iterate from C:\, it doesn't work. How can iterate >  through the whole drive? Thank you. > > >  Code is here: https://pastebin.com/mpsKJxH2 >  <https://pastebin.com/3J6FEMG5>. The problem I experience is >  commented right in the code section (line 1, 13 and 25). > > > This works for me, either with boost-1.68 (not that I think that > matters) or the STL-VC-15.9.1 (/std:c++17): > > #include <iostream> > #include <boost/filesystem.hpp> > > namespace fs = boost::filesystem; > > int main ( ) { > ??? for ( auto & p : fs::recursive_directory_iterator ( "d:\\" ) ) { > ??????? std::cout << p.path ( ) << '\n'; > ??? } > } > > Note that: "The iteration order is unspecified, except that each > directory entry is visited only once." > > degski > -- > /*/*?*/If something cannot go on forever, it will stop" - Herbert Stein*/ -------------- next part -------------- HTML attachment scrubbed and removed ------------------------------ Message: 3 Date: Mon, 19 Nov 2018 11:36:01 -0700 From: Steven Watanabe <watanabesj_at_[hidden]> To: Matt Vinson via Boost-users <boost-users_at_[hidden]> Subject: Re: [Boost-users] boost::units - converting from one    derived_dimension to another across systems (imperial to metric) Message-ID: <2b2343b9-a6d1-9409-896a-bcb3e153a0a0_at_[hidden]> Content-Type: text/plain; charset=utf-8 AMDG On 11/16/2018 05:27 AM, Matt Vinson via Boost-users wrote: > Thanks for input...Ok, I have errors creating a 'lineal force unit'. > In our branch of engineering, we have kips****/ft, kips/in, lbs/foot, lbs/in, kN/meter, Kn/cm, KN/mm, N/meter, N/cm, N/mm, Metric Ton/meter, Metric Ton/cm, Metric Ton/mm, KiloGram/meter $, KiloGram/cm, KiloGram/mm, etc....All these units* are loosing force divided by length. > After all the appreciated input in this thread, I thought I'd try this but it does not compile*** probably because force is "L M T^-2" and length is "L" which is not correct:?? ???? //Lineal Force > ?? ???? typedef boost::units::derived_dimension< > ?? ??? ??? ?boost::units::force_dimension, 1, > ?? ??? ??? ?boost::units::length_dimension, -1 > ?? ??? ?>::type lineal_force_dimension; > derived_dimension works with the base_dimensions not a dimension list. Use either: boost::units::derived_dimension<  boost::units::mass_base_dimension, 1,  boost::units::time_base_dimension, -2>::type or boost::mpl::divides<  boost::units::force_dimension,  boost::units::length_dimension>::type > How can I use Boost.Units to convert one force/length to another force/length: say, lb/in to, say, kg/m? > *not Boost.Units**, the units in the engineering math equation**A set of base units raised to rational exponents, e.g. m^1, kg^1, m^1/s^2. > *** ...\boost_1_68_0\boost\mpl\aux_\preprocessed\plain\less.hpp(20): error C2039: 'value': is not a member of 'boost::units::detail::dimension_list_tag' > <snip>> In Christ, Steven Watanabe ------------------------------ Message: 4 Date: Mon, 19 Nov 2018 10:44:34 -0800 From: Marshall Clow <mclow.lists_at_[hidden]> To: Boost users list <boost-users_at_[hidden]> Subject: Re: [Boost-users] [release] Boost 1.69.0 Beta 1 Message-ID:    <CAMBqOsgUjiDX+crLYDarqVtFrsnMZkSG+NC_DANh-D6npugbrg_at_[hidden]> Content-Type: text/plain; charset="utf-8" On Sun, Nov 18, 2018 at 6:55 PM Michael Powell via Boost-users < boost-users_at_[hidden]> wrote: > On Sun, Nov 18, 2018 at 9:29 PM Marshall Clow via Boost-users > <boost-users_at_[hidden]> wrote: > > > > Boost release 1.69.0 beta 1 is now available at: > >  <https://dl.bintray.com/boostorg/beta/1.69.0.beta1/source/> > > > > The SHA256 checksums are as follows: > > > > ee0ecd7d31f58474c1e0210089c9e66bd878d4d1e7436ac511e359aa4a9d3e86 > ./boost_1_69_0_b1.7z > > 3e25c46f2171799caabbeb419ba7859fffb62208f3a1c80798713377ab07af0e > ./boost_1_69_0_b1.tar.bz2 > > 71f4b57175058af1b8c320971cf29226e5a652931a679f7e1c086655147ecafb > ./boost_1_69_0_b1.tar.gz > > ec9ef7d2c9f0d41f560769e67bc7ff207cc999243a7dd6c3f6bcfbdbf0827a7b > ./boost_1_69_0_b1.zip > > > > For details of what's in the release, see < > https://www.boost.org/users/history/version_1_69_0.html>. > > > > Please download the beta, give it a try, and report any problems you > encounter. > > I'm confused. We just had a round of b1/rc1-3, didn't we? > Right. We had three "release candidates" beta1/rc1, rc2, and rc3. This is the actual beta release - it is the same as RC3. -- Marshall -------------- next part -------------- HTML attachment scrubbed and removed ------------------------------ Subject: Digest Footer _______________________________________________ Boost-users mailing list Boost-users_at_[hidden] https://lists.boost.org/mailman/listinfo.cgi/boost-users ------------------------------ End of Boost-users Digest, Vol 5041, Issue 4 ********************************************
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