1 package com.billkuker.rocketry.motorsim.fuel;
\r
3 import java.util.NoSuchElementException;
\r
4 import java.util.SortedMap;
\r
5 import java.util.TreeMap;
\r
7 import javax.measure.quantity.Pressure;
\r
9 import org.apache.log4j.Logger;
\r
10 import org.jscience.physics.amount.Amount;
\r
12 public abstract class PiecewiseSaintRobertFuel extends SaintRobertFuel {
\r
14 private static final Logger log = Logger.getLogger(PiecewiseSaintRobertFuel.class);
\r
16 private class Entry{
\r
21 private SortedMap<Amount<Pressure>, Entry> entries = new TreeMap<Amount<Pressure>, Entry>();
\r
23 protected PiecewiseSaintRobertFuel(Type t) {
\r
27 protected void add(Amount<Pressure> p, final double _a, final double _n){
\r
28 entries.put(p, new Entry(){{a = _a; n = _n;}});
\r
32 protected double burnrateCoefficient(Amount<Pressure> pressure) {
\r
34 Amount<Pressure> samplePressure = entries.tailMap(pressure).firstKey();
\r
35 Entry e = entries.get(samplePressure);
\r
37 } catch ( NoSuchElementException e ){
\r
38 log.warn("Pressure " + pressure + " is outside of expiermental range for " + this.getClass().getSimpleName());
\r
40 return entries.get(entries.lastKey()).a;
\r
41 } catch ( NoSuchElementException ee ){
\r
42 log.error("No data to return!");
\r
49 protected double burnrateExponent(Amount<Pressure> pressure) {
\r
51 Amount<Pressure> samplePressure = entries.tailMap(pressure).firstKey();
\r
52 Entry e = entries.get(samplePressure);
\r
54 } catch ( NoSuchElementException e ){
\r
55 log.warn("Pressure " + pressure + " is outside of expiermental range for " + this.getClass().getSimpleName());
\r
57 return entries.get(entries.lastKey()).n;
\r
58 } catch ( NoSuchElementException ee ){
\r
59 log.error("No data to return!");
\r