Blame view

src/ExternLib/Jupiter_JRM09_CAN_81/Jupiter_JRM09_CAN81.hh 15.6 KB
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
1
2
3
4
5
6
7
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/* 
2ee424c8   Hacene SI HADJ MOHAND   compile
8
 * File:   getjupiterMag.hh
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
9
10
11
12
13
 * Author: hacene
 *
 * Created on May 29, 2020, 2:50 PM
 */

2ee424c8   Hacene SI HADJ MOHAND   compile
14
15
#ifndef Jupiter_JRM09_CAN81_HH
#define Jupiter_JRM09_CAN81_HH
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
16

2ee424c8   Hacene SI HADJ MOHAND   compile
17
#include "Jupiter_JRM09_CAN81_tools.hh"
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
18
19
20
21
22
23

#include "Parameter.hh"
#include "ParamData.hh"
#include "DataTypeMath.hh"
#include "Operation.hh"
#include "SpiceKernelMgr.hh"
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
24
25
#include <vector>

84376d3c   Hacene SI HADJ MOHAND   compile pas
26
using namespace std;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
27
28

namespace AMDA {
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
29
    namespace Parameters {
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
30
31

        /**
2ee424c8   Hacene SI HADJ MOHAND   compile
32
33
         * @class GetjupiterMagCommon
         * @brief It is responsible to compute Jupiter Magnetic Field along an orbit. Abstract class
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
34
35
36
37
         * @details This class implement the interface Operation. Input vector are [R, Z] 
         */

        template<typename DataType, class TOutputParamData>
2ee424c8   Hacene SI HADJ MOHAND   compile
38
        class Jupiter_JRM09_CAN81 : public Operation {
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
39
40
41
42
43
44
        public:

            /**
             * @brief Constructor.
             * @details Create the ParamData type of the input ParamData.
             */
2ee424c8   Hacene SI HADJ MOHAND   compile
45
            Jupiter_JRM09_CAN81(Process& pProcess, ParamDataSpec<vector<DataType> >&paramInput, bool can) : Operation(pProcess),
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
46
47
48
49
50
            _paramInput(paramInput),
            _paramOutput(new TOutputParamData()), _can(can) {
                _paramDataOutput = _paramOutput;
            }

2ee424c8   Hacene SI HADJ MOHAND   compile
51
            virtual ~Jupiter_JRM09_CAN81() {
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
52
53
54
55
56
57
            }

            /**
             * @overload Operation::write(ParamDataIndexInfo &pParamDataIndexInfo)
             */
            void write(ParamDataIndexInfo &pParamDataIndexInfo) {
8015651d   Hacene SI HADJ MOHAND   comparaison ok
58
59
                AMDA::GETjupiterMAG_TOOLS::jupiter_JRM09_CAN81_tools tools;
                
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
60
61
62
                for (unsigned int _index = pParamDataIndexInfo._startIndex;
                        _index < pParamDataIndexInfo._startIndex + pParamDataIndexInfo._nbDataToProcess;
                        ++_index) {
8015651d   Hacene SI HADJ MOHAND   comparaison ok
63
64
65
66
67
68
69
70
                    vector<DataType> in = _paramInput.getDataList()[_index];
                    if (in[0] == 0)
                        in[0] = 1e-31;
                    vector<DataType> lVal;
                    lVal.resize(3);
                    lVal[0] = std::sqrt(in[0] * in[0] + in[1] * in[1] + in[2] * in[2]);
                    if (lVal[0] == 0)
                        lVal[0] = 1e-31;
d7f15348   Hacene SI HADJ MOHAND   theta +90
71
                    // 
171af14a   Elena.Budnik   correct input for...
72
                    lVal[1] = std::acos(in[2] / lVal[0])*180 / PI;
d7f15348   Hacene SI HADJ MOHAND   theta +90
73
74
                    //
                    
171af14a   Elena.Budnik   correct input for...
75
76
77
78
79
                    lVal[2] = std::atan2(in[1] , in[0])*180 / PI; 
//                     if (in[0] < 0) 
//                         lVal[2] += 180.0;
                    if (lVal[2] < 0)
                        lVal[2] += 360.0;
74df2c9b   Hacene SI HADJ MOHAND   seems ok
80
                             
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
81
82
                    double crtTime = _paramInput.getTime(_index);

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
83
84
                    vector<DataType> outputBrtp;
                    outputBrtp.resize(3);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
85

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
86
                    vector<DataType>outputBxyz;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
87
88
89
90
                    outputBxyz.resize(3);

                    DataType outputBm;

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
91
                    // GetJupiterMag00(vector<DataType> inputSphCoord, bool CAN, vector<DataType>& outputBrtp, DataType& outputBm, vector<DataType>& outputBxyz) 
a4957cae   Hacene SI HADJ MOHAND   preque
92
                    GetJupiterMag00(lVal, _can, outputBrtp, outputBm, outputBxyz);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
93
94
95
96
97
98
                    _paramOutput->pushTime(crtTime);
                    pushResult(outputBrtp, outputBm, outputBxyz);
                }
            }
        protected:

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
99
            virtual void pushResult(vector<DataType> fieldSph, DataType magnitude_, vector<DataType> fieldCoor) = 0;
84376d3c   Hacene SI HADJ MOHAND   compile pas
100

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
101
102
103
104
105
106
107
108
109
            /**
             * @brief Input paramter data.
             */
            ParamDataSpec<vector<DataType> >& _paramInput;

