00001 #ifndef TABLEFUNCT_H
00002 #define TABLEFUNCT_H
00003
00004 #include <stdio.h>
00005 #include "iotools.h"
00006
00007
00008 enum interpoltype{piecewiselin=1,piecewiseconst=2,lagrange=3,piecewiselin2=4,dirac2=5};
00009 const enumstr interpoltypestr[5] = {{"linear",1}, {"piecewiseconst",2}, {"lagrange",3}, {"linear2",4}, {"dirac2", 5}};
00010 const kwdset interpoltype_kwdset(sizeof(interpoltypestr)/sizeof(*interpoltypestr), interpoltypestr);
00011
00012
00013
00014
00015
00016
00017
00018
00019 class tablefunct
00020 {
00021 public:
00022 tablefunct();
00023 tablefunct(long n);
00024 tablefunct(long n,long it);
00025 ~tablefunct();
00026
00027 void read (XFILE *in);
00028 void read_data_file(XFILE *in);
00029 void print(FILE *out);
00030 void print_data_file(FILE *out);
00031 void read_prop(FILE *in);
00032 void readval (XFILE *in);
00033 void datacheck ();
00034
00035 double getval(double temp);
00036 double getinvval(double temp);
00037 double getval2(double temp, double &k);
00038 double getval3(double temp, double &k);
00039
00040 double getderiv (double temp);
00041 double inv_derivative (double temp);
00042
00043 void copy(tablefunct &tf);
00044 long compare(tablefunct &tf);
00045
00046
00047 interpoltype itype;
00048
00049 long asize;
00050
00051 double *x;
00052
00053 double *y;
00054
00055 char *file1;
00056
00057 private:
00058 double piecewise_const_interpol (double temp);
00059 double piecewise_linear_interpol (double temp);
00060 double inverse_piecewise_linear_interpol (double temp);
00061
00062 double diracinterpol2(double temp);
00063 double diracinterpol2(double temp, double &k);
00064 double lininterpol2 (double temp, double &k);
00065 double lininterpol3 (double temp, double &k);
00066 double laginterpol (double temp);
00067
00068 double derivative (double temp);
00069
00070 };
00071 #endif