WarpTwin
Documentation for WarpTwin models and classes.
Loading...
Searching...
No Matches
WorldMagneticFieldModel.h
Go to the documentation of this file.
1/******************************************************************************
2* Copyright (c) ATTX INC 2025. All Rights Reserved.
3*
4* This software and associated documentation (the "Software") are the
5* proprietary and confidential information of ATTX INC. The Software is
6* furnished under a license agreement between ATTX and the user organization
7* and may be used or copied only in accordance with the terms of the agreement.
8* Refer to 'license/attx_license.adoc' for standard license terms.
9*
10* EXPORT CONTROL NOTICE: THIS SOFTWARE MAY INCLUDE CONTENT CONTROLLED UNDER THE
11* INTERNATIONAL TRAFFIC IN ARMS REGULATIONS (ITAR) OR THE EXPORT ADMINISTRATION
12* REGULATIONS (EAR99). No part of the Software may be used, reproduced, or
13* transmitted in any form or by any means, for any purpose, without the express
14* written permission of ATTX INC.
15******************************************************************************/
16/*
17WMM Magnetic field model
18
19Author: James Tabony
20*/
21/*
22Metadata for MS GUI:
23imdata = {"exclude" : True}
24*/
25
26#ifndef MODELS_ENVIRONMENT_WORLD_MAGNETIC_FIELD_MODEL_H
27#define MODELS_ENVIRONMENT_WORLD_MAGNETIC_FIELD_MODEL_H
28
29#include <string>
30
31#include "simulation/Model.h"
32#include "locations.h"
35
36namespace warptwin {
37
54 MODEL(WorldMagneticFieldModel)
55 public:
56 // Model params
57 // NAME TYPE DEFAULT VALUE
63 SIGNAL(filename, std::string, warptwinDir() + "data/WMM/WMM_2025.COF")
66 SIGNAL(N, int, 12)
68
69 // Model inputs
70 // NAME TYPE DEFAULT VALUE
73 SIGNAL(pos_body_planet__pcr, CartesianVector3, CartesianVector3({0.0, 0.0, 0.0}))
75
76 // Model Outputs
77 // NAME TYPE DEFAULT VALUE
80 SIGNAL(mag_field__NED, CartesianVector3, CartesianVector3({0.0, 0.0, 0.0}))
82 SIGNAL(mag_field__ECEF, CartesianVector3, CartesianVector3({0.0, 0.0, 0.0}))
84
85 int16 activate() override;
86 int16 deactivate() override;
87 protected:
88 int16 start() override;
89 int16 execute() override;
90
101 double _epoch;
102
103 // Local variables for lla coordinates
105 double _lon;
106
107 // Dummy variable for implicit returns that can be ignored
108 double _dummy;
109
110 // Local variable for magnitude of position vector
111 double _rad;
112
113 // Magnetic field vector components in geocentric coordinates [reference 1]
115
116 // Temporary variable for the time difference between .COF epoch and current decimal year
117 double dt;
118 // Variable for warning the user if the coefficient file used is not optimal
120
121 // Temporary value for Gauss coefficients after time interpolation at a given n and m
122 double _g_n_m, _h_n_m;
123 // Tempory value for the index in the coefficient array that corresponds to a given n and m
125
126 // Temporary variable for folding the evaluation of the Schmidt semi-normalized associated Legendre function
127 double _P_n_m;
128
129 // Variable for holding the model order on startup
130 int _N;
131 // Variable for warning the user if they change the model order after startup
133
134 // Arrays for holding the Schmidt normalized associated Legendre function outputs
135 double *_P, *_dP, *_PcupS;
136
137 // Boolean variable for tracking if at a singularity
139
140 // Temporary variables for faster computation
142
143 // Temporary DCM for coordinate transformations
145
146 };
147
148}
149
150#endif
#define SIGNAL(NAME, TYPE, INITIAL_VALUE)
Definition appmacros.h:27
#define START_PARAMS
Definition appmacros.h:42
#define END_OUTPUTS
Definition appmacros.h:33
#define END_PARAMS
Definition appmacros.h:47
#define START_OUTPUTS
Definition appmacros.h:28
#define END_INPUTS
Definition appmacros.h:40
#define START_INPUTS
Definition appmacros.h:35
Class defining a direction cosine matrix inherited from Matrix.
Definition DCM.h:69
#define CartesianVector3
Definition mathmacros.h:43
Class to propagate CR3BP dynamics in characteristic units.
Definition statistics.hpp:22
double _cos_m_lon
Definition WorldMagneticFieldModel.h:141
int16 start() override
Class to execute logging.
double _pow_a_by_r
Definition WorldMagneticFieldModel.h:141
bool _at_singularity
Definition WorldMagneticFieldModel.h:138
double _h_n_m
Definition WorldMagneticFieldModel.h:122
double _dummy
Dummy variables for ignoring unneeded function implicit returns.
Definition WorldMagneticFieldModel.h:108
double _epoch
Definition WorldMagneticFieldModel.h:101
SIGNAL(_mu, double, warpos::earth_wgs84.mu)
bool _WARN_CANT_CHANGE_N
Definition WorldMagneticFieldModel.h:132
double _sin_m_lon
Definition WorldMagneticFieldModel.h:141
double * _dP
Definition WorldMagneticFieldModel.h:135
double dt
Definition WorldMagneticFieldModel.h:117
double _gdot[NUMBER_OF_READ_COEFFICIENTS]
Definition WorldMagneticFieldModel.h:99
clockwerk::DCM _temp_NED_ECEF
Definition WorldMagneticFieldModel.h:144
double _rad
Definition WorldMagneticFieldModel.h:111
const int NUMBER_OF_READ_COEFFICIENTS
Definition magneticFieldUtils.hpp:30
int16 activate() override
double _g[NUMBER_OF_READ_COEFFICIENTS]
Implicit returns form the read coefficients function in magneticFieldUtils.h.
Definition WorldMagneticFieldModel.h:97
MODEL(Servo) public int16 deactivate() override
Model to simulate a servo's motion.
double _lon
Definition SphericalHarmonicsGravityModel.h:117
@ MODEL
Simplified dynamics model representing motion in the circular restricted 3 body problem.
Definition ImNode.h:31
double _g_n_m
Definition WorldMagneticFieldModel.h:122
double _Xprime
Definition WorldMagneticFieldModel.h:114
double _Yprime
Definition WorldMagneticFieldModel.h:114
double _P_n_m
Definition WorldMagneticFieldModel.h:127
double _lat_detic
Definition WorldMagneticFieldModel.h:104
double _hdot[NUMBER_OF_READ_COEFFICIENTS]
Definition WorldMagneticFieldModel.h:100
double _Zprime
Definition WorldMagneticFieldModel.h:114
double _lat_centric
Definition WorldMagneticFieldModel.h:104
double * _PcupS
Definition WorldMagneticFieldModel.h:135
int _index
Definition WorldMagneticFieldModel.h:124
double * _P
Definition WorldMagneticFieldModel.h:135
int16 execute() override
Function to check monitor input conditions and set trigger flag accordingly. Should be implemented in...
double _h[NUMBER_OF_READ_COEFFICIENTS]
Definition WorldMagneticFieldModel.h:98
int _N
Definition WorldMagneticFieldModel.h:130
bool _WARN_BAD_FILE_EPOCH
Definition WorldMagneticFieldModel.h:119