Apply zero-volume body warning earlier on + add component information

This commit is contained in:
SiboVG 2023-01-17 00:18:47 +01:00
parent 60896d2236
commit 4f3d63f1db
4 changed files with 21 additions and 23 deletions

View File

@ -1899,8 +1899,7 @@ Warning.RECOVERY_HIGH_SPEED = Recovery device deployment at high speed
Warning.NO_RECOVERY_DEVICE = No recovery device defined in the simulation. Warning.NO_RECOVERY_DEVICE = No recovery device defined in the simulation.
Warning.TUMBLE_UNDER_THRUST = Stage began to tumble under thrust. Warning.TUMBLE_UNDER_THRUST = Stage began to tumble under thrust.
Warning.EVENT_AFTER_LANDING = Flight Event occurred after landing: Warning.EVENT_AFTER_LANDING = Flight Event occurred after landing:
Warning.ZERO_VOLUME_BODY = Zero-volume bodies may not simulate accurately. Warning.ZERO_VOLUME_BODY = Zero-volume bodies may not simulate accurately
Warning.INLINE_PODS = Inline pods may not simulate accurately.
Warning.TUBE_SEPARATION = Space between tube fins may not simulate accurately. Warning.TUBE_SEPARATION = Space between tube fins may not simulate accurately.
Warning.TUBE_OVERLAP = Overlapping tube fins may not simulate accurately. Warning.TUBE_OVERLAP = Overlapping tube fins may not simulate accurately.
Warning.EMPTY_BRANCH = Simulation branch contains no data Warning.EMPTY_BRANCH = Simulation branch contains no data

View File

@ -1,5 +1,6 @@
package net.sf.openrocket.aerodynamics; package net.sf.openrocket.aerodynamics;
import static net.sf.openrocket.util.MathUtil.EPSILON;
import static net.sf.openrocket.util.MathUtil.pow2; import static net.sf.openrocket.util.MathUtil.pow2;
import java.util.*; import java.util.*;
@ -300,9 +301,9 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
SymmetricComponent sym = (SymmetricComponent) comp; SymmetricComponent sym = (SymmetricComponent) comp;
prevComp = sym.getPreviousSymmetricComponent(); prevComp = sym.getPreviousSymmetricComponent();
if( null == prevComp){ if (prevComp == null) {
if (sym.getForeRadius() - sym.getThickness() > MathUtil.EPSILON) { if (sym.getForeRadius() - sym.getThickness() > MathUtil.EPSILON) {
warnings.add(Warning.OPEN_AIRFRAME_FORWARD, sym.toString()); warnings.add(Warning.OPEN_AIRFRAME_FORWARD, sym.getName());
} }
} else { } else {
// Check for radius discontinuity // Check for radius discontinuity
@ -314,6 +315,12 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
warnings.add( Warning.DIAMETER_DISCONTINUITY, sym + ", " + prevComp); warnings.add( Warning.DIAMETER_DISCONTINUITY, sym + ", " + prevComp);
} }
} }
// Check for phantom tube
if ((sym.getLength() < MathUtil.EPSILON) ||
(sym.getAftRadius() < MathUtil.EPSILON && sym.getForeRadius() < MathUtil.EPSILON)) {
warnings.add(Warning.ZERO_VOLUME_BODY, sym.getName());
}
// double x = component.toAbsolute(Coordinate.NUL)[0].x; // double x = component.toAbsolute(Coordinate.NUL)[0].x;
// // Check for lengthwise discontinuity // // Check for lengthwise discontinuity

View File

@ -394,7 +394,6 @@ public abstract class Warning {
public static final Warning EVENT_AFTER_LANDING = new Other(trans.get("Warning.EVENT_AFTER_LANDING")); public static final Warning EVENT_AFTER_LANDING = new Other(trans.get("Warning.EVENT_AFTER_LANDING"));
public static final Warning ZERO_VOLUME_BODY = new Other(trans.get("Warning.ZERO_VOLUME_BODY")); public static final Warning ZERO_VOLUME_BODY = new Other(trans.get("Warning.ZERO_VOLUME_BODY"));
public static final Warning INLINE_PODS = new Other(trans.get("Warning.INLINE_PODS"));
public static final Warning TUBE_SEPARATION = new Other(trans.get("Warning.TUBE_SEPARATION")); public static final Warning TUBE_SEPARATION = new Other(trans.get("Warning.TUBE_SEPARATION"));
public static final Warning TUBE_OVERLAP = new Other(trans.get("Warning.TUBE_OVERLAP")); public static final Warning TUBE_OVERLAP = new Other(trans.get("Warning.TUBE_OVERLAP"));

View File

@ -46,10 +46,9 @@ public class FinSetCalc extends RocketComponentCalc {
protected final WarningSet geometryWarnings = new WarningSet(); protected final WarningSet geometryWarnings = new WarningSet();
private final double[] poly = new double[6]; private final double[] poly = new double[6];
private final double thickness; private final double thickness;
private final double bodyRadius; private final double bodyRadius;
private final double bodyLength;
private final int finCount; private final int finCount;
private final double cantAngle; private final double cantAngle;
private final FinSet.CrossSection crossSection; private final FinSet.CrossSection crossSection;
@ -62,20 +61,17 @@ public class FinSetCalc extends RocketComponentCalc {
///why not put FinSet in the parameter instead? ///why not put FinSet in the parameter instead?
public FinSetCalc(FinSet component) { public FinSetCalc(FinSet component) {
super(component); super(component);
FinSet fin = component;
thickness = fin.getThickness(); this.thickness = component.getThickness();
bodyLength = component.getParent().getLength(); this.bodyRadius = component.getBodyRadius();
bodyRadius = fin.getBodyRadius(); this.finCount = component.getFinCount();
finCount = fin.getFinCount();
this.cantAngle = component.getCantAngle();
this.span = component.getSpan();
this.finArea = component.getPlanformArea();
this.crossSection = component.getCrossSection();
cantAngle = fin.getCantAngle(); calculateFinGeometry(component);
span = fin.getSpan();
finArea = fin.getPlanformArea();
crossSection = fin.getCrossSection();
calculateFinGeometry(fin);
calculatePoly(); calculatePoly();
calculateInterferenceFinCount(component); calculateInterferenceFinCount(component);
} }
@ -101,10 +97,7 @@ public class FinSetCalc extends RocketComponentCalc {
return; return;
} }
if ((bodyLength < EPSILON) || (bodyRadius < EPSILON)) { if ((bodyRadius > 0) && (thickness > bodyRadius / 2)){
// Add warnings: Phantom Body
warnings.add(Warning.ZERO_VOLUME_BODY);
}else if( (0 < bodyRadius) && (thickness > bodyRadius / 2)){
// Add warnings (radius/2 == diameter/4) // Add warnings (radius/2 == diameter/4)
warnings.add(Warning.THICK_FIN); warnings.add(Warning.THICK_FIN);
} }