25 #include "libmesh/dense_subvector.h"
26 #include "libmesh/dense_vector.h"
27 #include "libmesh/eigen_sparse_vector.h"
28 #include "libmesh/eigen_sparse_matrix.h"
29 #include "libmesh/int_range.h"
31 #ifdef LIBMESH_HAVE_EIGEN
53 return _vec.lpNorm<1>();
64 return _vec.lpNorm<2>();
75 return _vec.lpNorm<Eigen::Infinity>();
109 template <
typename T>
113 libmesh_assert_equal_to(size(), v_in.
size());
117 _vec = _vec.cwiseProduct(v._vec);
124 template <
typename T>
128 libmesh_assert_equal_to(size(), v_in.
size());
132 _vec = _vec.cwiseQuotient(v._vec);
140 template <
typename T>
148 libmesh_assert_not_equal_to ((*
this)(i), T(0));
151 _vec = _vec.cwiseInverse();
156 template <
typename T>
159 _vec = _vec.conjugate();
164 template <
typename T>
167 _vec += EigenSV::Constant(this->size(), v);
169 this->_is_closed =
false;
175 template <
typename T>
187 template <
typename T>
199 template <
typename T>
210 _vec += mat->_mat*e_vec->
_vec;
215 template <
typename T>
226 _vec += mat->_mat.transpose()*e_vec->
_vec;
231 template <
typename T>
241 template <
typename T>
254 template <
typename T>
263 return _vec.dot(v->
_vec);
268 template <
typename T>
282 template <
typename T>
288 cast_ptr<const EigenSparseVector<T> *>(&v_in);
299 template <
typename T>
305 libmesh_assert_equal_to (this->size(), v.
size());
309 this->_is_closed =
true;
316 template <
typename T>
324 if (this->size() == v.size())
329 libmesh_error_msg(
"this->size() = " << this->size() <<
" must be equal to v.size() = " << v.size());
335 template <
typename T>
340 cast_ptr<EigenSparseVector<T> *>(&v_local_in);
349 template <
typename T>
351 const std::vector<numeric_index_type> & libmesh_dbg_var(send_list))
const
355 cast_ptr<EigenSparseVector<T> *>(&v_local_in);
358 libmesh_assert_less_equal (send_list.size(), v_local->
size());
365 template <
typename T>
367 const std::vector<numeric_index_type> & indices)
const
370 v_local.resize(indices.size());
373 v_local[i] = (*
this)(indices[i]);
378 template <
typename T>
381 const std::vector<numeric_index_type> & libmesh_dbg_var(send_list))
383 libmesh_assert_equal_to (first_local_idx, 0);
384 libmesh_assert_equal_to (last_local_idx+1, this->size());
386 libmesh_assert_less_equal (send_list.size(), this->size());
388 this->_is_closed =
true;
393 template <
typename T>
397 v_local.resize(this->size());
400 v_local[i] = (*this)(i);
405 template <
typename T>
409 libmesh_assert_equal_to (pid, 0);
411 this->localize (v_local);
416 template <
typename T>
420 libmesh_not_implemented();
425 template <
typename T>
430 return -std::numeric_limits<Real>::max();
432 #ifdef LIBMESH_USE_COMPLEX_NUMBERS
448 template <
typename T>
453 return std::numeric_limits<Real>::max();
455 #ifdef LIBMESH_USE_COMPLEX_NUMBERS
477 #endif // #ifdef LIBMESH_HAVE_EIGEN