~ubuntu-branches/ubuntu/raring/rheolef/raring-proposed

« back to all changes in this revision

Viewing changes to nfem/plib/form.h

  • Committer: Bazaar Package Importer
  • Author(s): Pierre Saramito
  • Date: 2011-03-23 11:14:26 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20110323111426-cjvhey7lxt6077ty
Tags: 5.93-1
* New upstream release (minor changes):
  - some extra warning message deleted in heap_allocator
  - graphic output with mayavi2 fixed
  - add doc refman in .info and .pdf format

Show diffs side-by-side

added added

removed removed

Lines of Context:
82
82
*/
83
83
 
84
84
//<form:
85
 
template<class T>
 
85
template<class T, class M>
86
86
class form_basic {
87
87
public :
88
88
// typedefs:
89
89
 
90
 
    typedef typename csr<T>::size_type      size_type;
 
90
    typedef typename csr<T,M>::size_type    size_type;
91
91
    typedef T                               value_type;
92
 
    typedef typename scalar_traits<T>::type float_type; // TODO: when T=complex<scalar_type>
93
 
    typedef space_basic<float_type>         space_type;
94
 
    typedef geo_basic<float_type>           geo_type;
 
92
    typedef typename scalar_traits<T>::type float_type;
 
93
    typedef geo_basic<float_type,M>         geo_type;
 
94
    typedef space_basic<float_type,M>       space_type;
95
95
 
96
96
// allocator/deallocator:
97
97
 
98
98
    form_basic ();
99
99
    form_basic (const space_type& X, const space_type& Y, const std::string& name);
 
100
    form_basic (const space_type& X, const space_type& Y, const std::string& name, const geo_basic<T,M>& gamma);
100
101
 
101
102
// accessors:
102
103
 
106
107
 
107
108
    const communicator& comm() const;
108
109
 
109
 
    csr<T>& uu();
110
 
    csr<T>& ub();
111
 
    csr<T>& bu();
112
 
    csr<T>& bb();
113
 
    const csr<T>& uu() const;
114
 
    const csr<T>& ub() const;
115
 
    const csr<T>& bu() const;
116
 
    const csr<T>& bb() const;
117
 
 
118
110
// linear algebra:
119
111
 
120
 
    form_basic<T>  operator+ (const form_basic<T>& b) const;
121
 
    form_basic<T>  operator- (const form_basic<T>& b) const;
122
 
    field_basic<T> operator* (const field_basic<T>& xh) const;
 
112
    form_basic<T,M>  operator+ (const form_basic<T,M>& b) const;
 
113
    form_basic<T,M>  operator- (const form_basic<T,M>& b) const;
 
114
    field_basic<T,M> operator* (const field_basic<T,M>& xh) const;
123
115
 
124
 
#ifdef TODO
125
 
    float_type operator () (const field_basic<T>& uh, const field_basic<T>& vh) const;
126
 
#endif // TODO
 
116
    float_type operator () (const field_basic<T,M>& uh, const field_basic<T,M>& vh) const;
127
117
 
128
118
// io:
129
119
 
130
 
    oparstream& put (oparstream& ops, bool show_partition = true) const;
 
120
    odiststream& put (odiststream& ops, bool show_partition = true) const;
131
121
    void dump (std::string name) const;
132
122
 
133
123
// data
134
124
protected:
135
125
    space_type  _X;
136
126
    space_type  _Y;
137
 
    csr<T>      _uu;
138
 
    csr<T>      _ub;
139
 
    csr<T>      _bu;
140
 
    csr<T>      _bb;
 
127
public:
 
128
    csr<T,M>      uu;
 
129
    csr<T,M>      ub;
 
130
    csr<T,M>      bu;
 
131
    csr<T,M>      bb;
141
132
 
142
133
// internals:
143
 
    void assembly (const geo_type& omega, const form_element<T>& form_e); 
 
134
protected:
 
135
    void assembly (const form_element<T,M>&   form_e, 
 
136
                   const geo_basic<T,M>&      X_geo,
 
137
                   const geo_basic<T,M>&      Y_geo,
 
138
                   bool  X_geo_is_background = true);
144
139
};
145
 
typedef form_basic<Float> form;
 
140
typedef form_basic<Float,rheo_default_memory_model> form;
146
141
//>form:
147
142
 
148
143
// ------------ inline'd -----------------------------------
149
144
 
150
 
template<class T>
 
145
template<class T, class M>
151
146
inline
152
 
form_basic<T>::form_basic ()
153
 
: _X(), _Y(), _uu(), _ub(), _bu(), _bb()
 
