Blame view

src/ExternLib/Jupiter_JRM09_CAN_81/Jupiter_JRM09_CAN81.hh 14.7 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
58
59
60
            }

            /**
             * @overload Operation::write(ParamDataIndexInfo &pParamDataIndexInfo)
             */
            void write(ParamDataIndexInfo &pParamDataIndexInfo) {
                for (unsigned int _index = pParamDataIndexInfo._startIndex;
                        _index < pParamDataIndexInfo._startIndex + pParamDataIndexInfo._nbDataToProcess;
                        ++_index) {
a4957cae   Hacene SI HADJ MOHAND   preque
61
                    vector<DataType> lVal= _paramInput.getDataList()[_index];
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
62
63
                    double crtTime = _paramInput.getTime(_index);

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
64
                    vector<DataType> input;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
65
66
                    input.resize(3);

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

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
70
                    vector<DataType>outputBxyz;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
71
72
73
74
                    outputBxyz.resize(3);

                    DataType outputBm;

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
75
                    // GetJupiterMag00(vector<DataType> inputSphCoord, bool CAN, vector<DataType>& outputBrtp, DataType& outputBm, vector<DataType>& outputBxyz) 
a4957cae   Hacene SI HADJ MOHAND   preque
76
                    GetJupiterMag00(lVal, _can, outputBrtp, outputBm, outputBxyz);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
77
78
79
80
81
82
                    _paramOutput->pushTime(crtTime);
                    pushResult(outputBrtp, outputBm, outputBxyz);
                }
            }
        protected:

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

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
85
86
87
88
89
90
91
92
93
            /**
             * @brief Input paramter data.
             */
            ParamDataSpec<vector<DataType> >& _paramInput;

            /**
             * @brief Output parameter data.
             */
            TOutputParamData *_paramOutput;
84376d3c   Hacene SI HADJ MOHAND   compile pas
94
95
96
97
98
99

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

38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
100
        private:
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
101

