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 #ifndef __EVOLUTION_H_
00029 #define __EVOLUTION_H_
00030
00031
00032
00033
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 #define UNDEF_STEP -100000
00094
00095
00096
00097
00098
00099
00110 template<typename TyT> class Evolution {
00111
00112
00113
00114
00115
00116 protected:
00118 int size ;
00119
00121 int* step ;
00122
00124 double* the_time ;
00125
00127 TyT** val ;
00128
00132 int pos_jtop ;
00133
00134
00135
00136
00137 protected:
00141 Evolution(const TyT& initial_value, int initial_j,
00142 double initial_time, int initial_size) ;
00143
00146 Evolution(int initial_size) ;
00147
00148 Evolution(const Evolution<TyT>& t_in) ;
00149
00150 public:
00151
00152 virtual ~Evolution() ;
00153
00154
00155
00156 public:
00159 virtual void update(const TyT& new_value, int j,
00160 double time_j) = 0 ;
00161
00164 void downdate(int j) ;
00165
00167 virtual void operator=(const Evolution<TyT>& t_in) ;
00168
00169
00170
00171
00172 protected:
00176 int position(int j) const ;
00177
00178 public:
00180 const TyT& operator[](int j) const ;
00181
00183 double get_time(int j) const {return the_time[position(j)];} ;
00184
00186 TyT operator()(double t) const ;
00187
00189 int get_size() const {return size; } ;
00190
00192 int j_min() const ;
00193
00195 int j_max() const ;
00196
00202 bool is_known(int j) const ;
00203
00204
00205
00206
00207
00220 TyT time_derive(int j, int n = 2) const ;
00221
00222
00223
00224
00232 void save(const char* filename) const ;
00233
00234 };
00235
00236
00237
00238
00239
00240
00241
00254 template<typename TyT> class Evolution_full : public Evolution<TyT> {
00255
00256 public:
00257 using Evolution<TyT>::size ;
00258 using Evolution<TyT>::step ;
00259 using Evolution<TyT>::the_time ;
00260 using Evolution<TyT>::val ;
00261 using Evolution<TyT>::pos_jtop ;
00262 using Evolution<TyT>::downdate ;
00263 using Evolution<TyT>::position ;
00264 using Evolution<TyT>::get_time ;
00265 using Evolution<TyT>::get_size ;
00266 using Evolution<TyT>::j_min ;
00267 using Evolution<TyT>::j_max ;
00268 using Evolution<TyT>::is_known ;
00269
00270
00271
00272
00273 private:
00278 int fact_resize ;
00279
00280
00281
00282 public:
00293 Evolution_full(const TyT& initial_value, int initial_j = 0,
00294 double initial_time = 0., int fact_resize_i = 2) ;
00295
00303 Evolution_full(int fact_resize_i = 2) ;
00304
00305
00306 Evolution_full(const Evolution_full<TyT>& t_in) ;
00307
00308 virtual ~Evolution_full() ;
00309
00310
00311
00312 public:
00318 virtual void update(const TyT& new_value, int j,
00319 double time_j) ;
00320
00322 virtual void operator=(const Evolution_full<TyT>& t_in) ;
00323
00325 virtual void operator=(const Evolution<TyT>& t_in) ;
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336 };
00337
00338
00339
00340
00341
00342
00343
00355 template<typename TyT> class Evolution_std : public Evolution<TyT> {
00356
00357 public:
00358 using Evolution<TyT>::size ;
00359 using Evolution<TyT>::step ;
00360 using Evolution<TyT>::the_time ;
00361 using Evolution<TyT>::val ;
00362 using Evolution<TyT>::pos_jtop ;
00363 using Evolution<TyT>::downdate ;
00364 using Evolution<TyT>::position ;
00365 using Evolution<TyT>::get_time ;
00366 using Evolution<TyT>::get_size ;
00367 using Evolution<TyT>::j_min ;
00368 using Evolution<TyT>::j_max ;
00369 using Evolution<TyT>::is_known ;
00370
00371
00372
00373 public:
00382 Evolution_std(const TyT& initial_value, int nstored,
00383 int initial_j = 0, double initial_time = 0.) ;
00384
00390 Evolution_std(int nstored) ;
00391
00392
00393 Evolution_std(const Evolution_std<TyT>& t_in) ;
00394
00395 virtual ~Evolution_std() ;
00396
00397
00398
00404 virtual void update(const TyT& new_value, int j, double time_j) ;
00405
00407 virtual void operator=(const Evolution_std<TyT>& t_in) ;
00408
00410 virtual void operator=(const Evolution<TyT>& t_in) ;
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420 };
00421
00422
00423 #include "Template/evolution.C"
00424 #include "Template/evolution_full.C"
00425 #include "Template/evolution_std.C"
00426
00427 #endif
00428