/**
* Copy operator for arguments of the same type. Resize the present vector
- * if necessary.
+ * if necessary to the correct number of blocks, then copy the individual
+ * blocks from `v` using the copy-assignment operator of the class that
+ * represents the individual blocks.
*/
BlockVector<Number> &
operator=(const BlockVector<Number> &v);
operator=(const value_type s);
/**
- * Copy operator for arguments of the same type. Resize the present
- * vector if necessary.
+ * Copy operator for arguments of the same type. Resize the present vector
+ * if necessary to the correct number of blocks, then copy the individual
+ * blocks from `v` using the copy-assignment operator of the class that
+ * represents the individual blocks.
+ *
+ * Copying the vectors that make up individual blocks can have complex
+ * semantics in parallel vector classes. See the information provided
+ * by the class used to represent the individual blocks.
*/
BlockVector &
operator=(const BlockVector &V);
/**
- * Copy operator for template arguments of different types. Resize the
- * present vector if necessary.
+ * Copy operator for arguments of different type. Resize the present
+ * vector if necessary to the correct number of blocks, then copy the
+ * individual blocks from `v` using the copy-assignment operator of the
+ * class that represents the individual blocks.
+ *
+ * Copying the vectors that make up individual blocks can have complex
+ * semantics in parallel vector classes. See the information provided
+ * by the class used to represent the individual blocks.
*/
template <class Number2>
BlockVector &
* Assigns the vector to the parallel partitioning of the input vector
* @p in_vector, and copies all the data.
*
- * If one of the input vector or the calling vector (to the left of the
- * assignment operator) had ghost elements set before this operation,
- * the calling vector will have ghost values set. Otherwise, it will be
- * in write mode. If the input vector does not have any ghost elements
- * at all, the vector will also update its ghost values in analogy to
- * the respective setting the Trilinos and PETSc vectors.
+ * The semantics of this operator are complex. If the two vectors have
+ * the same size, and
+ * if either the left or right hand side vector of the assignment (i.e.,
+ * either the input vector on the right hand side, or the calling vector
+ * to the left of the assignment operator) currently has ghost elements,
+ * then the left hand side vector will also have ghost values and will
+ * consequently be a read-only vector (see also the
+ * @ref GlossGhostedVector "glossary entry" on the issue). Otherwise, the
+ * left hand vector will be a writable vector after this operation.
+ * These semantics facilitate having a vector with ghost elements on the
+ * left hand side of the assignment, and a vector without ghost elements
+ * on the right hand side, with the resulting left hand side vector
+ * having the correct values in both its locally owned and its ghost
+ * elements.
+ *
+ * On the other hand, if the left hand side vector does not have the
+ * correct size yet, or is perhaps an entirely uninitialized vector,
+ * then the assignment is simply a copy operation in the usual sense:
+ * In that case, if the right hand side has no ghost elements (i.e.,
+ * is a completely distributed vector), then the left hand side will
+ * have no ghost elements either. And if the right hand side has
+ * ghost elements (and is consequently read-only), then the left
+ * hand side will have these same properties after the operation.
*/
Vector<Number, MemorySpace> &
operator=(const Vector<Number, MemorySpace> &in_vector);
operator=(const value_type s);
/**
- * Copy operator for arguments of the same type.
+ * Copy operator for arguments of the same type. Resize the present vector
+ * if necessary to the correct number of blocks, then copy the individual
+ * blocks from `v` using the copy-assignment operator of the class that
+ * represents the individual blocks.
+ *
+ * Copying the vectors that make up individual blocks can have complex
+ * semantics in parallel vector classes. See the information provided
+ * by the class used to represent the individual blocks.
*/
BlockVector &
operator=(const BlockVector &V);
/**
* Copy the given vector. Resize the present vector if necessary. Also
* take over the MPI communicator of @p v.
+ *
+ * The semantics of this operator are complex. If the two vectors have
+ * the same size, and
+ * if either the left or right hand side vector of the assignment (i.e.,
+ * either the input vector on the right hand side, or the calling vector
+ * to the left of the assignment operator) currently has ghost elements,
+ * then the left hand side vector will also have ghost values and will
+ * consequently be a read-only vector (see also the
+ * @ref GlossGhostedVector "glossary entry" on the issue). Otherwise, the
+ * left hand vector will be a writable vector after this operation.
+ * These semantics facilitate having a vector with ghost elements on the
+ * left hand side of the assignment, and a vector without ghost elements
+ * on the right hand side, with the resulting left hand side vector
+ * having the correct values in both its locally owned and its ghost
+ * elements.
+ *
+ * On the other hand, if the left hand side vector does not have the
+ * correct size yet, or is perhaps an entirely uninitialized vector,
+ * then the assignment is simply a copy operation in the usual sense:
+ * In that case, if the right hand side has no ghost elements (i.e.,
+ * is a completely distributed vector), then the left hand side will
+ * have no ghost elements either. And if the right hand side has
+ * ghost elements (and is consequently read-only), then the left
+ * hand side will have these same properties after the operation.
*/
Vector &
operator=(const Vector &v);
* Copy function. This function takes a Vector and copies all the
* elements. The Vector will have the same parallel distribution as @p
* V.
+ *
+ * The semantics of this operator are complex. If the two vectors have
+ * the same size, and
+ * if either the left or right hand side vector of the assignment (i.e.,
+ * either the input vector on the right hand side, or the calling vector
+ * to the left of the assignment operator) currently has ghost elements,
+ * then the left hand side vector will also have ghost values and will
+ * consequently be a read-only vector (see also the
+ * @ref GlossGhostedVector "glossary entry" on the issue). Otherwise, the
+ * left hand vector will be a writable vector after this operation.
+ * These semantics facilitate having a vector with ghost elements on the
+ * left hand side of the assignment, and a vector without ghost elements
+ * on the right hand side, with the resulting left hand side vector
+ * having the correct values in both its locally owned and its ghost
+ * elements.
+ *
+ * On the other hand, if the left hand side vector does not have the
+ * correct size yet, or is perhaps an entirely uninitialized vector,
+ * then the assignment is simply a copy operation in the usual sense:
+ * In that case, if the right hand side has no ghost elements (i.e.,
+ * is a completely distributed vector), then the left hand side will
+ * have no ghost elements either. And if the right hand side has
+ * ghost elements (and is consequently read-only), then the left
+ * hand side will have these same properties after the operation.
*/
Vector &
operator=(const Vector &V);
operator=(const value_type s);
/**
- * Copy operator for arguments of the same type.
+ * Copy operator for arguments of the same type. Resize the present vector
+ * if necessary to the correct number of blocks, then copy the individual
+ * blocks from `v` using the copy-assignment operator of the class that
+ * represents the individual blocks.
+ *
+ * Copying the vectors that make up individual blocks can have complex
+ * semantics in parallel vector classes. See the information provided
+ * by the class used to represent the individual blocks.
*/
BlockVector &
operator=(const BlockVector &v);
operator=(const Number s);
/**
- * Copy operator for arguments of the same type.
+ * Copy operator for arguments of the same type. Resize the present vector
+ * if necessary to the correct number of blocks, then copy the individual
+ * blocks from `v` using the copy-assignment operator of the class that
+ * represents the individual blocks.
+ *
+ * Copying the vectors that make up individual blocks can have complex
+ * semantics in parallel vector classes. See the information provided
+ * by the class used to represent the individual blocks.
*/
BlockVector<Number, MemorySpace> &
operator=(const BlockVector<Number, MemorySpace> &v);
* Copy function. This function takes a Vector and copies all the
* elements. The Vector will have the same parallel distribution as @p
* V.
+ *
+ * The semantics of this operator are complex. If the two vectors have
+ * the same size, and
+ * if either the left or right hand side vector of the assignment (i.e.,
+ * either the input vector on the right hand side, or the calling vector
+ * to the left of the assignment operator) currently has ghost elements,
+ * then the left hand side vector will also have ghost values and will
+ * consequently be a read-only vector (see also the
+ * @ref GlossGhostedVector "glossary entry" on the issue). Otherwise, the
+ * left hand vector will be a writable vector after this operation.
+ * These semantics facilitate having a vector with ghost elements on the
+ * left hand side of the assignment, and a vector without ghost elements
+ * on the right hand side, with the resulting left hand side vector
+ * having the correct values in both its locally owned and its ghost
+ * elements.
+ *
+ * On the other hand, if the left hand side vector does not have the
+ * correct size yet, or is perhaps an entirely uninitialized vector,
+ * then the assignment is simply a copy operation in the usual sense:
+ * In that case, if the right hand side has no ghost elements (i.e.,
+ * is a completely distributed vector), then the left hand side will
+ * have no ghost elements either. And if the right hand side has
+ * ghost elements (and is consequently read-only), then the left
+ * hand side will have these same properties after the operation.
*/
Vector &
operator=(const Vector &V);
/**
* Copy the given vector. Resize the present vector if necessary. In
- * this case, also the Epetra_Map that designs the parallel partitioning
+ * this case, also the `Epetra_Map` that designs the parallel partitioning
* is taken from the input vector.
+ *
+ * The semantics of this operator are complex. If the two vectors have
+ * the same size, and
+ * if either the left or right hand side vector of the assignment (i.e.,
+ * either the input vector on the right hand side, or the calling vector
+ * to the left of the assignment operator) currently has ghost elements,
+ * then the left hand side vector will also have ghost values and will
+ * consequently be a read-only vector (see also the
+ * @ref GlossGhostedVector "glossary entry" on the issue). Otherwise, the
+ * left hand vector will be a writable vector after this operation.
+ * These semantics facilitate having a vector with ghost elements on the
+ * left hand side of the assignment, and a vector without ghost elements
+ * on the right hand side, with the resulting left hand side vector
+ * having the correct values in both its locally owned and its ghost
+ * elements.
+ *
+ * On the other hand, if the left hand side vector does not have the
+ * correct size yet, or is perhaps an entirely uninitialized vector,
+ * then the assignment is simply a copy operation in the usual sense:
+ * In that case, if the right hand side has no ghost elements (i.e.,
+ * is a completely distributed vector), then the left hand side will
+ * have no ghost elements either. And if the right hand side has
+ * ghost elements (and is consequently read-only), then the left
+ * hand side will have these same properties after the operation.
*/
Vector &
operator=(const Vector &v);