TemperatureConversions.h

Go to the documentation of this file.
00001 
00009 /* Copyright (C) 2002 - 2009, Bernd Speiser */
00010 
00011 /* This file is part of Quantities.
00012 
00013 PhysicalQuantities is free software; you can redistribute it and/or
00014 modify it under the terms of the GNU General Public License
00015 as published by the Free Software Foundation; either version 2
00016 of the License, or (at your option) any later version.
00017 
00018 PhysicalQuantities is distributed in the hope that it will be useful,
00019 but WITHOUT ANY WARRANTY; without even the implied warranty of
00020 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00021 GNU General Public License for more details.
00022   
00023 You should have received a copy of the GNU General Public License
00024 along with this program; if not, write to the Free Software
00025 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
00026 02111-1307, USA.
00027 */
00028 
00029 #ifndef temperatureConversion_h
00030 #define temperatureConversion_h
00031 
00032 // Quantity includes
00033 #include "PhysicalQuantities/ThermodynamicTemperature.h"
00034 #include "PhysicalQuantities/CelsiusTemperature.h"
00035 #include "PhysicalQuantities/FahrenheitTemperature.h"
00036 
00037 namespace quantity {
00038 
00040 //  copy constructors for conversion between temperatures
00042 
00044 
00046 template<template<typename, typename> class M, typename ST, typename SU, typename DQT,
00047      template<typename, typename> class SM, typename SST, typename SSU, typename SDQT>
00048   struct convertValue<M<Quantity<thermodynamicTemperature::Class, ST>, 
00049     DerivedQuantity<thermodynamicTemperature::Class, SU, DQT> >,
00050       SM<Quantity<celsiusTemperature::Class, SST>, 
00051                                DerivedQuantity<celsiusTemperature::Class, SSU, SDQT> > >
00052   {
00053     static ST exec (const SM<Quantity<celsiusTemperature::Class, SST>, 
00054       DerivedQuantity<celsiusTemperature::Class, SSU, SDQT> > & quantity)
00055         {return Reverse<SU, ST>::VAL (Standardize<SSU, SST>::VAL (quantity.value ()) + 273.15);}
00056   };
00057 
00059 
00061 template<template<typename, typename> class M, typename ST, typename SU, typename DQT,
00062      template<typename, typename> class SM, typename SST, typename SSU, typename SDQT>
00063   struct convertValue<M<Quantity<thermodynamicTemperature::Class, ST>, 
00064     DerivedQuantity<thermodynamicTemperature::Class, SU, DQT> >,
00065       SM<Quantity<fahrenheitTemperature::Class, SST>, 
00066                                DerivedQuantity<fahrenheitTemperature::Class, SSU, SDQT> > >
00067   {
00068     static ST exec (const SM<Quantity<fahrenheitTemperature::Class, SST>, 
00069       DerivedQuantity<fahrenheitTemperature::Class, SSU, SDQT> > & quantity)
00070         {return Reverse<SU, ST>::VAL (5./9. * Standardize<SSU, SST>::VAL (quantity.value ()) + 459.67);}
00071   };
00072 
00074 
00076 template<template<typename, typename> class M, typename ST, typename SU, typename DQT,
00077      template<typename, typename> class SM, typename SST, typename SSU, typename SDQT>
00078   struct convertValue<M<Quantity<celsiusTemperature::Class, ST>, 
00079     DerivedQuantity<celsiusTemperature::Class, SU, DQT> >,
00080       SM<Quantity<thermodynamicTemperature::Class, SST>, 
00081                                DerivedQuantity<thermodynamicTemperature::Class, SSU, SDQT> > >
00082   {
00083     static ST exec (const SM<Quantity<thermodynamicTemperature::Class, SST>, 
00084       DerivedQuantity<thermodynamicTemperature::Class, SSU, SDQT> > & quantity)
00085         {return Reverse<SU, ST>::VAL (Standardize<SSU, SST>::VAL (quantity.value ()) - 273.15);}
00086   };
00087 
00089 
00091 template<template<typename, typename> class M, typename ST, typename SU, typename DQT,
00092      template<typename, typename> class SM, typename SST, typename SSU, typename SDQT>
00093   struct convertValue<M<Quantity<celsiusTemperature::Class, ST>, 
00094     DerivedQuantity<celsiusTemperature::Class, SU, DQT> >,
00095       SM<Quantity<fahrenheitTemperature::Class, SST>, 
00096                                DerivedQuantity<fahrenheitTemperature::Class, SSU, SDQT> > >
00097   {
00098     static ST exec (const SM<Quantity<fahrenheitTemperature::Class, SST>, 
00099       DerivedQuantity<fahrenheitTemperature::Class, SSU, SDQT> > & quantity)
00100         {return Reverse<SU, ST>::VAL (5./9. * Standardize<SSU, SST>::VAL (quantity.value ()) - 32.0);}
00101   };
00102 
00104 
00106 template<template<typename, typename> class M, typename ST, typename SU, typename DQT,
00107      template<typename, typename> class SM, typename SST, typename SSU, typename SDQT>
00108   struct convertValue<M<Quantity<fahrenheitTemperature::Class, ST>, 
00109     DerivedQuantity<fahrenheitTemperature::Class, SU, DQT> >,
00110       SM<Quantity<thermodynamicTemperature::Class, SST>, 
00111                                DerivedQuantity<thermodynamicTemperature::Class, SSU, SDQT> > >
00112   {
00113     static ST exec (const SM<Quantity<thermodynamicTemperature::Class, SST>, 
00114       DerivedQuantity<thermodynamicTemperature::Class, SSU, SDQT> > & quantity)
00115         {return Reverse<SU, ST>::VAL (9./5. * Standardize<SSU, SST>::VAL (quantity.value ()) - 459.67);}
00116   };
00117 
00119 
00121 template<template<typename, typename> class M, typename ST, typename SU, typename DQT,
00122      template<typename, typename> class SM, typename SST, typename SSU, typename SDQT>
00123   struct convertValue<M<Quantity<fahrenheitTemperature::Class, ST>, 
00124     DerivedQuantity<fahrenheitTemperature::Class, SU, DQT> >,
00125       SM<Quantity<celsiusTemperature::Class, SST>, 
00126                                DerivedQuantity<celsiusTemperature::Class, SSU, SDQT> > >
00127   {
00128     static ST exec (const SM<Quantity<celsiusTemperature::Class, SST>, 
00129       DerivedQuantity<celsiusTemperature::Class, SSU, SDQT> > & quantity)
00130         {return Reverse<SU, ST>::VAL (9./5. * Standardize<SSU, SST>::VAL (quantity.value ()) + 32.0);}
00131   };
00132 
00134 //  end copy constructors for conversion between temperatures
00136 
00137 }
00138 
00139 #endif /* temperatureConversion_h */

Generated on Mon Jul 27 15:55:45 2009 for Quantities by  doxygen 1.5.3