            /**
             * @brief Output parameter data.
             */
            TOutputParamData *_paramOutput;
84376d3c   Hacene SI HADJ MOHAND   compile pas
110
111
112
113
114
115

            /**
             * use can model or not
             */
            bool _can;

38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
116
        private:
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
117

a4957cae   Hacene SI HADJ MOHAND   preque
118
            int can81(vector<DataType>& inputCoor, vector<DataType>& outpField) {
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
119
120
121
122
123
124
125
126
127
128
129
130
131
                /**
                 * @brief Jupiter's external magnetic field model:
                 * @details ;   The Connerney+1981_JGR model: Modeling the Jovian Current Sheet and Inner Magnetophere.
                 *The CAN model should be only used near the Jupiter (<~30 RJ).
                 *Input: rho and z in cylindrical coords, z is along the magnetic axis.
                 *Output: Brho and Bz (nT) also in cylindrical coords. Note that the model is axis-symmetric.
                 */

                //   [constants]
                double D = 2.5; // Rj
                double a = 5.0; // Rj
                double b = 50.0; // 70.0         ; Rj         ; 50.0 in Connerney1981
                double mu0_I0 = 450.0; //;   175.0*2       ; 225.0*2 in Connerney1981
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
132
133
134

                double rho = inputCoor[0];
                double z = inputCoor[1];
84376d3c   Hacene SI HADJ MOHAND   compile pas
135
                double F1, F2, F3, tmp, Bz, Brho, Brho2, Bz2;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
136

8015651d   Hacene SI HADJ MOHAND   comparaison ok
137

38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
138
139
140
141
                // [Approximate formulas given in Connerney+1981_The magnetic field in Jupiter.]
                // [Cylindrical coordinates: in nT]

                if (rho < a) {
a1d9b71f   Hacene SI HADJ MOHAND   avec can semble ok
142
                    F1 = sqrt((z - D)*(z - D) + a * a);
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
143
144
                    F2 = sqrt((z + D)*(z + D) + a * a);
                    F3 = sqrt(z * z + a * a);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
145
146
147
148
149

                    Brho = 0.5 * rho * (1.0 / F1 - 1.0 / F2);
                    tmp = (z - D) / (F1 * F1 * F1) - (z + D) / (F2 * F2 * F2);
                    Bz = 2.0 * D / F3 - 0.25 * rho * rho*tmp;
                } else {
a1d9b71f   Hacene SI HADJ MOHAND   avec can semble ok
150
                    F1 = sqrt((z - D)*(z - D) + rho * rho);
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
151
152
                    F2 = sqrt((z + D)*(z + D) + rho * rho);
                    F3 = sqrt(z * z + rho * rho);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
153
154

                    Brho = (F1 - F2 + 2 * D) / rho;
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
155
156
                    if (abs(z) > D && z < 0) Brho = (F1 - F2 - 2 * D) / rho;
                    if (abs(z) < D) Brho = (F1 - F2 + 2 * z) / rho;
a1d9b71f   Hacene SI HADJ MOHAND   avec can semble ok
157
                    Brho = Brho - 0.25 * a * a * rho * (1.0 / (F1 * F1 * F1) - 1.0 / (F2 * F2 * F2));
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
158
159
160
                    tmp = (z - D) / (F1 * F1 * F1) - (z + D) / (F2 * F2 * F2);
                    Bz = 2.0 * D / F3 - 0.25 * a * a*tmp;
                }
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
161
162
163
                F1 = sqrt((z - D)*(z - D) + b * b);
                F2 = sqrt((z + D)*(z + D) + b * b);
                F3 = sqrt(z * z + b * b);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
164
165
166
167
168
169
170
171
172
                Brho2 = 0.5 * rho * (1 / F1 - 1 / F2);
                Bz2 = 2 * D / F3 - 0.25 * rho * rho * ((z - D) / (F1 * F1 * F1) - (z + D) / (F2 * F2 * F2));

                Brho -= Brho2;
                Bz -= Bz2;

                Brho *= 0.5 * mu0_I0;
                Bz *= 0.5 * mu0_I0;
                outpField[0] = Brho;
a1d9b71f   Hacene SI HADJ MOHAND   avec can semble ok
173
                outpField[1] = Bz;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213

                return 0;
            };