a4957cae   Hacene SI HADJ MOHAND   preque
102
            int can81(vector<DataType>& inputCoor, vector<DataType>& outpField) {
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
103
104
105
106
107
108
109
110
111
112
113
114
115
                /**
                 * @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...
116
117
118

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

                // [Approximate formulas given in Connerney+1981_The magnetic field in Jupiter.]
                // [Cylindrical coordinates: in nT]

                if (rho < a) {
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
125
126
127
                    F1 = sqrt((z - D)*(z - D)* + a * a);
                    F2 = sqrt((z + D)*(z + D) + a * a);
                    F3 = sqrt(z * z + a * a);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
128
129
130
131
132

                    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 {
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
133
134
135
                    F1 = sqrt((z - D)*(z - D)* + rho * rho);
                    F2 = sqrt((z + D)*(z + D) + rho * rho);
                    F3 = sqrt(z * z + rho * rho);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
136
137

                    Brho = (F1 - F2 + 2 * D) / rho;
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
138
139
                    if (abs(z) > D && z < 0) Brho = (F1 - F2 - 2 * D) / rho;
                    if (abs(z) < D) Brho = (F1 - F2 + 2 * z) / rho;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
140
141
142
143
                    Brho -= 0.25 * a * a * rho * (1.0 / (F1 * F1 * F1) - 1.0 / (F2 * F2 * F2));
                    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
144
145
146
                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...
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
                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;
                outpField[1] = Brho;

                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
197
            int GetJupiterMag00(vector<DataType> inputSphCoord, bool CAN, vector<DataType>& outputBrtp, DataType& outputBm, vector<DataType>& outputBxyz) {
2ee424c8   Hacene SI HADJ MOHAND   compile
198
199
                const AMDA::GETjupiterMAG_TOOLS::COEF _COEF;
                AMDA::GETjupiterMAG_TOOLS::jupiter_JRM09_CAN81_tools tools;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
200
                // [position in: ['Rj, deg, deg'] to ['Rj, rad,rad']]
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
201
                const long double PI = atan(1)*4.0;
84376d3c   Hacene SI HADJ MOHAND   compile pas
202
                DataType r, theta, phi, x, radialfactor;
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
203
204
205
                r = inputSphCoord[0];
                theta = inputSphCoord[1] * PI / 180;
                phi = inputSphCoord[2] * PI / 180;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
206
207

                // [try to avoid invoke restore one more time.]
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
208
209
                x = cos(theta);
                int maxN = 10; //  JRM09 degrees
a4957cae   Hacene SI HADJ MOHAND   preque
210
211
                vector<vector<DataType> > Plm(maxN, vector<DataType>(maxN, 0));
                vector<vector < DataType>> dPlm(maxN, vector<DataType>(maxN, 0));
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
212
213
214

                //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
215
                tools.AllLegendre(x, maxN, maxN, Plm, dPlm, true, 1, true);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
216
217
218
                // [Calculate Components of B]

                for (int l = 1; l < maxN; l++) {
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
219
                    radialfactor = pow(r, (-l + 2.0));
a4957cae   Hacene SI HADJ MOHAND   preque
220
                    for (int m = 0; m < l; m++) {
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
221
                        //-------------find radial b field component---------------
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
222
223
224
                        long double gsmdtlm = _COEF.GSMDT[l][m];
                        long double hsmdtlm = _COEF.HSMDT[l][m];
                        long double phifactor = gsmdtlm * cos(m * phi) + hsmdtlm * sin(m * phi);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
225
226
227
228
229
230
231
232
                        long double Pnm = Plm[l][m];
                        outputBrtp[0] += (l + 1) * radialfactor * phifactor * Pnm;

                        //--------------find theta b field component---------------
                        long double dpnmdtheta = dPlm[l][m]; // dpdtheta(L, M, theta, /inrad)
                        outputBrtp[1] -= radialfactor * phifactor * dpnmdtheta;

                        //-------------------------------------------------------
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
233
                        outputBrtp[2] += m * radialfactor * (gsmdtlm * sin(m * phi) - hsmdtlm * cos(m * phi)) * Pnm;
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
234
235
236
237
238
239
240
241
242
243
244
245
                    }
                }
                // --------correct bphi and don't divide by 0!------------ 
                long double sintheta = sin(outputBrtp[1]);
                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
246
247
248
249
250
251
                    vector<DataType> IAUxyz;
                    IAUxyz.resize(3);
                    IAUxyz = tools.Sph2CarP(inputSphCoord);
                    vector<DataType>JSMxyz;
                    JSMxyz.resize(3);
                    JSMxyz = tools.Coord_SIII2JSM(IAUxyz);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
252
                    // [JSM: xyz -> rho z]
84376d3c   Hacene SI HADJ MOHAND   compile pas
253
254
                    DataType rho = sqrt(JSMxyz[0] * JSMxyz[0] + JSMxyz[1] * JSMxyz[1]);
                    DataType zzz = JSMxyz[2];
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
255
256
                    vector<DataType> coorIn{rho, zzz};
                    vector<DataType> Bcan; // [rho z, point]
a4957cae   Hacene SI HADJ MOHAND   preque
257
                    Bcan.resize(3);
84376d3c   Hacene SI HADJ MOHAND   compile pas
258
                    can81(coorIn, Bcan);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
259
                    // [B_JSM: rho z -> xyz]
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
260
                    phi = atan(JSMxyz[1] / JSMxyz[0]);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
261
262
263
264
                    if (JSMxyz[0] < 0)
                        phi += PI;
                    if (phi < 0)
                        phi += 2.0 * PI;
2ee424c8   Hacene SI HADJ MOHAND   compile
265
                    vector<DataType> BJSMxyz;
a4957cae   Hacene SI HADJ MOHAND   preque
266
                    BJSMxyz.resize(3);
2ee424c8   Hacene SI HADJ MOHAND   compile
267
                    BJSMxyz[0]  = Bcan[0] * cos(phi);
a4957cae   Hacene SI HADJ MOHAND   preque
268
269
                    BJSMxyz[1]  = Bcan[0] * sin(phi), 
                    BJSMxyz[2]  = Bcan[1];
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
270
                    // [JSM to System III]
a4957cae   Hacene SI HADJ MOHAND   preque
271
272
273
274
275
276
                    vector<DataType> BIAUxyz;
                    BIAUxyz.resize(3);
                    BIAUxyz = tools.Coord_JSM2SIII(BJSMxyz);
                    vector<DataType> BIAUrtp;
                    BIAUrtp.resize(3);
                    BIAUrtp= tools.Car2SphV(IAUxyz, BIAUxyz);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
277
278
279
280
281
                    outputBrtp[0] += BIAUrtp[0];
                    outputBrtp[1] += BIAUrtp[1];
                    outputBrtp[2] += BIAUrtp[2];
                }
                // [Bx, By, Bz: Bxyz in System III RHS] 
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
282
283
                outputBm = sqrt(outputBrtp[0] * outputBrtp[0] + outputBrtp[1] * outputBrtp[1] + outputBrtp[2] * outputBrtp[2]);
                outputBxyz = tools.Sph2CarV(inputSphCoord, outputBrtp);
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
284
285
286
287
288
                return 0;
            };


        };
84376d3c   Hacene SI HADJ MOHAND   compile pas
289

38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
290
        template <typename DataType>
2ee424c8   Hacene SI HADJ MOHAND   compile
291
        class Jupiter_JRM09_CAN81BMag : public Jupiter_JRM09_CAN81<DataType, ParamDataSpec<DataType> > {
84376d3c   Hacene SI HADJ MOHAND   compile pas
292
        public:
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
293
294
295
296
297

            /**
             * @brief Constructor.
             * @details Create the ParamData type of the input ParamData.
             */
2ee424c8   Hacene SI HADJ MOHAND   compile
298
299
            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
300
301
            }

