1   /* Copyright 2002-2024 CS GROUP
2    * Licensed to CS GROUP (CS) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * CS licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.orekit.estimation;
18  
19  import org.orekit.models.earth.atmosphere.HarrisPriester;
20  import org.orekit.propagation.semianalytical.dsst.forces.DSSTAtmosphericDrag;
21  import org.orekit.propagation.semianalytical.dsst.forces.DSSTForceModel;
22  import org.orekit.propagation.semianalytical.dsst.forces.DSSTSolarRadiationPressure;
23  import org.orekit.propagation.semianalytical.dsst.forces.DSSTTesseral;
24  import org.orekit.propagation.semianalytical.dsst.forces.DSSTThirdBody;
25  import org.orekit.propagation.semianalytical.dsst.forces.DSSTZonal;
26  import org.orekit.utils.Constants;
27  
28  public enum DSSTForce {
29  
30      ZONAL() {
31          public DSSTForceModel getForceModel(DSSTContext context) {
32              return new DSSTZonal(context.gravity, 4, 3, 9);
33          }
34      },
35  
36      TESSERAL() {
37          public DSSTForceModel getForceModel(DSSTContext context) {
38              return new DSSTTesseral(context.earth.getBodyFrame(), Constants.WGS84_EARTH_ANGULAR_VELOCITY, context.gravity, 4, 4, 4, 8, 4, 4, 2);
39          }
40      },
41  
42      THIRD_BODY_SUN() {
43          public DSSTForceModel getForceModel(DSSTContext context) {
44              return new DSSTThirdBody(context.sun, context.gravity.getMu());
45          }
46      },
47  
48      THIRD_BODY_MOON() {
49          public DSSTForceModel getForceModel(DSSTContext context) {
50              return new DSSTThirdBody(context.moon, context.gravity.getMu());
51          }
52      },
53  
54      DRAG() {
55          public DSSTForceModel getForceModel(DSSTContext context) {
56              return new DSSTAtmosphericDrag(new HarrisPriester(context.sun, context.earth), context.dragSensitive, context.gravity.getMu());
57          }
58      },
59  
60      SOLAR_RADIATION_PRESSURE() {
61          public DSSTForceModel getForceModel(DSSTContext context) {
62              return new DSSTSolarRadiationPressure(context.sun, context.earth,
63                                                    context.radiationSensitive, context.gravity.getMu());
64          }
65      };
66  
67      public abstract DSSTForceModel getForceModel(DSSTContext context);
68  }