00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef __VALEUR_H_
00033 #define __VALEUR_H_
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259 #include <stdio.h>
00260
00261 #include "mtbl.h"
00262 #include "mtbl_cf.h"
00263
00264 class Coord ;
00265 class Itbl ;
00266
00273 class Valeur {
00274
00275
00276
00277 private:
00278 const Mg3d* mg ;
00279
00281 int etat ;
00282
00283 public:
00285 mutable Mtbl* c ;
00286
00288 mutable Mtbl_cf* c_cf ;
00289
00291 Base_val base ;
00292
00293
00294
00295 private:
00296 mutable Valeur* p_dsdx ;
00297 mutable Valeur* p_d2sdx2 ;
00298 mutable Valeur* p_sx ;
00299 mutable Valeur* p_sx2 ;
00300 mutable Valeur* p_mult_x ;
00301
00302 mutable Valeur* p_dsdt ;
00303 mutable Valeur* p_d2sdt2 ;
00304 mutable Valeur* p_ssint ;
00305 mutable Valeur* p_scost ;
00306 mutable Valeur* p_mult_ct ;
00307 mutable Valeur* p_mult_st ;
00308
00309 mutable Valeur* p_dsdp ;
00310 mutable Valeur* p_stdsdp ;
00311 mutable Valeur* p_d2sdp2 ;
00312 mutable Valeur* p_mult_cp ;
00313 mutable Valeur* p_mult_sp ;
00314
00315 mutable Valeur* p_lapang ;
00316
00317
00318
00319
00320 public:
00321 explicit Valeur(const Mg3d& mgrid) ;
00322 explicit Valeur(const Mg3d* p_mgrid) ;
00323
00325 Valeur(const Mg3d&, FILE* ) ;
00326
00327 Valeur(const Valeur& ) ;
00328 ~Valeur() ;
00329
00330
00331
00332 public:
00333 void operator=(const Valeur& a) ;
00334 void operator=(const Mtbl& mt) ;
00335 void operator=(const Mtbl_cf& mtcf) ;
00336 void operator=(double ) ;
00337
00338
00339
00340 public:
00349 Tbl& set(int l) {
00350 assert(l < mg->get_nzone()) ;
00351 assert(etat == ETATQCQ) ;
00352 if (c == 0x0) {
00353 coef_i() ;
00354 }
00355 if (c_cf != 0x0) {
00356 delete c_cf ;
00357 c_cf = 0 ;
00358 }
00359 return c->set(l) ;
00360 };
00361
00362
00367 const Tbl& operator()(int l) const {
00368 assert(l < mg->get_nzone()) ;
00369 assert(etat == ETATQCQ) ;
00370 if (c == 0x0) {
00371 coef_i() ;
00372 }
00373 return (*c)(l) ;
00374 };
00375
00376
00387 double& set(int l, int k, int j, int i) {
00388 assert(l < mg->get_nzone()) ;
00389 assert(etat == ETATQCQ) ;
00390 if (c == 0x0) {
00391 coef_i() ;
00392 }
00393 if (c_cf != 0x0) {
00394 delete c_cf ;
00395 c_cf = 0 ;
00396 }
00397 return c->set(l, k, j, i) ;
00398 };
00399
00400
00407 double operator()(int l, int k, int j, int i) const {
00408 assert(etat != ETATNONDEF) ;
00409 assert(l < mg->get_nzone()) ;
00410 if (etat == ETATZERO) {
00411 double zero = 0. ;
00412 return zero ;
00413 }
00414 else{
00415 if (c == 0x0) {
00416 coef_i() ;
00417 }
00418 return (*c)(l, k, j, i) ;
00419 }
00420 };
00421
00431 double val_point(int l, double x, double theta, double phi) const ;
00432
00444 double val_point_jk(int l, double x, int j, int k) const ;
00445
00446
00447
00448
00449 public:
00450 void coef() const ;
00451 void coef_i() const ;
00452 void ylm() ;
00453 void ylm_i() ;
00454
00459 void val_propre_1d() ;
00463 void val_propre_1d_i() ;
00464
00466 const Base_val& get_base() const {return base; } ;
00467
00469 void set_base(const Base_val& ) ;
00470
00474 void std_base_scal() ;
00475
00479 void std_base_scal_odd() ;
00480
00490 void set_base_r(int l, int base_r) ;
00491
00500 void set_base_t(int base_t) ;
00501
00510 void set_base_p(int base_p) ;
00511
00516 void filtre_tp(int nn, int nz1, int nz2) ;
00517
00518
00519
00520
00521
00522 public:
00524 const Valeur& dsdx() const ;
00526 const Valeur& d2sdx2() const ;
00527
00529 const Valeur& dsdt() const ;
00531 const Valeur& d2sdt2() const ;
00533 const Valeur& ssint() const ;
00535 const Valeur& scost() const ;
00537 const Valeur& mult_ct() const ;
00539 const Valeur& mult_st() const ;
00540
00542 const Valeur& dsdp() const ;
00544 const Valeur& stdsdp() const ;
00546 const Valeur& d2sdp2() const ;
00548 const Valeur& mult_cp() const ;
00550 const Valeur& mult_sp() const ;
00551
00553 const Valeur& lapang() const ;
00554
00559 const Valeur& sx() const ;
00560
00565 const Valeur& sx2() const ;
00566
00571 const Valeur& mult_x() const ;
00572
00577 void sxm1_zec() ;
00578
00583 void mult_xm1_zec() ;
00584
00589 void mult2_xm1_zec() ;
00590
00595 void va_x() ;
00596
00597
00598
00599
00600 public:
00601 void sauve(FILE *) const ;
00602
00611 void display_coef(double threshold = 1.e-7, int precision = 4,
00612 ostream& ostr = cout) const ;
00613
00623 void affiche_seuil(ostream& ostr, int type = 0, int precision = 4,
00624 double threshold = 1.e-7) const ;
00625
00627 friend ostream& operator<<(ostream& , const Valeur& ) ;
00628
00629
00630
00631 private:
00632 void nouveau() ;
00633 void del_t() ;
00634 void del_deriv() ;
00635 void set_der_0x0() ;
00636
00637
00638 public:
00639
00645 void set_etat_nondef() ;
00646
00652 void set_etat_zero() ;
00653
00664 void set_etat_c_qcq() ;
00665
00676 void set_etat_cf_qcq() ;
00677
00686 void annule_hard() ;
00687
00693 void annule(int l) ;
00694
00705 void annule(int l_min, int l_max) ;
00706
00707
00708
00709
00710 public:
00712 int get_etat() const {return etat ; };
00713
00715 const Mg3d* get_mg() const { return mg ; };
00716
00717
00718
00719 public:
00720 void operator+=(const Valeur& ) ;
00721 void operator-=(const Valeur& ) ;
00722 void operator*=(const Valeur& ) ;
00723
00724
00725
00726 public:
00761 void equipot(double uu0, int nz_search, double precis, int nitermax,
00762 int& niter, Itbl& l_iso, Tbl& xi_iso) const ;
00763
00797 void equipot_outward(double uu0, int nz_search, double precis,
00798 int nitermax, int& niter, Itbl& l_iso,
00799 Tbl& xi_iso) const ;
00800
00809 void smooth(int nzet, Valeur& uuva) const ;
00810
00811 friend class Cmp ;
00812 friend class Scalar ;
00813 friend void rotate_propre_pair (Valeur&, bool) ;
00814 friend void rotate_propre_impair (Valeur&, bool) ;
00815 };
00816 ostream& operator<<(ostream& , const Valeur& ) ;
00817
00823 Valeur operator+(const Valeur& ) ;
00824 Valeur operator-(const Valeur& ) ;
00825 Valeur operator+(const Valeur&, const Valeur& ) ;
00826 Valeur operator+(const Valeur&, const Mtbl& ) ;
00827 Valeur operator+(const Mtbl&, const Valeur& ) ;
00828 Valeur operator+(const Valeur&, double ) ;
00829 Valeur operator+(double, const Valeur& ) ;
00830 Valeur operator+(const Valeur&, int ) ;
00831 Valeur operator+(int, const Valeur& ) ;
00832 Valeur operator-(const Valeur&, const Valeur& ) ;
00833 Valeur operator-(const Valeur&, const Mtbl& ) ;
00834 Valeur operator-(const Mtbl&, const Valeur& ) ;
00835 Valeur operator-(const Valeur&, double ) ;
00836 Valeur operator-(double, const Valeur& ) ;
00837 Valeur operator-(const Valeur&, int ) ;
00838 Valeur operator-(int, const Valeur& ) ;
00839 Valeur operator*(const Valeur&, const Valeur& ) ;
00840
00842 Valeur operator%(const Valeur&, const Valeur& ) ;
00843
00845 Valeur operator|(const Valeur&, const Valeur& ) ;
00846
00847 Valeur operator*(const Valeur&, double ) ;
00848 Valeur operator*(double, const Valeur& ) ;
00849 Valeur operator*(const Valeur&, int ) ;
00850 Valeur operator*(int, const Valeur& ) ;
00851 Valeur operator*(const Valeur& a, const Mtbl& b) ;
00852 Valeur operator*(const Mtbl& b, const Valeur& a) ;
00853 Valeur operator*(const Valeur& a, const Coord& c) ;
00854 Valeur operator*(const Coord& c, const Valeur& a) ;
00855 Valeur operator/(const Valeur& a, const Valeur& b) ;
00856 Valeur operator/(const Valeur&, double ) ;
00857 Valeur operator/(double, const Valeur& ) ;
00858 Valeur operator/(const Valeur&, int ) ;
00859 Valeur operator/(int, const Valeur& ) ;
00860 Valeur operator/(const Valeur& a, const Mtbl& b) ;
00861 Valeur operator/(const Mtbl& b, const Valeur& a) ;
00862
00863 Valeur sin(const Valeur& ) ;
00864 Valeur cos(const Valeur& ) ;
00865 Valeur tan(const Valeur& ) ;
00866 Valeur asin(const Valeur& ) ;
00867 Valeur acos(const Valeur& ) ;
00868 Valeur atan(const Valeur& ) ;
00869 Valeur exp(const Valeur& ) ;
00870 Valeur Heaviside(const Valeur& ) ;
00871 Valeur log(const Valeur& ) ;
00872 Valeur log10(const Valeur& ) ;
00873 Valeur sqrt(const Valeur& ) ;
00874 Valeur pow(const Valeur& , int ) ;
00875 Valeur pow(const Valeur& , double ) ;
00876 Valeur abs(const Valeur& ) ;
00877 Valeur racine_cubique (const Valeur&) ;
00878
00884 double totalmax(const Valeur& ) ;
00885
00891 double totalmin(const Valeur& ) ;
00892
00899 Tbl max(const Valeur& ) ;
00900
00907 Tbl min(const Valeur& ) ;
00908
00915 Tbl norme(const Valeur& ) ;
00916
00926 Tbl diffrel(const Valeur& a, const Valeur& b) ;
00927
00937 Tbl diffrelmax(const Valeur& a, const Valeur& b) ;
00938
00939
00942 #endif