            /**
             * GetJupiterMag00.pro
              =================================================
             Description:
                   This program is to calculate the Jovian magnetic field of JRM09 (Connerney et al., 2018) and
                    CAN (Connerney et al., 1981) model.

                    All of the relevant subroutines are included in this single file, including the Schmdt coefficients
                    needed in JRM09 model.

                   (1) Jupiter's Magnetic field Model: JRM09 (+CAN), CAN.
   (2) Refer to: Connerney+2018_GRL  JRM09 model
                       Connerney+1981            CAN model
   (3) All the coordinates used here are Right-Hand-Side, because of SPICE convention.
   (4) The positions can be in Arrays, i.e., multi-positions at one time, which can be more efficient.

 Input:
   r (Rj), theta (deg), phi (deg), spherical coordinates in System III RHS (i.e., IAU_Jupiter), better use double!

   optional:
       /CAN              include the CAN model or not (true = yes)
 Output:
   Br (nT), Bt (nT), Bp (nT), Bmag (nT) in System III RHS.
   Bxyz = Bxyz   optional output Bxyz in System III RHS

Example:
   GetJupiterMag00, [20.0d0,20.00000001d0], [90.0d0,90.000001d0], [120.0d0, 120.0d0], $
     Br, Bt, Bp, Bmag1, Bxyz = Bxyz, /can
   GetJupiterMag00, 20.0d0, 90.000001d0, 120.0d0, Br, Bt, Bp, Bmag2, Bxyz = Bxyz, /can

 History:
   (1) writen by Yuxian Wang 2020-01-16 02:26:49
   ywang@irap.omp.eu + yxwang@spaceweather.ac.cn
 =================================================
             */

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
214
            int GetJupiterMag00(vector<DataType> inputSphCoord, bool CAN, vector<DataType>& outputBrtp, DataType& outputBm, vector<DataType>& outputBxyz) {
2ee424c8   Hacene SI HADJ MOHAND   compile
215
216
                const AMDA::GETjupiterMAG_TOOLS::COEF _COEF;
                AMDA::GETjupiterMAG_TOOLS::jupiter_JRM09_CAN81_tools tools;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
217
                // [position in: ['Rj, deg, deg'] to ['Rj, rad,rad']]
8015651d   Hacene SI HADJ MOHAND   comparaison ok
218
                long double gsmdtlm, hsmdtlm, phifactor, Pnm, dpnmdtheta, sintheta;
84376d3c   Hacene SI HADJ MOHAND   compile pas
219
                DataType r, theta, phi, x, radialfactor;
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
220
221
222
                r = inputSphCoord[0];
                theta = inputSphCoord[1] * PI / 180;
                phi = inputSphCoord[2] * PI / 180;
74df2c9b   Hacene SI HADJ MOHAND   seems ok
223
                std::vector<DataType> inputSphCoord_rad {r, theta, phi};
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
224
225

                // [try to avoid invoke restore one more time.]
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
226
227
                x = cos(theta);
                int maxN = 10; //  JRM09 degrees
8015651d   Hacene SI HADJ MOHAND   comparaison ok
228
229
                vector<vector<DataType> > Plm(maxN + 1, vector<DataType>(maxN + 1, 0));
                vector<vector < DataType >> dPlm(maxN + 1, vector<DataType>(maxN + 1, 0));
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
230
231
232

                //int AllLegendre(T1 x, int lma, int mmax, vector<vector<T2>> Plm,
                //vector<vector<T2>> dPlm, bool isSineTheta, int SineTheta, bool DoDerivative , int normalize = 1) 
84376d3c   Hacene SI HADJ MOHAND   compile pas
233
                tools.AllLegendre(x, maxN, maxN, Plm, dPlm, true, 1, true);
092fee39   Hacene SI HADJ MOHAND   sans can OK
234
         
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
235
236
                // [Calculate Components of B]

8015651d   Hacene SI HADJ MOHAND   comparaison ok
237
238
239
                for (int l = 1; l < maxN + 1; l++) {
                    radialfactor = pow(r, -(l + 2.0));
                    for (int m = 0; m < l + 1; m++) {
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
240
                        //-------------find radial b field component---------------
8015651d   Hacene SI HADJ MOHAND   comparaison ok
241
242
243
244
                        gsmdtlm = _COEF.GSMDT[l][m];
                        hsmdtlm = _COEF.HSMDT[l][m];
                        phifactor = gsmdtlm * cos(m * phi) + hsmdtlm * sin(m * phi);
                        Pnm = Plm[l][m];
092fee39   Hacene SI HADJ MOHAND   sans can OK
245
                        outputBrtp[0] = outputBrtp[0] + ((l + 1) * radialfactor * phifactor * Pnm);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
246
247

                        //--------------find theta b field component---------------
8015651d   Hacene SI HADJ MOHAND   comparaison ok
248
249
                        dpnmdtheta = dPlm[l][m]; // dpdtheta(L, M, theta, /inrad)
                        outputBrtp[1] = outputBrtp[1] - radialfactor * phifactor * dpnmdtheta;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
250
251

                        //-------------------------------------------------------
8015651d   Hacene SI HADJ MOHAND   comparaison ok
252
                        outputBrtp[2] = outputBrtp[2] + m * radialfactor * (gsmdtlm * sin(m * phi) - hsmdtlm * cos(m * phi)) * Pnm;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
253
254
255
                    }
                }
                // --------correct bphi and don't divide by 0!------------ 
092fee39   Hacene SI HADJ MOHAND   sans can OK
256
                sintheta = sin(theta);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
257
258
259
260
261
262
263
264
                if (sintheta != 0) {
                    outputBrtp[2] /= sintheta;
                } else {
                    outputBrtp[2] = 0.0;
                }
                // [Add CAN model]
                if (CAN) {
                    //  [IAU -> JSM   xyz]
a4957cae   Hacene SI HADJ MOHAND   preque
265
266
                    vector<DataType> IAUxyz;
                    IAUxyz.resize(3);
74df2c9b   Hacene SI HADJ MOHAND   seems ok
267
                    IAUxyz = tools.Sph2CarP(inputSphCoord_rad);
a4957cae   Hacene SI HADJ MOHAND   preque
268
269
270
                    vector<DataType>JSMxyz;
                    JSMxyz.resize(3);
                    JSMxyz = tools.Coord_SIII2JSM(IAUxyz);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
271
                    // [JSM: xyz -> rho z]
84376d3c   Hacene SI HADJ MOHAND   compile pas
272
273
                    DataType rho = sqrt(JSMxyz[0] * JSMxyz[0] + JSMxyz[1] * JSMxyz[1]);
                    DataType zzz = JSMxyz[2];
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
274
275
                    vector<DataType> coorIn{rho, zzz};
                    vector<DataType> Bcan; // [rho z, point]
a1d9b71f   Hacene SI HADJ MOHAND   avec can semble ok
276
                    Bcan.resize(2);
84376d3c   Hacene SI HADJ MOHAND   compile pas
277
                    can81(coorIn, Bcan);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
278
                    // [B_JSM: rho z -> xyz]
74df2c9b   Hacene SI HADJ MOHAND   seems ok
279
                    phi = atan2(JSMxyz[1] , JSMxyz[0]);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
280
281
282
283
                    if (JSMxyz[0] < 0)
                        phi += PI;
                    if (phi < 0)
                        phi += 2.0 * PI;
2ee424c8   Hacene SI HADJ MOHAND   compile
284
                    vector<DataType> BJSMxyz;
a4957cae   Hacene SI HADJ MOHAND   preque
285
                    BJSMxyz.resize(3);
8015651d   Hacene SI HADJ MOHAND   comparaison ok
286
287
                    BJSMxyz[0] = Bcan[0] * cos(phi);
                    BJSMxyz[1] = Bcan[0] * sin(phi),
a1d9b71f   Hacene SI HADJ MOHAND   avec can semble ok
288
                    BJSMxyz[2] = Bcan[1];
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
289
                    // [JSM to System III]
a4957cae   Hacene SI HADJ MOHAND   preque
290
291
292
293
294
                    vector<DataType> BIAUxyz;
                    BIAUxyz.resize(3);
                    BIAUxyz = tools.Coord_JSM2SIII(BJSMxyz);
                    vector<DataType> BIAUrtp;
                    BIAUrtp.resize(3);
8015651d   Hacene SI HADJ MOHAND   comparaison ok
295
                    BIAUrtp = tools.Car2SphV(IAUxyz, BIAUxyz);
092fee39   Hacene SI HADJ MOHAND   sans can OK
296
297
298
                    outputBrtp[0] = outputBrtp[0] + BIAUrtp[0];
                    outputBrtp[1] = outputBrtp[1] + BIAUrtp[1];
                    outputBrtp[2] = outputBrtp[2] + BIAUrtp[2];
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
299
300
                }
                // [Bx, By, Bz: Bxyz in System III RHS] 
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
301
                outputBm = sqrt(outputBrtp[0] * outputBrtp[0] + outputBrtp[1] * outputBrtp[1] + outputBrtp[2] * outputBrtp[2]);
74df2c9b   Hacene SI HADJ MOHAND   seems ok
302
                outputBxyz = tools.Sph2CarV(inputSphCoord_rad, outputBrtp);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
303
304
                return 0;
            };
8015651d   Hacene SI HADJ MOHAND   comparaison ok
305
           const long double PI = atan(1)*4.0;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
306
307

        };
84376d3c   Hacene SI HADJ MOHAND   compile pas
308

38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
309
        template <typename DataType>
2ee424c8   Hacene SI HADJ MOHAND   compile
310
        class Jupiter_JRM09_CAN81BMag : public Jupiter_JRM09_CAN81<DataType, ParamDataSpec<DataType> > {
84376d3c   Hacene SI HADJ MOHAND   compile pas
311
        public:
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
312
313
314
315
316

