ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/ot_tenseur.h
Revision: 80
Committed: Thu Apr 10 15:19:20 2008 UTC (17 years, 1 month ago) by souaissa
Content type: text/plain
Original Path: magic/lib/outil/outil/src/ot_tenseur.h
File size: 8918 byte(s)
Log Message:

File Contents

# User Rev Content
1 francois 17 //---------------------------------------------------------------------------
2    
3     #ifndef ot_tenseurH
4     #define ot_tenseurH
5     //---------------------------------------------------------------------------
6    
7 souaissa 66 #ifdef WINDOWS_VERSION
8 francois 17 #ifdef BUILT_DLL_OUTIL
9 souaissa 66 #define DLLPORTOUTIL __declspec(dllexport)
10 francois 17 #else
11 souaissa 66 #define DLLPORTOUTIL __declspec(dllimport)
12 francois 17 #endif
13     #else
14 souaissa 66 #define DLLPORTOUTIL
15 francois 17 #endif
16    
17    
18 souaissa 66
19 francois 17 #include "ot_doubleprecision.h"
20 souaissa 58 #include <vector>
21     #include <iostream>
22 souaissa 69 #include "ot_mathematique.h"
23 francois 17
24 souaissa 69
25 francois 17 using namespace std;
26    
27    
28 souaissa 69 class OT_VECTEUR_4DD;
29 francois 17
30 souaissa 69
31     class DLLPORTOUTIL OT_TENSEUR
32     {
33    
34     public:
35     OT_TENSEUR();
36     OT_TENSEUR(int n);
37     OT_TENSEUR(int n,int m);
38     OT_TENSEUR(vector<OT_VECTEUR_4DD>&,vector<OT_VECTEUR_4DD>&);
39     OT_TENSEUR(vector<OT_VECTEUR_4DD>&);
40    
41     OT_TENSEUR(const OT_TENSEUR& ot);
42     virtual ~OT_TENSEUR();
43    
44     OT_TENSEUR& operator = (const OT_TENSEUR& ot);
45     vector<OT_VECTEUR_4DD> operator[](int i);
46     double2& operator()(int i,int j);
47 souaissa 70 double2& operator()(int i,int j)const;
48 souaissa 69
49     int Get_NbRows()const;
50     int Get_NbCols()const;
51 souaissa 70 virtual OT_TENSEUR transpose();
52     virtual int est_til_equivalent( OT_TENSEUR& tns);
53     virtual void get_orthogonalisation(OT_TENSEUR& a,OT_VECTEUR_4DD& d,OT_TENSEUR& v,int n,int&nrot);
54     template<class T>int existe(const vector<T>& vct,T val,int& idx);
55 souaissa 69 friend OT_TENSEUR operator*( OT_TENSEUR& ot1, OT_TENSEUR& ot2);
56     friend OT_TENSEUR operator*( double2& coef,OT_TENSEUR& ot );
57     friend OT_TENSEUR operator*( OT_TENSEUR& ot1, double2& coef);
58     friend OT_TENSEUR operator+( OT_TENSEUR& ot1, OT_TENSEUR& ot2);
59     friend int operator == ( OT_TENSEUR& t1, OT_TENSEUR& t2);
60     friend std::ostream& operator<<(std::ostream& os, OT_TENSEUR& tns);
61 souaissa 80 int listes_equivalentes(std::vector<double2>& list1,std::vector<double2>& list2,std::vector<unsigned int>& indx) ;
62 souaissa 69 private:
63 souaissa 70 double2* data;
64 souaissa 69 int Dim1;
65     int Dim2;
66     } ;
67    
68    
69 souaissa 70 DLLPORTOUTIL int operator==( OT_TENSEUR& t1, OT_TENSEUR&t2);
70     DLLPORTOUTIL std::ostream& operator<<(std::ostream& os, OT_TENSEUR& tns);
71     DLLPORTOUTIL OT_TENSEUR operator+(OT_TENSEUR& ot1,OT_TENSEUR& ot2) ;
72 souaissa 69 DLLPORTOUTIL template<class T>int existe(const vector<T>& vct,double val,int& idx);
73     DLLPORTOUTIL template<class T>int existe(const vector<T>& vct,double2 val,int& idx);
74     DLLPORTOUTIL template<class T>int existe(const vector<int>& vct,int val,int& idx);
75     DLLPORTOUTIL OT_TENSEUR operator*( OT_TENSEUR& ot1, double2& coef);
76     DLLPORTOUTIL OT_TENSEUR operator*( double2& coef,OT_TENSEUR& ot );
77     DLLPORTOUTIL OT_TENSEUR operator*( OT_TENSEUR& ot1, OT_TENSEUR& ot2);
78     #endif
79    
80    
81    
82    
83    
84    
85    
86    
87    
88    
89    
90    
91    
92    
93    
94    
95    
96    
97    
98    
99    
100    
101    
102    
103    
104    
105    
106    
107    
108    
109    
110    
111    
112    
113    
114    
115    
116    
117    
118     /*
119 souaissa 66 template class DLLPORTOUTIL std::vector<int>;
120 souaissa 69 template class DLLPORTOUTIL std::vector<double2>;
121 souaissa 66 template class DLLPORTOUTIL std::vector<float>;
122 souaissa 69 template class DLLPORTOUTIL std::vector<double22>;
123 souaissa 58
124     template <class T1,int Dim=3>
125 souaissa 66 class DLLPORTOUTIL OT_TNS
126 souaissa 58 {
127    
128     public:
129     OT_TNS();
130     OT_TNS(vector<T1>&,vector<T1>&);
131     OT_TNS(vector<T1>&);
132     OT_TNS(int n1,T1* tab);
133     OT_TNS(int n1,int n2,T1* tab1,T1* tab2);
134     OT_TNS(const OT_TNS& ot);
135     virtual ~OT_TNS();
136    
137     OT_TNS<T1,Dim>& operator = (const OT_TNS<T1,Dim>& ot);
138     vector<T1> operator[](int i);
139     T1& operator()(int i,int j);
140     T1& operator()(int i,int j)const;
141     friend OT_TNS<T1,Dim> operator+(const OT_TNS<T1,Dim>& ot1,const OT_TNS<T1,Dim>& ot2)
142     {
143     assert (ot1.nb_lgns()==ot2.nb_lgns()&&ot1.nb_cols()==ot2.nb_cols());
144     OT_TNS<T1,Dim> res;
145     for(int i=0;i<ot1.nb_lgns();i++)
146     {
147     for(int j=0;j<ot2.nb_cols();j++)
148     {
149     res(i,j)=ot1(i,j)+ot2(i,j);
150     }
151     }
152    
153     return res;
154     }
155     friend int operator == (const OT_TNS<T1,Dim>& t1,const OT_TNS<T1,Dim>&t2){ int equa=0;
156     if(t1.nb_lgns()!=t2.nb_lgns()||t1.nb_cols()!=t2.nb_cols()) return 0;
157     else {
158     for(int i=0;i<t1.nb_lgns();i++)
159     {
160     for(int j=0;j<t1.nb_cols();j++)
161     {
162 souaissa 69 double22 val1=t1(i,j);
163     double22 val2=t1(i,j);
164 souaissa 58 if(!(val1==val2))
165     return equa;
166     }
167    
168     }
169     }
170     equa=1;
171     return equa;
172     }
173     int nb_lgns()const;
174     int nb_cols()const;
175     int get_spcedim()const;
176     friend std::ostream& operator<<(std::ostream& os,const OT_TNS<T1,Dim>& tns){
177     for(int i=0;i<tns.nb_lgns();i++) {
178     for(int j=0;j<tns.nb_cols();j++) {
179     os<<setw(18)<<tns(i,j);
180     }
181     os<<endl;
182     }
183     return os;
184     }
185    
186 souaissa 69 virtual int is_equivalent_at(const OT_TNS<double22,Dim>& tns);
187     virtual int existe(const vector<double22>& vct,double22 val,int& idx);
188 souaissa 58 virtual int existe(const vector<int>& vct,int val,int& idx) ;
189 souaissa 69 virtual int existe(const vector<double2>& vct,double2 val,int& idx) ;
190 souaissa 58
191     private:
192    
193     T1* t;
194     int Dim_Spce;
195     int Dim_t1;
196     int Dim_t2;
197     } ;
198    
199    
200 souaissa 66 template class DLLPORTOUTIL OT_TNS<double2,3>;
201 souaissa 69 template class DLLPORTOUTIL OT_TNS<double22,3>;
202 souaissa 66 template class DLLPORTOUTIL OT_TNS<double2,4>;
203 souaissa 69 template class DLLPORTOUTIL OT_TNS<double22,4>;
204 souaissa 58
205 souaissa 66 DLLPORTOUTIL int operator==(const OT_TNS<double2,3>& t1,const OT_TNS<double2,3>&t2);
206 souaissa 69 DLLPORTOUTIL int operator==(const OT_TNS<double22,3>& t1,const OT_TNS<double22,3>&t2);
207 souaissa 66 DLLPORTOUTIL std::ostream& operator<<(std::ostream& os,const OT_TNS<double2,3>& tns);
208 souaissa 69 DLLPORTOUTIL std::ostream& operator<<(std::ostream& os,const OT_TNS<double22,3>& tns);
209     DLLPORTOUTIL OT_TNS<double2,3> operator+(const OT_TNS<double2,3>& ot1,const OT_TNS<double2,3>& ot2) ;
210 souaissa 66 DLLPORTOUTIL OT_TNS<int,3> operator+(const OT_TNS<int,3>& ot1,const OT_TNS<int,3>& ot2) ;
211 souaissa 69 DLLPORTOUTIL OT_TNS<double22,3> operator+(const OT_TNS<double22,3>& ot1,const OT_TNS<double22,3>& ot2) ;
212     DLLPORTOUTIL OT_TNS<double2,4> operator+(const OT_TNS<double2,4>& ot1,const OT_TNS<double2,4>& ot2) ;
213 souaissa 66 DLLPORTOUTIL OT_TNS<int,4> operator+(const OT_TNS<int,4>& ot1,const OT_TNS<int,4>& ot2) ;
214 souaissa 58
215 souaissa 69 #endif */
216 souaissa 58
217    
218