00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _Concentration_h
00027 #define _Concentration_h
00028
00029
00030 #include "Quantities/Quantity/Variable.h"
00031 #include "Quantities/Quantity/Constant.h"
00032 #include "Quantities/Quantity/QuantityAggregates.h"
00033 #include "Quantities/PhysicalQuantities/AmountOfSubstance.h"
00034 #include "Quantities/PhysicalQuantities/Volume.h"
00035
00036 namespace quantity {
00037 namespace concentration {
00038
00040 class Class;
00041
00043 class Unit;
00044
00045
00046
00048 typedef unit::Component<amountOfSubstance::Units,
00049 BSUtilities::Rational<1> > AmountOfSubstanceComponent;
00050
00052 typedef unit::Component<volume::Units,
00053 BSUtilities::Rational<-1> > VolumeComponent;
00054
00055 typedef unit::ComposeBase<Unit,
00056 Loki::Typelist<AmountOfSubstanceComponent, Loki::Typelist<VolumeComponent,
00057 Loki::NullType> > > ConcentrationComposedUnit;
00058
00059 typedef unit::Composed<ConcentrationComposedUnit,
00060 Loki::Typelist<amountOfSubstance::Mole,
00061 Loki::Typelist<volume::Litre, Loki::NullType> > > MolePerLitre;
00062
00063 typedef unit::Composed<ConcentrationComposedUnit,
00064 Loki::Typelist<amountOfSubstance::Mole,
00065 Loki::Typelist<volume::CubicCentiMetre, Loki::NullType> > >
00066 MolePerCubicCentiMetre;
00067
00068 typedef unit::Composed<ConcentrationComposedUnit,
00069 Loki::Typelist<amountOfSubstance::MilliMole,
00070 Loki::Typelist<volume::Litre, Loki::NullType> > > MilliMolePerLitre;
00071
00072 typedef unit::Composed<ConcentrationComposedUnit,
00073 Loki::Typelist<amountOfSubstance::MilliMole,
00074 Loki::Typelist<volume::CubicCentiMetre, Loki::NullType> > >
00075 MilliMolePerCubicCentiMetre;
00076
00078 typedef Loki::Typelist<ConcentrationComposedUnit, Loki::NullType> Units;
00079
00080
00081
00082 typedef Quantity<Class> Quantity;
00083
00084 class DerivedConcentration;
00085
00086 }
00087
00089 template<>
00090 struct QuantityTraits<concentration::Class>
00091 {
00092 typedef
00093 dimension::Dimension<BSUtilities::Rational<-3>,
00094 BSUtilities::Rational<0>, BSUtilities::Rational<0>,
00095 BSUtilities::Rational<0>, BSUtilities::Rational<0>,
00096 BSUtilities::Rational<1>, BSUtilities::Rational<0> > Dimension;
00097 typedef concentration::Unit UnitType;
00098 typedef concentration::Units UnitList;
00099 typedef concentration::MolePerLitre DefaultUnit;
00100
00101 typedef concentration::DerivedConcentration DefaultDerivedQuantityType;
00102
00103 static const std::string NameString ();
00104 static const std::string SymbolString ();
00105
00106 };
00107
00108
00109 template<>
00110 struct DerivedQuantityTraits<concentration::Class, concentration::DerivedConcentration>
00111 {
00112 static const bool OverwriteName = false;
00113 static const bool OverwriteSymbol = false;
00114
00115 static const std::string NameString ();
00116 static const std::string SymbolString ();
00117
00118 };
00119
00120
00122 typedef Variable<concentration::Quantity> Concentration;
00123
00125 typedef Constant<concentration::Quantity> ConcentrationConstant;
00126
00128 typedef VariableVector<QuantityVector<concentration::Class>
00129 > ConcentrationVector;
00130
00131 }
00132
00133 #endif