00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _GasConstant_h
00029 #define _GasConstant_h
00030
00031 #include "Quantity/UniqueConstant.h"
00032
00033 #include "PhysicalQuantities/AmountOfSubstance.h"
00034 #include "PhysicalQuantities/Energy.h"
00035 #include "PhysicalQuantities/ThermodynamicTemperature.h"
00036
00037 namespace Quantities {
00038
00039
00040 typedef BSUtilities::Rational<2> GasConstant_LE;
00041 typedef BSUtilities::Rational<1> GasConstant_M;
00042 typedef BSUtilities::Rational<-2> GasConstant_TI;
00043 typedef BSUtilities::Rational<0> GasConstant_E;
00044 typedef BSUtilities::Rational<-1> GasConstant_TE;
00045 typedef BSUtilities::Rational<-1> GasConstant_A;
00046 typedef BSUtilities::Rational<0> GasConstant_LU;
00047 class GasConstantGroup
00048 {
00049 public:
00050 typedef TYPELIST_7(GasConstant_LE, GasConstant_M,
00051 GasConstant_TI, GasConstant_E,
00052 GasConstant_TE, GasConstant_A,
00053 GasConstant_LU) DimTL;
00054 };
00055
00057 namespace GasConstantUnits {
00058
00059
00060 typedef Units::Unit<GasConstantGroup> GasConstantUnit;
00061
00062
00063 class JoulePerKelvinMoleUnit;
00064
00065
00066
00067 typedef TYPELIST_1(EnergyUnits::Joule) EnergyList;
00068
00069 typedef Units::CompoundElement<GasConstantGroup, EnergyList,
00070 BSUtilities::Rational<1> > EnergyElement;
00071
00072 typedef TYPELIST_2(AmountOfSubstanceUnits::Mole,
00073 AmountOfSubstanceUnits::MilliMole) AmountOfSubstanceList;
00074
00075 typedef Units::CompoundElement<GasConstantGroup, AmountOfSubstanceList,
00076 BSUtilities::Rational<-1> > AmountOfSubstanceElement;
00077
00078 typedef
00079 TYPELIST_1(ThermodynamicTemperatureUnits::Kelvin)
00080 ThermodynamicTemperatureList;
00081
00082 typedef
00083 Units::CompoundElement<GasConstantGroup, ThermodynamicTemperatureList,
00084 BSUtilities::Rational<-1> > ThermodynamicTemperatureElement;
00085
00086 typedef
00087 TYPELIST_3(EnergyElement, AmountOfSubstanceElement,
00088 ThermodynamicTemperatureElement) GasConstantCompoundList;
00089
00090 typedef Units::Compound<GasConstantGroup, GasConstantCompoundList>
00091 GasConstantCompoundUnits;
00092
00093 typedef Units::Composed<GasConstantCompoundUnits,
00094 TYPELIST_3(EnergyUnits::Joule, AmountOfSubstanceUnits::Mole,
00095 ThermodynamicTemperatureUnits::Kelvin)> JoulePerKelvinMole;
00096
00098 typedef TYPELIST_1(JoulePerKelvinMole) GasConstantUnits;
00099 }
00100
00101
00102
00103 typedef Dimensions::Dimension<GasConstantGroup> GasConstantDimension;
00104
00105
00106
00107 typedef Quantity<GasConstantGroup,
00108 GasConstantUnits::GasConstantUnits,
00109 GasConstantUnits::JoulePerKelvinMole> GasConstantQuantities;
00110
00111 typedef Loki::SingletonHolder<UniqueConstant
00112 <GasConstantQuantities> > GasConstant;
00113
00114 #define GASCONSTANT GasConstant::Instance()
00115
00116 }
00117
00118 #endif