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
31 protected void clear(){
\r
36 protected double burnrateCoefficient(Amount<Pressure> pressure) {
\r
38 Amount<Pressure> samplePressure = entries.tailMap(pressure).firstKey();
\r
39 Entry e = entries.get(samplePressure);
\r
41 } catch ( NoSuchElementException e ){
\r
42 log.warn("Pressure " + pressure + " is outside of expiermental range for " + this.getClass().getSimpleName());
\r
44 return entries.get(entries.lastKey()).a;
\r
45 } catch ( NoSuchElementException ee ){
\r
46 log.error("No data to return!");
\r
53 protected double burnrateExponent(Amount<Pressure> pressure) {
\r
55 Amount<Pressure> samplePressure = entries.tailMap(pressure).firstKey();
\r
56 Entry e = entries.get(samplePressure);
\r
58 } catch ( NoSuchElementException e ){
\r
59 log.warn("Pressure " + pressure + " is outside of expiermental range for " + this.getClass().getSimpleName());
\r
61 return entries.get(entries.lastKey()).n;
\r
62 } catch ( NoSuchElementException ee ){
\r
63 log.error("No data to return!");
\r