Commit 5286ebe3 authored by Luc Maisonobe's avatar Luc Maisonobe

Improved tuning of DSST zonal force models.

Users can now tune max degree, max eccentricity power and max frequency
in true longitude for short period terms.
parent d8db552b
......@@ -18,8 +18,10 @@ package org.orekit.propagation.semianalytical.dsst.forces;
import java.util.List;
import org.apache.commons.math3.util.FastMath;
import org.orekit.attitudes.AttitudeProvider;
import org.orekit.errors.OrekitException;
import org.orekit.errors.OrekitInternalError;
import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider;
import org.orekit.frames.Frame;
import org.orekit.propagation.SpacecraftState;
......@@ -109,19 +111,28 @@ public class DSSTCentralBody implements DSSTForceModel {
final int maxDegreeZonalSP,
final int maxDegreeTesseralSP, final int maxOrderTesseralSP,
final int maxDegreeMdailyTesseralSP, final int maxOrderMdailyTesseralSP) {
// Zonal harmonics contribution
this.zonal = new DSSTZonal(provider, maxDegreeZonalSP);
// Tesseral harmonics contribution (only if order > 0)
this.tesseral = (provider.getMaxOrder() == 0) ?
null : new DSSTTesseral(centralBodyFrame,
centralBodyRotationRate,
provider,
maxDegreeTesseralSP, maxOrderTesseralSP,
maxDegreeMdailyTesseralSP,
maxOrderMdailyTesseralSP);
try {
// Zonal harmonics contribution
final int maxDegreeZonalShortPeriodics = FastMath.min(provider.getMaxDegree(), maxDegreeZonalSP);
final int maxEccPowZonalShortPeriodics = FastMath.min(maxDegreeZonalShortPeriodics - 1, 4);
this.zonal = new DSSTZonal(provider,
maxDegreeZonalShortPeriodics,
maxEccPowZonalShortPeriodics,
2 * maxDegreeZonalShortPeriodics + 1);
// Tesseral harmonics contribution (only if order > 0)
this.tesseral = (provider.getMaxOrder() == 0) ?
null : new DSSTTesseral(centralBodyFrame,
centralBodyRotationRate,
provider,
maxDegreeTesseralSP, maxOrderTesseralSP,
maxDegreeMdailyTesseralSP,
maxOrderMdailyTesseralSP);
} catch (OrekitException oe) {
// this should never happen
throw new OrekitInternalError(oe);
}
}
/** {@inheritDoc} */
......
......@@ -22,6 +22,11 @@
<body>
<release version="7.2" date="TBC"
description="">
<action dev="luc" type="update">
Improved tuning of DSST zonal force models. Users can now tune max degree,
max eccentricity power and max frequency in true longitude for short
period terms.
</action>
<action dev="luc" type="fix">
Fixed wrong continuous maneuver handling in backward propagation.
Fixes issue #236
......
......@@ -238,7 +238,7 @@ public class IntegratedEphemerisTest {
final CelestialBody sun = CelestialBodyFactory.getSun();
final CelestialBody moon = CelestialBodyFactory.getMoon();
final RadiationSensitive spacecraft = new IsotropicRadiationSingleCoefficient(20.0, 2.0);
dsstProp.addForceModel(new DSSTZonal(gravity, 8));
dsstProp.addForceModel(new DSSTZonal(gravity, 8, 7, 17));
dsstProp.addForceModel(new DSSTTesseral(itrf, Constants.WGS84_EARTH_ANGULAR_VELOCITY,
gravity, 8, 8, 8, 8));
dsstProp.addForceModel(new DSSTThirdBody(sun));
......
......@@ -176,6 +176,8 @@ public class DSSTPropagation {
CENTRAL_BODY_ORDER,
CENTRAL_BODY_DEGREE,
MAX_DEGREE_ZONAL_SHORT_PERIODS,
MAX_ECCENTRICITY_POWER_ZONAL_SHORT_PERIODS,
MAX_FREQUENCY_TRUE_LONGITUDE_ZONAL_SHORT_PERIODS,
MAX_DEGREE_TESSERAL_SHORT_PERIODS,
MAX_ORDER_TESSERAL_SHORT_PERIODS,
MAX_DEGREE_TESSERAL_M_DAILIES_SHORT_PERIODS,
......@@ -560,9 +562,10 @@ public class DSSTPropagation {
// Central Body Force Model with un-normalized coefficients
dsstProp.addForceModel(new DSSTZonal(unnormalized,
parser.getInt(ParameterKey.MAX_DEGREE_ZONAL_SHORT_PERIODS)));
dsstProp.addForceModel(new DSSTTesseral(earthFrame, rotationRate,
unnormalized,
parser.getInt(ParameterKey.MAX_DEGREE_ZONAL_SHORT_PERIODS),
parser.getInt(ParameterKey.MAX_ECCENTRICITY_POWER_ZONAL_SHORT_PERIODS),
parser.getInt(ParameterKey.MAX_FREQUENCY_TRUE_LONGITUDE_ZONAL_SHORT_PERIODS)));
dsstProp.addForceModel(new DSSTTesseral(earthFrame, rotationRate, unnormalized,
parser.getInt(ParameterKey.MAX_DEGREE_TESSERAL_SHORT_PERIODS),
parser.getInt(ParameterKey.MAX_ORDER_TESSERAL_SHORT_PERIODS),
parser.getInt(ParameterKey.MAX_DEGREE_TESSERAL_M_DAILIES_SHORT_PERIODS),
......
......@@ -153,11 +153,13 @@ central.body.degree = 36
## Central body gravity potential order
central.body.order = 0
## short period limits
max.degree.zonal.short.periods = 12
max.degree.tesseral.short.periods = 8
max.order.tesseral.short.periods = 8
max.degree.tesseral.m.dailies.short.periods = 12
max.order.tesseral.m.dailies.short.periods = 12
max.degree.zonal.short.periods = 12
max.eccentricity.power.zonal.short.periods = 11
max.frequency.true.longitude.zonal.short.periods = 25
max.degree.tesseral.short.periods = 8
max.order.tesseral.short.periods = 8
max.degree.tesseral.m.dailies.short.periods = 12
max.order.tesseral.m.dailies.short.periods = 12
## 3rd body Moon (true/false) [false]
third.body.moon = false
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment