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
00039 #ifndef HERMITE_CONVERSION_PREP_HEADER
00040 #define HERMITE_CONVERSION_PREP_HEADER
00041
00042 #include <cstring>
00043 #include "realtype.h"
00044 #include "polydegree.h"
00045 #include "monomial_info.h"
00046 #include "simple_sparse_mat.h"
00047
00048 struct hermite_conversion_contrib_struct
00049 {
00050 int destIndex;
00051 int sourceIndex;
00052 int a_power;
00053 int dummy;
00054 ergo_real coeff;
00055 };
00056
00057 typedef hermite_conversion_contrib_struct * hermite_conversion_contrib_struct_ptr;
00058
00059 struct hermite_conversion_element_struct {
00060 int idx_j;
00061 int idx_k;
00062 int a_power;
00063 int dummy;
00064 ergo_real coeff;
00065 };
00066
00067 typedef hermite_conversion_element_struct * hermite_conversion_element_struct_ptr;
00068
00069 const int HERMITE_CONVERSION_MAX_N = BASIS_FUNC_POLY_MAX_DEGREE*2;
00070
00071 class hermite_conversion_info_struct {
00072 private:
00073 hermite_conversion_contrib_struct_ptr list_right[HERMITE_CONVERSION_MAX_N+1][HERMITE_CONVERSION_MAX_N+1];
00074 hermite_conversion_contrib_struct_ptr list_left [HERMITE_CONVERSION_MAX_N+1][HERMITE_CONVERSION_MAX_N+1];
00075 int counters_right[HERMITE_CONVERSION_MAX_N+1][HERMITE_CONVERSION_MAX_N+1];
00076 int counters_left [HERMITE_CONVERSION_MAX_N+1][HERMITE_CONVERSION_MAX_N+1];
00077
00078 hermite_conversion_element_struct_ptr list_right_simple[HERMITE_CONVERSION_MAX_N+1];
00079 hermite_conversion_element_struct_ptr list_left_simple [HERMITE_CONVERSION_MAX_N+1];
00080 int counters_right_simple[HERMITE_CONVERSION_MAX_N+1];
00081 int counters_left_simple [HERMITE_CONVERSION_MAX_N+1];
00082 void clear_lists();
00083 public:
00084 void init(const monomial_info_struct & monomial_info);
00085 hermite_conversion_info_struct();
00086 ~hermite_conversion_info_struct();
00087 int multiply_by_hermite_conversion_matrix_from_right(const monomial_info_struct & monomial_info,
00088 int n1max,
00089 int n2max,
00090 ergo_real a,
00091 ergo_real* A,
00092 ergo_real* result) const;
00093 int multiply_by_hermite_conversion_matrix_from_left(const monomial_info_struct & monomial_info,
00094 int n1max,
00095 int n2max,
00096 ergo_real a,
00097 ergo_real* A,
00098 ergo_real* result) const;
00099 int get_hermite_conversion_matrix_right(const monomial_info_struct & monomial_info,
00100 int nmax,
00101 ergo_real a,
00102 ergo_real* result) const;
00103 int get_hermite_conversion_matrix_left(const monomial_info_struct & monomial_info,
00104 int nmax,
00105 ergo_real a,
00106 ergo_real* result) const;
00107
00108 int get_hermite_conversion_matrix_right_sparse(const monomial_info_struct & monomial_info,
00109 int nmax,
00110 ergo_real a,
00111 i_j_val_struct* result) const;
00112
00113
00114 hermite_conversion_info_struct(const hermite_conversion_info_struct & other);
00115 void write_to_buffer ( char * dataBuffer, size_t const bufferSize ) const;
00116 size_t get_size() const;
00117 void assign_from_buffer ( char const * dataBuffer, size_t const bufferSize);
00118 };
00119
00120
00121 #endif