73 int nz =
mp->get_mg()->get_nzone() ;
98 int align_rel = (
mp->get_bvect_cart()).get_align()
99 * (mp_d->get_bvect_cart()).get_align() ;
119 cout <<
"Scalar::import : unexpected value of align_rel : "
120 << align_rel << endl ;
162 assert(cm_d.
get_etat() != ETATNONDEF) ;
166 "Scalar::import : the dzpuis of the Scalar to be imported must be zero !"
172 const Mg3d* mg_a =
mp->get_mg() ;
174 assert(nzet <= nz_a) ;
179 assert(cm_d.
get_etat() == ETATQCQ) ;
190 va.set_etat_c_qcq() ;
192 va.c->set_etat_qcq() ;
197 double xo_d = mp_d->get_ori_x() ;
198 double yo_d = mp_d->get_ori_y() ;
199 double zo_d = mp_d->get_ori_z() ;
202 double rot_phi_d = mp_d->get_rot_phi() ;
205 double rot_phi_a =
mp->get_rot_phi() ;
210 if ( (
mp->r).c == 0x0 ) (
mp->r).fait() ;
211 if ( (
mp->tet).c == 0x0 ) (
mp->tet).fait() ;
212 if ( (
mp->phi).c == 0x0 ) (
mp->phi).fait() ;
213 if ( (
mp->xa).c == 0x0 ) (
mp->xa).fait() ;
214 if ( (
mp->ya).c == 0x0 ) (
mp->ya).fait() ;
215 if ( (
mp->za).c == 0x0 ) (
mp->za).fait() ;
217 const Mtbl* mr_a = (
mp->r).c ;
218 const Mtbl* mtet_a = (
mp->tet).c ;
219 const Mtbl* mphi_a = (
mp->phi).c ;
220 const Mtbl* mxa_a = (
mp->xa).c ;
221 const Mtbl* mya_a = (
mp->ya).c ;
222 const Mtbl* mza_a = (
mp->za).c ;
227 double precis = 1e-15 ;
236 for (
int l=0; l < nzet; l++) {
238 int nr = mg_a->
get_nr(l) ;
239 int nt = mg_a->
get_nt(l) ;
240 int np = mg_a->
get_np(l) ;
243 const double* pr_a = mr_a->
t[l]->
t ;
244 const double* ptet_a = mtet_a->
t[l]->
t ;
245 const double* pphi_a = mphi_a->
t[l]->
t ;
246 const double* pxa_a = mxa_a->
t[l]->
t ;
247 const double* pya_a = mya_a->
t[l]->
t ;
248 const double* pza_a = mza_a->
t[l]->
t ;
252 double* ptx = (
va.c->t[l])->t ;
257 for (
int k=0 ; k<np ; k++) {
258 for (
int j=0 ; j<nt ; j++) {
259 for (
int i=0 ; i<nr ; i++) {
262 double rd, tetd, phid ;
263 if (
r == __infinity) {
266 phid = *pphi_a + rot_phi_a - rot_phi_d ;
267 if (phid < 0) phid += 2*M_PI ;
273 double xd = *pxa_a - xo_d ;
274 double yd = *pya_a - yo_d ;
275 double zd = *pza_a - zo_d ;
278 double rhod2 = xd*xd + yd*yd ;
279 double rhod =
sqrt( rhod2 ) ;
280 rd =
sqrt(rhod2 + zd*zd) ;
281 tetd = atan2(rhod, zd) ;
282 phid = atan2(yd, xd) - rot_phi_d ;
283 if (phid < 0) phid += 2*M_PI ;
296 mp_d->val_lx(rd, tetd, phid, par_precis, ld, xxd) ;
357 int align = (
mp->get_bvect_cart()).get_align() ;
359 assert( align * (mp_d->get_bvect_cart()).get_align() == -1 ) ;
361 assert(cm_d.
get_etat() == ETATQCQ) ;
365 "Scalar::import : the dzpuis of the Scalar to be imported must be zero !"
371 const Mg3d* mg_a =
mp->get_mg() ;
373 assert(nzet <= nz_a) ;
385 va.set_etat_c_qcq() ;
387 va.c->set_etat_qcq() ;
393 double xx_a, yy_a, zz_a ;
395 xx_a = mp_d->get_ori_x() -
mp->get_ori_x() ;
396 yy_a = mp_d->get_ori_y() -
mp->get_ori_y() ;
399 xx_a =
mp->get_ori_x() - mp_d->get_ori_x() ;
400 yy_a =
mp->get_ori_y() - mp_d->get_ori_y() ;
402 zz_a =
mp->get_ori_z() - mp_d->get_ori_z() ;
408 if ( (
mp->r).c == 0x0 ) (
mp->r).fait() ;
409 if ( (
mp->tet).c == 0x0 ) (
mp->tet).fait() ;
410 if ( (
mp->phi).c == 0x0 ) (
mp->phi).fait() ;
411 if ( (
mp->x).c == 0x0 ) (
mp->x).fait() ;
412 if ( (
mp->y).c == 0x0 ) (
mp->y).fait() ;
413 if ( (
mp->z).c == 0x0 ) (
mp->z).fait() ;
415 const Mtbl* mr_a = (
mp->r).c ;
416 const Mtbl* mtet_a = (
mp->tet).c ;
417 const Mtbl* mphi_a = (
mp->phi).c ;
418 const Mtbl* mx_a = (
mp->x).c ;
419 const Mtbl* my_a = (
mp->y).c ;
420 const Mtbl* mz_a = (
mp->z).c ;
425 double precis = 1e-15 ;
434 for (
int l=0; l < nzet; l++) {
436 int nr = mg_a->
get_nr(l) ;
437 int nt = mg_a->
get_nt(l) ;
438 int np = mg_a->
get_np(l) ;
441 const double* pr_a = mr_a->
t[l]->
t ;
442 const double* ptet_a = mtet_a->
t[l]->
t ;
443 const double* pphi_a = mphi_a->
t[l]->
t ;
444 const double* px_a = mx_a->
t[l]->
t ;
445 const double* py_a = my_a->
t[l]->
t ;
446 const double* pz_a = mz_a->
t[l]->
t ;
450 double* ptx = (
va.c->t[l])->t ;
455 for (
int k=0 ; k<np ; k++) {
456 for (
int j=0 ; j<nt ; j++) {
457 for (
int i=0 ; i<nr ; i++) {
460 double rd, tetd, phid ;
461 if (
r == __infinity) {
464 phid = *pphi_a + M_PI ;
465 if (phid < 0) phid += 2*M_PI ;
470 double xd = - *px_a + xx_a ;
471 double yd = - *py_a + yy_a ;
472 double zd = *pz_a + zz_a ;
475 double rhod2 = xd*xd + yd*yd ;
476 double rhod =
sqrt( rhod2 ) ;
477 rd =
sqrt(rhod2 + zd*zd) ;
478 tetd = atan2(rhod, zd) ;
479 phid = atan2(yd, xd) ;
480 if (phid < 0) phid += 2*M_PI ;
493 mp_d->val_lx(rd, tetd, phid, par_precis, ld, xxd) ;
553 int align = (
mp->get_bvect_cart()).get_align() ;
555 assert( align * (mp_d->get_bvect_cart()).get_align() == 1 ) ;
557 assert(cm_d.
get_etat() == ETATQCQ) ;
561 "Scalar::import : the dzpuis of the Scalar to be imported must be zero !"
567 const Mg3d* mg_a =
mp->get_mg() ;
569 assert(nzet <= nz_a) ;
581 va.set_etat_c_qcq() ;
583 va.c->set_etat_qcq() ;
589 double xx_a, yy_a, zz_a ;
591 xx_a =
mp->get_ori_x() - mp_d->get_ori_x() ;
592 yy_a =
mp->get_ori_y() - mp_d->get_ori_y() ;
595 xx_a = mp_d->get_ori_x() -
mp->get_ori_x() ;
596 yy_a = mp_d->get_ori_y() -
mp->get_ori_y() ;
598 zz_a =
mp->get_ori_z() - mp_d->get_ori_z() ;
604 if ( (
mp->r).c == 0x0 ) (
mp->r).fait() ;
605 if ( (
mp->tet).c == 0x0 ) (
mp->tet).fait() ;
606 if ( (
mp->phi).c == 0x0 ) (
mp->phi).fait() ;
607 if ( (
mp->x).c == 0x0 ) (
mp->x).fait() ;
608 if ( (
mp->y).c == 0x0 ) (
mp->y).fait() ;
609 if ( (
mp->z).c == 0x0 ) (
mp->z).fait() ;
611 const Mtbl* mr_a = (
mp->r).c ;
612 const Mtbl* mtet_a = (
mp->tet).c ;
613 const Mtbl* mphi_a = (
mp->phi).c ;
614 const Mtbl* mx_a = (
mp->x).c ;
615 const Mtbl* my_a = (
mp->y).c ;
616 const Mtbl* mz_a = (
mp->z).c ;
621 double precis = 1e-15 ;
630 for (
int l=0; l < nzet; l++) {
632 int nr = mg_a->
get_nr(l) ;
633 int nt = mg_a->
get_nt(l) ;
634 int np = mg_a->
get_np(l) ;
637 const double* pr_a = mr_a->
t[l]->
t ;
638 const double* ptet_a = mtet_a->
t[l]->
t ;
639 const double* pphi_a = mphi_a->
t[l]->
t ;
640 const double* px_a = mx_a->
t[l]->
t ;
641 const double* py_a = my_a->
t[l]->
t ;
642 const double* pz_a = mz_a->
t[l]->
t ;
646 double* ptx = (
va.c->t[l])->t ;
651 for (
int k=0 ; k<np ; k++) {
652 for (
int j=0 ; j<nt ; j++) {
653 for (
int i=0 ; i<nr ; i++) {
656 double rd, tetd, phid ;
657 if (
r == __infinity) {
665 double xd = *px_a + xx_a ;
666 double yd = *py_a + yy_a ;
667 double zd = *pz_a + zz_a ;
670 double rhod2 = xd*xd + yd*yd ;
671 double rhod =
sqrt( rhod2 ) ;
672 rd =
sqrt(rhod2 + zd*zd) ;
673 tetd = atan2(rhod, zd) ;
674 phid = atan2(yd, xd) ;
675 if (phid < 0) phid += 2*M_PI ;
688 mp_d->val_lx(rd, tetd, phid, par_precis, ld, xxd) ;
int get_np(int l) const
Returns the number of points in the azimuthal direction ( ) in domain no. l.
int get_nt(int l) const
Returns the number of points in the co-latitude direction ( ) in domain no. l.
int get_nzone() const
Returns the number of domains.
int get_nr(int l) const
Returns the number of points in the radial direction ( ) in domain no. l.
double val_point(int l, double x, double theta, double phi) const
Computes the value of the field represented by *this at an arbitrary point, by means of the spectral ...
Tbl ** t
Array (size nzone ) of pointers on the Tbl 's.
void add_double(const double &x, int position=0)
Adds the the address of a new double to the list.
void add_int_mod(int &n, int position=0)
Adds the address of a new modifiable int to the list.
void add_int(const int &n, int position=0)
Adds the address of a new int to the list.
void set_etat_one()
Sets the logical state to ETATUN (one).
void import_align(int nzet, const Scalar &ci)
Assignment to another Scalar defined on a different mapping, when the two mappings have aligned Carte...
int get_dzpuis() const
Returns dzpuis.
virtual void set_etat_qcq()
Sets the logical state to ETATQCQ (ordinary state).
void import_gal(int nzet, const Scalar &ci)
Assignment to another Scalar defined on a different mapping, when the two mappings do not have a part...
virtual void set_etat_zero()
Sets the logical state to ETATZERO (zero).
virtual void annule(int l_min, int l_max)
Sets the Scalar to zero in several domains.
Scalar(const Map &mpi)
Constructor from mapping.
const Valeur & get_spectral_va() const
Returns va (read only version).
void del_t()
Logical destructor.
int get_etat() const
Returns the logical state ETATNONDEF (undefined), ETATZERO (null) or ETATQCQ (ordinary).
void set_dzpuis(int)
Modifies the dzpuis flag.
Valeur va
The numerical value of the Scalar.
friend Scalar sqrt(const Scalar &)
Square root.
void import_anti(int nzet, const Scalar &ci)
Assignment to another Scalar defined on a different mapping, when the two mappings have anti-aligned ...
void import(const Scalar &ci)
Assignment to another Scalar defined on a different mapping.
double * t
The array of double.
Values and coefficients of a (real-value) function.
Mtbl_cf * c_cf
Coefficients of the spectral expansion of the function.
void coef() const
Computes the coeffcients of *this.
const Map & get_mp() const
Returns the mapping.
const Map *const mp
Mapping on which the numerical values at the grid points are defined.
Map(const Mg3d &)
Constructor from a multi-domain 3D grid.
Coord r
r coordinate centered on the grid