| 
            Last change
 on this file since 3425 was             3106, checked in by cmv, 19 years ago           | 
        
        
          | 
             
correction erreur #define VFUNCTAB_SEEN -> #define FUNCTAB_SEEN 
 
cmv 06/11/2006 
 
 
           | 
        
        
          | 
            File size:
            1.5 KB
           | 
        
      
      
| Line |   | 
|---|
| 1 | #ifndef FUNCTAB_SEEN
 | 
|---|
| 2 | #define FUNCTAB_SEEN
 | 
|---|
| 3 | 
 | 
|---|
| 4 | #include "machdefs.h"
 | 
|---|
| 5 | #include "tvector.h"
 | 
|---|
| 6 | #include "tarray.h"
 | 
|---|
| 7 | 
 | 
|---|
| 8 | namespace SOPHYA {
 | 
|---|
| 9 | 
 | 
|---|
| 10 | class FuncTab {
 | 
|---|
| 11 | public:
 | 
|---|
| 12 |   FuncTab(double (*func)(double const),uint_4 nbin,r_8 xmin,r_8 xmax);
 | 
|---|
| 13 |   virtual ~FuncTab(void);
 | 
|---|
| 14 | 
 | 
|---|
| 15 |   //! Give values for the index [0] and [NTab+1]
 | 
|---|
| 16 |   void SetLimVal(void);
 | 
|---|
| 17 |   void SetLimVal(r_8 val0,r_8 valn);
 | 
|---|
| 18 | 
 | 
|---|
| 19 |   //! Interpolation type
 | 
|---|
| 20 |   void SetInterp(uint_2 typ=0);
 | 
|---|
| 21 | 
 | 
|---|
| 22 |   //! L'index de la valeur tabulee la plus proche de x (entre 1 et NTab)
 | 
|---|
| 23 |   inline uint_4 IndexNear(r_8 x)
 | 
|---|
| 24 |     {uint_4 i=(uint_4)((x-XMin)/Dx+0.5) +1; return (i>NTab)? NTab: i;}
 | 
|---|
| 25 |   //! L'index de la valeur tabulee juste inferieure a x (entre 1 et NTab)
 | 
|---|
| 26 |   inline uint_4 IndexLow(r_8 x)
 | 
|---|
| 27 |     {uint_4 i=(uint_4)((x-XMin)/Dx) +1; return (i>NTab)? NTab: i;}
 | 
|---|
| 28 | 
 | 
|---|
| 29 |   //! L'abscisse pour la valeur i de l'index
 | 
|---|
| 30 |   inline r_8 X(uint_4 i) {return XMin+(i-1)*Dx;}
 | 
|---|
| 31 | 
 | 
|---|
| 32 |   //! Le valeur tabulee la plus proche de x
 | 
|---|
| 33 |   inline r_8 Value(r_8 x) {return Tabul[IndexNear(x)];}
 | 
|---|
| 34 | 
 | 
|---|
| 35 |   //! L'interpolation lineaire dans le bin (attention no-protection for time saving)
 | 
|---|
| 36 |   inline r_8 ValueL(r_8 x)
 | 
|---|
| 37 |     {uint_4 i=IndexLow(x);
 | 
|---|
| 38 |      return Tabul[i]+PInterpL[i]*(x-X(i));}
 | 
|---|
| 39 | 
 | 
|---|
| 40 |   //! L'interpolation parabolique (attention no-protection for time saving)
 | 
|---|
| 41 |   inline r_8 ValueP(r_8 x)
 | 
|---|
| 42 |   {uint_4 i=IndexLow(x); x -= X(i);
 | 
|---|
| 43 |      return Tabul[i]+PInterpP[0][i]*x*x+PInterpP[1][i]*x;}
 | 
|---|
| 44 | 
 | 
|---|
| 45 | protected:
 | 
|---|
| 46 |   double (*Func)(double const);
 | 
|---|
| 47 |   uint_4 NTab;
 | 
|---|
| 48 |   r_8 XMin,XMax,Dx;
 | 
|---|
| 49 |   r_8 *Tabul;
 | 
|---|
| 50 |   r_8 *PInterpL;
 | 
|---|
| 51 |   r_8 *PInterpP[2];
 | 
|---|
| 52 | };
 | 
|---|
| 53 | 
 | 
|---|
| 54 | } // Fin du namespace
 | 
|---|
| 55 | 
 | 
|---|
| 56 | #endif
 | 
|---|
       
      
  Note:
 See   
TracBrowser
 for help on using the repository browser.