25 #include "libmesh/dense_subvector.h"
26 #include "libmesh/dense_vector.h"
27 #include "libmesh/laspack_vector.h"
28 #include "libmesh/laspack_matrix.h"
29 #include "libmesh/int_range.h"
31 #ifdef LIBMESH_HAVE_LASPACK
58 return static_cast<Real>(l1Norm_V(const_cast<QVector*>(&_vec)));
68 return static_cast<Real>(l2Norm_V(const_cast<QVector*>(&_vec)));
78 return static_cast<Real>(MaxNorm_V(const_cast<QVector*>(&_vec)));
108 template <
typename T>
111 libmesh_assert_equal_to(size(), v.
size());
116 this->set(i, (*
this)(i) * v(i));
123 template <
typename T>
126 libmesh_assert_equal_to(size(), v.
size());
131 this->set(i, (*
this)(i) / v(i));
138 template <
typename T>
148 libmesh_assert_not_equal_to (v, T(0));
150 this->set(i, 1. / v);
156 template <
typename T>
170 template <
typename T>
179 this->_is_closed =
false;
186 template <
typename T>
194 template <
typename T>
198 const LaspackVector * v = cast_ptr<const LaspackVector *>(&v_in);
201 const bool was_closed = this->_is_closed;
205 libmesh_assert_equal_to (this->size(), v->
size());
208 this->add (i, a*(*v)(i));
211 this->_is_closed = was_closed;
217 template <
typename T>
229 AddAsgn_VV (&_vec, Mul_QV(const_cast<QMatrix*>(&mat->_QMat),
230 const_cast<QVector*>(&vec->
_vec)));
234 template <
typename T>
238 libmesh_not_implemented();
243 template <
typename T>
248 Asgn_VV(&_vec, Mul_SV (factor, &_vec));
251 template <
typename T>
262 template <
typename T>
271 return Mul_VV (const_cast<QVector*>(&(this->_vec)),
272 const_cast<QVector*>(&(v->
_vec)));
277 template <
typename T>
284 V_SetAllCmp (&_vec, s);
291 template <
typename T>
297 cast_ptr<const LaspackVector<T> *>(&v_in);
308 template <
typename T>
314 libmesh_assert_equal_to (this->size(), v.
size());
317 Asgn_VV (const_cast<QVector*>(&_vec),
318 const_cast<QVector*>(&v.
_vec)
322 this->_is_closed =
true;
330 template <
typename T>
338 if (this->size() == v.size())
343 libmesh_error_msg(
"this->size() = " << this->size() <<
" must be equal to v.size() = " << v.size());
349 template <
typename T>
354 cast_ptr<LaspackVector<T> *>(&v_local_in);
363 template <
typename T>
365 const std::vector<numeric_index_type> & libmesh_dbg_var(send_list))
const
369 cast_ptr<LaspackVector<T> *>(&v_local_in);
372 libmesh_assert_less_equal (send_list.size(), v_local->
size());
379 template <
typename T>
381 const std::vector<numeric_index_type> & indices)
const
384 v_local.resize(indices.size());
387 v_local[i] = (*
this)(indices[i]);
392 template <
typename T>
395 const std::vector<numeric_index_type> & libmesh_dbg_var(send_list))
397 libmesh_assert_equal_to (first_local_idx, 0);
398 libmesh_assert_equal_to (last_local_idx+1, this->size());
400 libmesh_assert_less_equal (send_list.size(), this->size());
403 this->_is_closed =
true;
409 template <
typename T>
413 v_local.resize(this->size());
416 v_local[i] = (*this)(i);
421 template <
typename T>
425 libmesh_assert_equal_to (pid, 0);
427 this->localize (v_local);
432 template <
typename T>
436 libmesh_not_implemented();
441 template <
typename T>
446 return -std::numeric_limits<Real>::max();
460 template <
typename T>
465 return std::numeric_limits<Real>::max();
485 #endif // #ifdef LIBMESH_HAVE_LASPACK