Hi,
Using units and ublas for new code is great, but how about using both in
legacy code? I’ve got some legacy numerical code using primitive types, i
plan to use units for some reasons, i.e. to check performance using both
primitive types and boost::units types, and to check my code at compile time
which is its whole purpose after all. I spent a day and my code it’s already
broken, specially because of the initializations and ublas, some
self-explanatory code follows:
----- calculations.hpp -----------
//typedefs to get library-free code
#include <complex>
#include <iostream>
#if USING_BOOST_UNITS
#include
#include
//...
using namespace boost::units;
using namespace boost::units::si;
using namespace std;
typedef std::complex<double> complex_type;
typedef quantity tPotencial;
typedef quantity tIntensidad;
typedef quantity tResistancia;
//...
#elif
typedef double tPotencial;
typedef double tIntensidad;
typedef double tResistancia;
//...
#endif
------------------------------------------
----- some_legacy_calculations.cpp ------
#define USING_BOOST_UNITS
tPotencial tension = complex_type(12.5,0.0)*volts; //ok
tPotencial tension2 = complex_type(12.5,0.0); //auch!
some_file << tesion + tension2 << std::endl;
some_file.close();
//get Real part from 'tension' and pretend it's a current
quantity phony_tension = tension.value().real *
amperes;//compiler doesn't complain, but how do I prevent this to compile?
#undef USING_BOOST_UNITS
tPotencial tension = complex_type(12.5,0.0)*volts; //auch!
tPotencial tension2 = complex_type(12.5,0.0); //ok
some_file.open("/*some_file*/");
some_file >> tesion + tension2 >> std::endl; //auch!
#define USING_BOOST_UNITS
//use ublas
ublas::matrix admi(2, 2);
ublas::matrix ind(2, 1);
ind(0, 0) = complex_type (1, 0)*volts;
ind(1, 0) = complex_type (-1, 0)*volts;
admi(0, 0) = complex_type (0, -2)*siemens;
admi(0, 1) = complex_type (0, 2)*siemens;
admi(1, 0) = complex_type (0, 2)*siemens;
admi(1, 1) = complex_type (0, -2)*siemens;
int er = lapack::gesv(admi, ind);//auch!
------------------------------------------
For each of those problems i found some workaround but I'd like to discuss
whether it's ok or not.
Thanks for your time.