source: Sophya/trunk/SophyaPI/PIext/nomtmatvecadapter.cc@ 719

Last change on this file since 719 was 719, checked in by ercodmgr, 26 years ago

Introoduction adaptateur XNTuple pour SOPHYA, Reza 7 Fev 2000

File size: 5.9 KB
RevLine 
[585]1#include "machdefs.h"
2#include <stdlib.h>
3#include <typeinfo>
4#include <iostream.h>
5#include <string>
6#include <complex>
7
8#include "tvector.h"
9#include "nomtmatvecadapter.h"
10#include "piscdrawwdg.h"
11#include "pitvmaad.h"
12
13
14
15
16//----------------------------------------------------------------
17// Class Adaptateur d'objet (Pour NamedObjMgr) d'objet TMatrix<T>
18//----------------------------------------------------------------
19
20
21/* --Methode-- */
22template <class T>
23NOMAdapter_TMatrix<T>::NOMAdapter_TMatrix(TMatrix<T>* o)
24 : NObjMgrAdapter(o)
25{
26mMtx = o;
27}
28
29/* --Methode-- */
30template <class T>
31NOMAdapter_TMatrix<T>::~NOMAdapter_TMatrix()
32{
33}
34
35/* --Methode-- */
36template <class T>
37NObjMgrAdapter* NOMAdapter_TMatrix<T>::Clone(AnyDataObj* o)
38{
39TMatrix<T>* m = dynamic_cast<TMatrix<T> *>(o);
40if (m) return ( new NOMAdapter_TMatrix<T>(m) );
41return ( new NObjMgrAdapter(o) );
42}
43
44/* --Methode-- */
45template <class T>
46AnyDataObj* NOMAdapter_TMatrix<T>::GetCopyObj()
47{
48if (mMtx == NULL) return(NULL);
49TVector<T>* v = dynamic_cast<TVector<T> *>(mMtx);
50if (v != NULL) return( new TVector<T>(*v) );
51else return ( new TMatrix<T>(*mMtx) );
52}
53
54/* --Methode-- */
55template <class T>
56void NOMAdapter_TMatrix<T>::SavePPF(POutPersist& pos, string const & nom)
57{
58if (mMtx == NULL) return;
59TVector<T>* v = dynamic_cast<TVector<T> *>(mMtx);
60if (v != NULL) {
61 FIO_TVector<T> fio(v);
62 fio.Write(pos, nom);
63 }
64else {
65 FIO_TMatrix<T> fio(mMtx);
66 fio.Write(pos, nom);
67 }
68}
69
70/* --Methode-- */
71template <class T>
72void NOMAdapter_TMatrix<T>::Print(ostream& os)
73{
74TVector<T>* v = dynamic_cast<TVector<T> *>(mMtx);
75if (v != NULL) os << (*v);
76else os << (*mMtx);
77}
78
79/* --Methode-- */
80template <class T>
81PIDrawer* NOMAdapter_TMatrix<T>::GetDrawer(string & dopt)
82{
83TVector<T>* v = dynamic_cast<TVector<T> *>(mMtx);
84if (v == NULL) return(NULL);
85else {
86 dopt = "thinline," + dopt;
87 return( new PIYfXDrawer( new POTVectorAdapter<T>(v, false), NULL, true) );
88 }
89}
90
91/* --Methode-- */
92template <class T>
93P2DArrayAdapter* NOMAdapter_TMatrix<T>::Get2DArray(string &)
94{
95return ( new POTMatrixAdapter<T>(mMtx, false) );
96}
97
98/* --Methode-- */
99template <class T>
100NTupleInterface* NOMAdapter_TMatrix<T>::GetNTupleInterface(bool& adel)
101{
102adel = true;
103return( new NTupInt_TMatrix<T>(mMtx) );
104}
105
106
107
108// -------------------------------------------------------------
109
110/* --Methode-- */
111template <class T>
112NTupInt_TMatrix<T>::NTupInt_TMatrix(TMatrix<T>* m)
113{
114mMtx = m;
115}
116
117/* --Methode-- */
118template <class T>
119NTupInt_TMatrix<T>::~NTupInt_TMatrix()
120{
121}
122
123/* --Methode-- */
124template <class T>
125uint_4 NTupInt_TMatrix<T>::NbLines() const
126{
127return( mMtx->NRows()*mMtx->NCols() );
128}
129
130/* --Methode-- */
131template <class T>
132uint_4 NTupInt_TMatrix<T>::NbColumns() const
133{
134return(8);
135}
136
137/* --Methode-- */
138template <class T>
139r_8* NTupInt_TMatrix<T>::GetLineD(int n) const
140{
141int i,j;
142if ((n < 0) || (n >= (int)(mMtx->NRows()*mMtx->NCols()) )) {
143 mRet[0] = n;
144 for(i=1; i<8; i++) mRet[i] = 0.;
145}
146else {
147 i = n/mMtx->NCols(); j = n%mMtx->NCols();
148 mRet[0] = n; mRet[1] = i; mRet[2] = j;
149 mRet[3] = (*mMtx)(i,j);
150 mRet[4] = mRet[2]; mRet[5] = 0.;
151 mRet[6] = mRet[2]; mRet[7] = 0.;
152 }
153return(mRet);
154}
155
156/* --Methode-- */
157template <class T>
158string NTupInt_TMatrix<T>::VarList_C(const char* nx) const
159{
160string nomx;
161if (nx) nomx = nx;
162else nomx = "_xh_";
163string vardec = "double n,r,c,val,real,imag,mod,phas; \n";
164vardec += "n = " + nomx + "[0]; r = " + nomx + "[1]; c = " + nomx + "[2]; \n";
165vardec += "val = " + nomx + "[3]; \n";
166vardec += "real = " + nomx + "[4]; imag = " + nomx + "[5]; \n";
167vardec += "mod = " + nomx + "[6]; phas = " + nomx + "[7]; \n";
168return(vardec);
169}
170
171/* --Methode-- */
172r_8* NTupInt_TMatrix< complex<float> >::GetLineD(int n) const
173{
174int i,j;
175if ((n < 0) || (n >= (int)(mMtx->NRows()*mMtx->NCols()) )) {
176 mRet[0] = n;
177 for(i=1; i<8; i++) mRet[i] = 0.;
178}
179else {
180 i = n/mMtx->NCols(); j = n%mMtx->NCols();
181 mRet[0] = n; mRet[1] = i; mRet[2] = j;
182 mRet[4] = (*mMtx)(i,j).real(); mRet[5] = (*mMtx)(i,j).imag();
183 mRet[3] = mRet[6] = sqrt(mRet[4]*mRet[4]+mRet[5]*mRet[5]);
184 mRet[7] = atan2(mRet[5], mRet[4]);
185}
186return(mRet);
187}
188
189r_8* NTupInt_TMatrix< complex<double> >::GetLineD(int n) const
190{
191int i,j;
192if ((n < 0) || (n >= (int)(mMtx->NRows()*mMtx->NCols()) )) {
193 mRet[0] = n;
194 for(i=1; i<8; i++) mRet[i] = 0.;
195}
196else {
197 i = n/mMtx->NCols(); j = n%mMtx->NCols();
198 mRet[0] = n; mRet[1] = i; mRet[2] = j;
199 mRet[4] = (*mMtx)(i,j).real(); mRet[5] = (*mMtx)(i,j).imag();
200 mRet[3] = mRet[6] = sqrt(mRet[4]*mRet[4]+mRet[5]*mRet[5]);
201 mRet[7] = atan2(mRet[5], mRet[4]);
202}
203return(mRet);
204}
205
206
207#ifdef __CXX_PRAGMA_TEMPLATES__
208//#pragma define_template NOMAdapter_TMatrix<uint_2>
209//#pragma define_template NOMAdapter_TMatrix<int_2>
210#pragma define_template NOMAdapter_TMatrix<int_4>
211#pragma define_template NOMAdapter_TMatrix<r_4>
212#pragma define_template NOMAdapter_TMatrix<r_8>
[719]213#pragma define_template NOMAdapter_TMatrix< complex<r_4> >
214#pragma define_template NOMAdapter_TMatrix< complex<r_8> >
[585]215//#pragma define_template NTupInt_TMatrix<uint_2>
216//#pragma define_template NTupInt_TMatrix<int_2>
217#pragma define_template NTupInt_TMatrix<int_4>
218#pragma define_template NTupInt_TMatrix<r_4>
219#pragma define_template NTupInt_TMatrix<r_8>
[719]220#pragma define_template NTupInt_TMatrix< complex<r_4> >
221#pragma define_template NTupInt_TMatrix< complex<r_8> >
[585]222#endif
223
224#if defined(ANSI_TEMPLATES)
225//template class NOMAdapter_TMatrix<uint_2>;
226//template class NOMAdapter_TMatrix<int_2>;
227template class NOMAdapter_TMatrix<int_4>;
228template class NOMAdapter_TMatrix<r_4>;
229template class NOMAdapter_TMatrix<r_8>;
[719]230template class NOMAdapter_TMatrix< complex<r_4> >;
231template class NOMAdapter_TMatrix< complex<r_8> >;
[585]232// template class NTupInt_TMatrix<uint_2>;
233// template class NTupInt_TMatrix<int_2>;
234template class NTupInt_TMatrix<int_4>;
235template class NTupInt_TMatrix<r_4>;
236template class NTupInt_TMatrix<r_8>;
[719]237template class NTupInt_TMatrix< complex<r_4> >;
238template class NTupInt_TMatrix< complex<r_8> >;
[585]239#endif
Note: See TracBrowser for help on using the repository browser.