            /**
             * @brief Constructor.
             * @details Create the ParamData type of the input ParamData.
             */
2ee424c8   Hacene SI HADJ MOHAND   compile
317
318
            Jupiter_JRM09_CAN81BMag(Process& pProcess, ParamDataSpec<vector<DataType> >& paramInput, bool can) :
            Jupiter_JRM09_CAN81<DataType, ParamDataSpec < DataType > > (pProcess, paramInput, can) {
84376d3c   Hacene SI HADJ MOHAND   compile pas
319
320
            }

2ee424c8   Hacene SI HADJ MOHAND   compile
321
            virtual ~Jupiter_JRM09_CAN81BMag() {
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
322
            }
84376d3c   Hacene SI HADJ MOHAND   compile pas
323
324

        protected:
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
325
326

            virtual void pushResult(vector<DataType> /*fieldSph_*/, DataType magnitude_, vector<DataType> /*fieldCart_*/) {
2ee424c8   Hacene SI HADJ MOHAND   compile
327
                Jupiter_JRM09_CAN81<DataType, ParamDataSpec<DataType> >::_paramOutput->getDataList().push_back(magnitude_);
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
328
329
            }
        };
84376d3c   Hacene SI HADJ MOHAND   compile pas
330

38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
331
        template <typename DataType>
2ee424c8   Hacene SI HADJ MOHAND   compile
332
        class Jupiter_JRM09_CAN81Cart : public Jupiter_JRM09_CAN81<DataType, ParamDataSpec<vector<DataType>> >
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
333
        {
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
334
            public:
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
335
336
337
338
339

            /**
             * @brief Constructor.
             * @details Create the ParamData type of the input ParamData.
             */
2ee424c8   Hacene SI HADJ MOHAND   compile
340
341
            Jupiter_JRM09_CAN81Cart(Process& pProcess, ParamDataSpec<vector<DataType> >& paramInput, bool can) :
                    Jupiter_JRM09_CAN81<DataType, ParamDataSpec <vector< DataType> > > (pProcess, paramInput, can) {
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
342
            }
84376d3c   Hacene SI HADJ MOHAND   compile pas
343

2ee424c8   Hacene SI HADJ MOHAND   compile
344
            virtual ~Jupiter_JRM09_CAN81Cart() {
84376d3c   Hacene SI HADJ MOHAND   compile pas
345
346
            }

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
347
348
349
            protected:

            virtual void pushResult(vector<DataType> /*fieldSph_*/, DataType /*magnitude_*/, vector<DataType> fieldCart_) {
2ee424c8   Hacene SI HADJ MOHAND   compile
350
                Jupiter_JRM09_CAN81<DataType, ParamDataSpec<vector<DataType> > >::_paramOutput->getDataList().push_back(fieldCart_);
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
351
352
            }
        };
84376d3c   Hacene SI HADJ MOHAND   compile pas
353
354

