From: Ralf Hartmann Date: Tue, 21 Feb 2006 17:07:34 +0000 (+0000) Subject: Implementation of add function for three vectors. X-Git-Tag: v8.0.0~12234 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=04a50e38bf4868350d1f781eb089db8dfe1f0400;p=dealii.git Implementation of add function for three vectors. git-svn-id: https://svn.dealii.org/trunk@12448 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/lac/include/lac/vector.h b/deal.II/lac/include/lac/vector.h index 23d0d63c24..df78d9f203 100644 --- a/deal.II/lac/include/lac/vector.h +++ b/deal.II/lac/include/lac/vector.h @@ -604,16 +604,23 @@ class Vector : void scale (const Vector &scaling_factors); /** - * Assignment *this = a*V. + * Assignment *this = a*u. */ template - void equ (const Number a, const Vector& V); + void equ (const Number a, const Vector& u); /** - * Assignment *this = a*V + b*W. + * Assignment *this = a*u + b*v. */ - void equ (const Number a, const Vector& V, - const Number b, const Vector& W); + void equ (const Number a, const Vector& u, + const Number b, const Vector& v); + + /** + * Assignment *this = a*u + b*v + b*w. + */ + void equ (const Number a, const Vector& u, + const Number b, const Vector& v, + const Number c, const Vector& w); /** * Compute the elementwise ratio of the diff --git a/deal.II/lac/include/lac/vector.templates.h b/deal.II/lac/include/lac/vector.templates.h index 0c4411486a..db9fbf7c78 100644 --- a/deal.II/lac/include/lac/vector.templates.h +++ b/deal.II/lac/include/lac/vector.templates.h @@ -558,6 +558,19 @@ void Vector::scale (const Vector &s) } +template +template +void Vector::equ (const Number a, const Vector& u) +{ + Assert (vec_size!=0, ExcEmptyObject()); + Assert (vec_size == u.vec_size, ExcDimensionMismatch(vec_size, u.vec_size)); + iterator i_ptr = begin(), + i_end = end(); + typename Vector::const_iterator u_ptr = u.begin(); + while (i_ptr!=i_end) + *i_ptr++ = a * *u_ptr++; +} + template void Vector::equ (const Number a, const Vector& u, @@ -575,22 +588,25 @@ void Vector::equ (const Number a, const Vector& u, } - template -template -void Vector::equ (const Number a, const Vector& u) +void Vector::equ (const Number a, const Vector& u, + const Number b, const Vector& v, + const Number c, const Vector& w) { Assert (vec_size!=0, ExcEmptyObject()); Assert (vec_size == u.vec_size, ExcDimensionMismatch(vec_size, u.vec_size)); + Assert (vec_size == v.vec_size, ExcDimensionMismatch(vec_size, v.vec_size)); + Assert (vec_size == w.vec_size, ExcDimensionMismatch(vec_size, w.vec_size)); iterator i_ptr = begin(), i_end = end(); - typename Vector::const_iterator u_ptr = u.begin(); + const_iterator u_ptr = u.begin(), + v_ptr = v.begin(), + w_ptr = w.begin(); while (i_ptr!=i_end) - *i_ptr++ = a * *u_ptr++; + *i_ptr++ = a * *u_ptr++ + b * *v_ptr++ + c * *w_ptr++; } - template void Vector::ratio (const Vector &a, const Vector &b) {