ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/ot_tenseur.h
Revision: 175
Committed: Thu Apr 23 19:38:52 2009 UTC (16 years ago) by francois
Content type: text/plain
Original Path: magic/lib/outil/outil/src/ot_tenseur.h
File size: 9098 byte(s)
Log Message:
Verification de compatibilité borland + visu avec separation possible de l'origine des mailles + visu des solutions sur les elements + nouvelles origine pour tenir compte des resultats d'optimisation

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