Blame view

src/ExternLib/Jupiter_JRM09_CAN_81/Jupiter_JRM09_CAN81.hh 15.5 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;
519f7689   Elena.Budnik   correct CAN
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;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
223
224

                // [try to avoid invoke restore one more time.]
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
225
226
                x = cos(theta);
                int maxN = 10; //  JRM09 degrees
8015651d   Hacene SI HADJ MOHAND   comparaison ok
227
228
                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
229
230
231

                //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
232
                tools.AllLegendre(x, maxN, maxN, Plm, dPlm, true, 1, true);
092fee39   Hacene SI HADJ MOHAND   sans can OK
233
         
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
234
235
                // [Calculate Components of B]

8015651d   Hacene SI HADJ MOHAND   comparaison ok
236
237
238
                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...
239
                        //-------------find radial b field component---------------
8015651d   Hacene SI HADJ MOHAND   comparaison ok
240
241
242
243
                        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
244
                        outputBrtp[0] = outputBrtp[0] + ((l + 1) * radialfactor * phifactor * Pnm);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
245
246

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

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

        };
84376d3c   Hacene SI HADJ MOHAND   compile pas
305

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

            /**
             * @brief Constructor.
             * @details Create the ParamData type of the input ParamData.
             */
2ee424c8   Hacene SI HADJ MOHAND   compile
314
315
            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
316
317
            }

2ee424c8   Hacene SI HADJ MOHAND   compile
318
            virtual ~Jupiter_JRM09_CAN81BMag() {
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
319
            }
84376d3c   Hacene SI HADJ MOHAND   compile pas
320
321

        protected:
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
322
323

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

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

            /**
             * @brief Constructor.
             * @details Create the ParamData type of the input ParamData.
             */
2ee424c8   Hacene SI HADJ MOHAND   compile
337
338
            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
339
            }
84376d3c   Hacene SI HADJ MOHAND   compile pas
340

2ee424c8   Hacene SI HADJ MOHAND   compile
341
            virtual ~Jupiter_JRM09_CAN81Cart() {
84376d3c   Hacene SI HADJ MOHAND   compile pas
342
343
            }

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
344
345
346
            protected:

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

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

            /**
             * @brief Constructor.
             * @details Create the ParamData type of the input ParamData.
             */
2ee424c8   Hacene SI HADJ MOHAND   compile
359
360
            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
361
362
            }

2ee424c8   Hacene SI HADJ MOHAND   compile
363
            virtual ~Jupiter_JRM09_CAN81Sphr() {
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
364
            }
84376d3c   Hacene SI HADJ MOHAND   compile pas
365
366

        protected:
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
367
368

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

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
373
    } /*en Parameters */
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
374
375
} // end AMDA

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