147
form_basic<T,M>::form_basic ()
 
148
: _X(), _Y(), uu(), ub(), bu(), bb()
154
149
{
155
150
}
156
 
template<class T>
 
151
template<class T, class M>
157
152
inline
158
 
const typename form_basic<T>::space_type&
159
 
form_basic<T>::get_first_space() const
 
153
const typename form_basic<T,M>::space_type&
 
154
form_basic<T,M>::get_first_space() const
160
155
{
161
156
  return _X;
162
157
}
163
 
template<class T>
 
158
template<class T, class M>
164
159
inline
165
 
const typename form_basic<T>::space_type&
166
 
form_basic<T>::get_second_space() const
 
160
const typename form_basic<T,M>::space_type&
 
161
form_basic<T,M>::get_second_space() const
167
162
{
168
163
  return _Y;
169
164
}
170
 
template<class T>
 
165
template<class T, class M>
171
166
inline
172
 
const typename form_basic<T>::geo_type&
173
 
form_basic<T>::get_geo() const
 
167
const typename form_basic<T,M>::geo_type&
 
168
form_basic<T,M>::get_geo() const
174
169
{
175
170
  return _X.get_geo();
176
171
}
177
 
template<class T>
178
 
inline
179
 
csr<T>&
180
 
form_basic<T>::uu() 
181
 
{
182
 
  return _uu;
183
 
}
184
 
template<class T>
185
 
inline
186
 
csr<T>&
187
 
form_basic<T>::ub() 
188
 
{
189
 
  return _ub;
190
 
}
191
 
template<class T>
192
 
inline
193
 
csr<T>&
194
 
form_basic<T>::bu() 
195
 
{
196
 
  return _bu;
197
 
}
198
 
template<class T>
199
 
inline
200
 
csr<T>&
201
 
form_basic<T>::bb() 
202
 
{
203
 
  return _bb;
204
 
}
205
 
template<class T>
206
 
inline
207
 
const csr<T>&
208
 
form_basic<T>::uu() const
209
 
{
210
 
  return _uu;
211
 
}
212
 
template<class T>
213
 
inline
214
 
const csr<T>&
215
 
form_basic<T>::ub() const
216
 
{
217
 
  return _ub;
218
 
}
219
 
template<class T>
220
 
inline
221
 
const csr<T>&
222
 
form_basic<T>::bu() const
223
 
{
224
 
  return _bu;
225
 
}
226
 
template<class T>
227
 
inline
228
 
const csr<T>&
229
 
form_basic<T>::bb() const
230
 
{
231
 
  return _bb;
232
 
}
233
 
template<class T>
 
172
template<class T, class M>
234
173
inline
235
174
const communicator&
236
 
form_basic<T>::comm() const
 
175
form_basic<T,M>::comm() const
237
176
{
238
177
  return get_geo().comm();
239
178
}
240
 
template<class T>
 
179
template<class T, class M>
241
180
inline
242
 
form_basic<T>
243
 
form_basic<T>::operator+ (const form_basic<T>& b) const
 
181
form_basic<T,M>
 
182
form_basic<T,M>::operator+ (const form_basic<T,M>& b) const
244
183
{
245
 
  form_basic<T> c;
246
 
  c.uu() = uu() + b.uu();
247
 
  c.ub() = ub() + b.ub();
248
 
  c.bu() = bu() + b.bu();
249
 
  c.bb() = bb() + b.bb();
 
184
  form_basic<T,M> c;
 
185
  c.uu = uu + b.uu;
 
186
  c.ub = ub + b.ub;
 
187
  c.bu = bu + b.bu;
 
188
  c.bb = bb + b.bb;
250
189
  return c;
251
190
}
252
 
template<class T>
 
191
template<class T, class M>
253
192
inline
254
 
form_basic<T>
255
 
form_basic<T>::operator- (const form_basic<T>& b) const
 
193
form_basic<T,M>
 
194
form_basic<T,M>::operator- (const form_basic<T,M>& b) const
256
195
{
257
 
  form_basic<T> c;
258
 
  c.uu() = uu() - b.uu();
259
 
  c.ub() = ub() - b.ub();
260
 
  c.bu() = bu() - b.bu();
261
 
  c.bb() = bb() - b.bb();
 
196
  form_basic<T,M> c;
 
197
  c.uu = uu - b.uu;
 
198
  c.ub = ub - b.ub;
 
199
  c.bu = bu - b.bu;
 
200
  c.bb = bb - b.bb;
262
201
  return c;
263
202
}
264
203