2ee424c8   Hacene SI HADJ MOHAND   compile
302
            virtual ~Jupiter_JRM09_CAN81BMag() {
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
303
            }
84376d3c   Hacene SI HADJ MOHAND   compile pas
304
305

        protected:
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
306
307

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

38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
312
        template <typename DataType>
2ee424c8   Hacene SI HADJ MOHAND   compile
313
        class Jupiter_JRM09_CAN81Cart : public Jupiter_JRM09_CAN81<DataType, ParamDataSpec<vector<DataType>> >
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
314
        {
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
315
            public:
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
316
317
318
319
320

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

2ee424c8   Hacene SI HADJ MOHAND   compile
325
            virtual ~Jupiter_JRM09_CAN81Cart() {
84376d3c   Hacene SI HADJ MOHAND   compile pas
326
327
            }

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
328
329
330
            protected:

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

        template <typename DataType>
2ee424c8   Hacene SI HADJ MOHAND   compile
336
        class Jupiter_JRM09_CAN81Sphr : public Jupiter_JRM09_CAN81<DataType, ParamDataSpec<vector <DataType> > > {
84376d3c   Hacene SI HADJ MOHAND   compile pas
337
        public:
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
338
339
340
341
342

            /**
             * @brief Constructor.
             * @details Create the ParamData type of the input ParamData.
             */
2ee424c8   Hacene SI HADJ MOHAND   compile
343
344
            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
345
346
            }

2ee424c8   Hacene SI HADJ MOHAND   compile
347
            virtual ~Jupiter_JRM09_CAN81Sphr() {
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
348
            }
84376d3c   Hacene SI HADJ MOHAND   compile pas
349
350

        protected:
dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
351
352

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

dd3f6a5d   Hacene SI HADJ MOHAND   ne compile pas
357
    } /*en Parameters */
38bebd9c   Hacene SI HADJ MOHAND   lib Jupeter field...
358
359
} // end AMDA

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