Renamed some things, added some new fuels
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / RocketScience.java
1 package com.billkuker.rocketry.motorsim;\r
2 \r
3 import java.util.HashSet;\r
4 import java.util.Set;\r
5 \r
6 import javax.measure.quantity.Pressure;\r
7 import javax.measure.quantity.Quantity;\r
8 import javax.measure.unit.NonSI;\r
9 import javax.measure.unit.ProductUnit;\r
10 import javax.measure.unit.SI;\r
11 import javax.measure.unit.Unit;\r
12 import javax.measure.unit.UnitFormat;\r
13 \r
14 public class RocketScience {\r
15         public static Unit<Pressure> PSI = new ProductUnit<Pressure>(NonSI.POUND_FORCE.divide(NonSI.INCH.pow(2)));\r
16         public static Unit<Impulse> NEWTON_SECOND = new ProductUnit<Impulse>(SI.NEWTON.times(SI.SECOND));\r
17         static{\r
18                 UnitFormat.getInstance().label(PSI, "psi");\r
19                 UnitFormat.getInstance().label(NEWTON_SECOND, "Ns");\r
20         }\r
21 \r
22         public interface MolarWeight extends Quantity {\r
23                 public static final Unit<MolarWeight> UNIT = new ProductUnit<MolarWeight>(\r
24                                 SI.KILOGRAM.divide(SI.MOLE));\r
25         }\r
26         \r
27         public interface Impulse extends Quantity {\r
28                 public static Unit<Impulse> UNIT = NEWTON_SECOND;\r
29         }\r
30 \r
31         public static enum UnitPreference{\r
32                 SI(new Unit[]{\r
33                                 javax.measure.unit.SI.MILLIMETER,\r
34                                 javax.measure.unit.SI.NEWTON,\r
35                                 javax.measure.unit.SI.MEGA(javax.measure.unit.SI.PASCAL),\r
36                                 NEWTON_SECOND\r
37                 }),\r
38                 NONSI(new Unit[]{\r
39                                 javax.measure.unit.NonSI.INCH,\r
40                                 javax.measure.unit.NonSI.POUND_FORCE,\r
41                                 PSI,\r
42                                 NEWTON_SECOND\r
43                 });\r
44                 \r
45                 public static UnitPreference preference = NONSI;\r
46                 \r
47                 protected Set<Unit<?>> units = new HashSet<Unit<?>>();\r
48                 \r
49                 UnitPreference( Unit u[] ){\r
50                         for ( Unit uu : u )\r
51                                 units.add(uu);\r
52                 }\r
53                 \r
54                 public Unit getPreferredUnit(Unit u){\r
55                         if ( units.contains(u) )\r
56                                 return u;\r
57                         for( Unit ret : units ){\r
58                                 if ( ret.isCompatible(u) ){\r
59                                         return ret;\r
60                                 }\r
61                         }\r
62                         return u;\r
63                 }\r
64         }\r
65 \r
66 }\r