diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 87a2d18d9..4a9a4e1e2 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -1849,6 +1849,7 @@ PlotConfiguration.Groundtrack = Ground track Warning.LargeAOA.str1 = Large angle of attack encountered. Warning.LargeAOA.str2 = Large angle of attack encountered ( Warning.DISCONTINUITY = Discontinuity in rocket body diameter +Warning.OPEN_AIRFRAME_FORWARD = Forward end of airframe is open (radius is > 0) Warning.THICK_FIN = Thick fins may not simulate accurately. Warning.JAGGED_EDGED_FIN = Jagged-edged fin predictions may be inaccurate. Warning.LISTENERS_AFFECTED = Listeners modified the flight simulation diff --git a/core/src/net/sf/openrocket/aerodynamics/BarrowmanCalculator.java b/core/src/net/sf/openrocket/aerodynamics/BarrowmanCalculator.java index 4f22f93bb..96ae2c947 100644 --- a/core/src/net/sf/openrocket/aerodynamics/BarrowmanCalculator.java +++ b/core/src/net/sf/openrocket/aerodynamics/BarrowmanCalculator.java @@ -44,7 +44,6 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator { private double cacheDiameter = -1; private double cacheLength = -1; - public BarrowmanCalculator() { } @@ -299,14 +298,16 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator { } SymmetricComponent sym = (SymmetricComponent) comp; + prevComp = sym.getPreviousSymmetricComponent(); if( null == prevComp){ - prevComp = sym; - continue; - } - - // Check for radius discontinuity - if ( !MathUtil.equals(sym.getForeRadius(), prevComp.getAftRadius())) { - warnings.add( Warning.DIAMETER_DISCONTINUITY, sym + ", " + prevComp); + if (sym.getForeRadius() - sym.getThickness() > MathUtil.EPSILON) { + warnings.add(Warning.OPEN_AIRFRAME_FORWARD, sym.toString()); + } + } else { + // Check for radius discontinuity + if ( !MathUtil.equals(sym.getForeRadius(), prevComp.getAftRadius())) { + warnings.add( Warning.DIAMETER_DISCONTINUITY, sym + ", " + prevComp); + } } // double x = component.toAbsolute(Coordinate.NUL)[0].x; @@ -318,7 +319,6 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator { //} //componentX = component.toAbsolute(new Coordinate(component.getLengthAerodynamic()))[0].x; - prevComp = sym; }else if( comp instanceof ComponentAssembly ){ checkGeometry(configuration, comp, warnings); } diff --git a/core/src/net/sf/openrocket/aerodynamics/Warning.java b/core/src/net/sf/openrocket/aerodynamics/Warning.java index c746650ea..b3c31fecc 100644 --- a/core/src/net/sf/openrocket/aerodynamics/Warning.java +++ b/core/src/net/sf/openrocket/aerodynamics/Warning.java @@ -358,6 +358,9 @@ public abstract class Warning { /** A Warning that the body diameter is discontinuous. */ ////Discontinuity in rocket body diameter. public static final Warning DIAMETER_DISCONTINUITY = new Other(trans.get("Warning.DISCONTINUITY")); + + /** A Warning that a ComponentAssembly has an open forward end */ + public static final Warning OPEN_AIRFRAME_FORWARD = new Other(trans.get("Warning.OPEN_AIRFRAME_FORWARD")); /** A Warning that the fins are thick compared to the rocket body. */ ////Thick fins may not be modeled accurately.