ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/ot_tenseur.h
Revision: 151
Committed: Tue Sep 9 18:51:20 2008 UTC (16 years, 8 months ago) by souaissa
Content type: text/plain
Original Path: magic/lib/outil/outil/src/ot_tenseur.h
File size: 9073 byte(s)
Log Message:
mise a jour des classes outils

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 souaissa 151 friend vector<double2> operator*( OT_TENSEUR& ot1, vector<double2>& v);
59 souaissa 69 friend OT_TENSEUR operator+( OT_TENSEUR& ot1, OT_TENSEUR& ot2);
60     friend int operator == ( OT_TENSEUR& t1, OT_TENSEUR& t2);
61     friend std::ostream& operator<<(std::ostream& os, OT_TENSEUR& tns);
62 souaissa 80 int listes_equivalentes(std::vector<double2>& list1,std::vector<double2>& list2,std::vector<unsigned int>& indx) ;
63 souaissa 69 private:
64 souaissa 70 double2* data;
65 souaissa 69 int Dim1;
66     int Dim2;
67     } ;
68    
69    
70 souaissa 70 DLLPORTOUTIL int operator==( OT_TENSEUR& t1, OT_TENSEUR&t2);
71     DLLPORTOUTIL std::ostream& operator<<(std::ostream& os, OT_TENSEUR& tns);
72     DLLPORTOUTIL OT_TENSEUR operator+(OT_TENSEUR& ot1,OT_TENSEUR& ot2) ;
73 souaissa 69 DLLPORTOUTIL template<class T>int existe(const vector<T>& vct,double val,int& idx);
74     DLLPORTOUTIL template<class T>int existe(const vector<T>& vct,double2 val,int& idx);
75     DLLPORTOUTIL template<class T>int existe(const vector<int>& vct,int val,int& idx);
76     DLLPORTOUTIL OT_TENSEUR operator*( OT_TENSEUR& ot1, double2& coef);
77     DLLPORTOUTIL OT_TENSEUR operator*( double2& coef,OT_TENSEUR& ot );
78     DLLPORTOUTIL OT_TENSEUR operator*( OT_TENSEUR& ot1, OT_TENSEUR& ot2);
79 souaissa 151 DLLPORTOUTIL vector<double2> operator*( OT_TENSEUR& ot1, vector<double2>& v);
80 souaissa 69 #endif
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    
120     /*
121 souaissa 66 template class DLLPORTOUTIL std::vector<int>;
122 souaissa 69 template class DLLPORTOUTIL std::vector<double2>;
123 souaissa 66 template class DLLPORTOUTIL std::vector<float>;
124 souaissa 69 template class DLLPORTOUTIL std::vector<double22>;
125 souaissa 58
126     template <class T1,int Dim=3>
127 souaissa 66 class DLLPORTOUTIL OT_TNS
128 souaissa 58 {
129    
130     public:
131     OT_TNS();
132     OT_TNS(vector<T1>&,vector<T1>&);
133     OT_TNS(vector<T1>&);
134     OT_TNS(int n1,T1* tab);
135     OT_TNS(int n1,int n2,T1* tab1,T1* tab2);
136     OT_TNS(const OT_TNS& ot);
137     virtual ~OT_TNS();
138    
139     OT_TNS<T1,Dim>& operator = (const OT_TNS<T1,Dim>& ot);
140     vector<T1> operator[](int i);
141     T1& operator()(int i,int j);
142     T1& operator()(int i,int j)const;
143     friend OT_TNS<T1,Dim> operator+(const OT_TNS<T1,Dim>& ot1,const OT_TNS<T1,Dim>& ot2)
144     {
145     assert (ot1.nb_lgns()==ot2.nb_lgns()&&ot1.nb_cols()==ot2.nb_cols());
146     OT_TNS<T1,Dim> res;
147     for(int i=0;i<ot1.nb_lgns();i++)
148     {
149     for(int j=0;j<ot2.nb_cols();j++)
150     {
151     res(i,j)=ot1(i,j)+ot2(i,j);
152     }
153     }
154    
155     return res;
156     }
157     friend int operator == (const OT_TNS<T1,Dim>& t1,const OT_TNS<T1,Dim>&t2){ int equa=0;
158     if(t1.nb_lgns()!=t2.nb_lgns()||t1.nb_cols()!=t2.nb_cols()) return 0;
159     else {
160     for(int i=0;i<t1.nb_lgns();i++)
161     {
162     for(int j=0;j<t1.nb_cols();j++)
163     {
164 souaissa 69 double22 val1=t1(i,j);
165     double22 val2=t1(i,j);
166 souaissa 58 if(!(val1==val2))
167     return equa;
168     }
169    
170     }
171     }
172     equa=1;
173     return equa;
174     }
175     int nb_lgns()const;
176     int nb_cols()const;
177     int get_spcedim()const;
178     friend std::ostream& operator<<(std::ostream& os,const OT_TNS<T1,Dim>& tns){
179     for(int i=0;i<tns.nb_lgns();i++) {
180     for(int j=0;j<tns.nb_cols();j++) {
181     os<<setw(18)<<tns(i,j);
182     }
183     os<<endl;
184     }
185     return os;
186     }
187    
188 souaissa 69 virtual int is_equivalent_at(const OT_TNS<double22,Dim>& tns);
189     virtual int existe(const vector<double22>& vct,double22 val,int& idx);
190 souaissa 58 virtual int existe(const vector<int>& vct,int val,int& idx) ;
191 souaissa 69 virtual int existe(const vector<double2>& vct,double2 val,int& idx) ;
192 souaissa 58
193     private:
194    
195     T1* t;
196     int Dim_Spce;
197     int Dim_t1;
198     int Dim_t2;
199     } ;
200    
201    
202 souaissa 66 template class DLLPORTOUTIL OT_TNS<double2,3>;
203 souaissa 69 template class DLLPORTOUTIL OT_TNS<double22,3>;
204 souaissa 66 template class DLLPORTOUTIL OT_TNS<double2,4>;
205 souaissa 69 template class DLLPORTOUTIL OT_TNS<double22,4>;
206 souaissa 58
207 souaissa 66 DLLPORTOUTIL int operator==(const OT_TNS<double2,3>& t1,const OT_TNS<double2,3>&t2);
208 souaissa 69 DLLPORTOUTIL int operator==(const OT_TNS<double22,3>& t1,const OT_TNS<double22,3>&t2);
209 souaissa 66 DLLPORTOUTIL std::ostream& operator<<(std::ostream& os,const OT_TNS<double2,3>& tns);
210 souaissa 69 DLLPORTOUTIL std::ostream& operator<<(std::ostream& os,const OT_TNS<double22,3>& tns);
211     DLLPORTOUTIL OT_TNS<double2,3> operator+(const OT_TNS<double2,3>& ot1,const OT_TNS<double2,3>& ot2) ;
212 souaissa 66 DLLPORTOUTIL OT_TNS<int,3> operator+(const OT_TNS<int,3>& ot1,const OT_TNS<int,3>& ot2) ;
213 souaissa 69 DLLPORTOUTIL OT_TNS<double22,3> operator+(const OT_TNS<double22,3>& ot1,const OT_TNS<double22,3>& ot2) ;
214     DLLPORTOUTIL OT_TNS<double2,4> operator+(const OT_TNS<double2,4>& ot1,const OT_TNS<double2,4>& ot2) ;
215 souaissa 66 DLLPORTOUTIL OT_TNS<int,4> operator+(const OT_TNS<int,4>& ot1,const OT_TNS<int,4>& ot2) ;
216 souaissa 58
217 souaissa 69 #endif */
218 souaissa 58
219    
220