        template <typename DataType>
2ee424c8   Hacene SI HADJ MOHAND   compile
355
        class Jupiter_JRM09_CAN81Sphr : public Jupiter_JRM09_CAN81<DataType, ParamDataSpec<vector <DataType> > > {
84376d3c   Hacene SI HADJ MOHAND   compile pas
356
        public:
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
357
358
359
360
361

            /**
             * @brief Constructor.
             * @details Create the ParamData type of the input ParamData.
             */
2ee424c8   Hacene SI HADJ MOHAND   compile
362
363
            Jupiter_JRM09_CAN81Sphr(Process& pProcess, ParamDataSpec<vector<DataType> >& paramInput, bool can) :
            Jupiter_JRM09_CAN81<DataType, ParamDataSpec <vector <DataType > > > (pProcess, paramInput, can) {
84376d3c   Hacene SI HADJ MOHAND   compile pas
364
365
            }

2ee424c8   Hacene SI HADJ MOHAND   compile
366
            virtual ~Jupiter_JRM09_CAN81Sphr() {
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
367
            }
84376d3c   Hacene SI HADJ MOHAND   compile pas
368
369

        protected:
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
370
371

            virtual void pushResult(vector<DataType> fieldSph_, DataType /*magnitude_*/, vector<DataType> /*fieldCart_*/) {
2ee424c8   Hacene SI HADJ MOHAND   compile
372
                Jupiter_JRM09_CAN81<DataType, ParamDataSpec<vector<DataType> > >::_paramOutput->getDataList().push_back(fieldSph_);
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
373
374
            }
        };
84376d3c   Hacene SI HADJ MOHAND   compile pas
375

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
376
    } /*en Parameters */
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
377
378
} // end AMDA

2ee424c8   Hacene SI HADJ MOHAND   compile
379
#endif /* Jupiter_JRM09_CAN81 */ 
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...