MFEM  v3.3.2
Finite element discretization library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
blockvector.hpp
Go to the documentation of this file.
1 // Copyright (c) 2010, Lawrence Livermore National Security, LLC. Produced at
2 // the Lawrence Livermore National Laboratory. LLNL-CODE-443211. All Rights
3 // reserved. See file COPYRIGHT for details.
4 //
5 // This file is part of the MFEM library. For more information and source code
6 // availability see http://mfem.org.
7 //
8 // MFEM is free software; you can redistribute it and/or modify it under the
9 // terms of the GNU Lesser General Public License (as published by the Free
10 // Software Foundation) version 2.1 dated February 1999.
11 
12 #ifndef MFEM_BLOCKVECTOR
13 #define MFEM_BLOCKVECTOR
14 
15 #include "../config/config.hpp"
16 #include "../general/array.hpp"
17 #include "vector.hpp"
18 
19 namespace mfem
20 {
21 
22 //! @class BlockVector
23 /*
24  * \brief A class to handle Vectors in a block fashion
25  *
26  * All data is contained in Vector::data, while blockVector is just a viewer for this data
27  *
28  */
29 class BlockVector: public Vector
30 {
31 protected:
32 
33  //! Number of blocks in the blockVector
34  int numBlocks;
35  //! Offset for each block start. (length numBlocks+1)
36  /**
37  * blockOffsets[i+1] - blockOffsets[i] is the size of block i.
38  */
39  const int *blockOffsets;
40  //! array of Vector objects used to extract blocks without allocating memory.
42 
43 public:
44  //! empty constructor
45  BlockVector();
46 
47  //! Constructor
48  /**
49  * bOffsets is an array of integers (length nBlocks+1) that tells the offsets
50  * of each block start.
51  */
52  BlockVector(const Array<int> & bOffsets);
53 
54  //! Copy constructor
55  BlockVector(const BlockVector & block);
56 
57  //! View constructor
58  /*
59  * data is an array of double of length at least blockOffsets[numBlocks] that
60  * contain all the values of the monolithic vector. bOffsets is an array of
61  * integers (length nBlocks+1) that tells the offsets of each block start.
62  * nBlocks is the number of blocks.
63  */
64  BlockVector(double *data, const Array<int> & bOffsets);
65 
66  //! Assignment operator. this and original must have the same block structure.
67  BlockVector & operator=(const BlockVector & original);
68  //! Set each entry of this equal to val
69  BlockVector & operator=(double val);
70 
71  //! Destructor
72  ~BlockVector();
73 
74  //! Get the i-th vector in the block.
75  Vector & GetBlock(int i);
76  //! Get the i-th vector in the block (const version).
77  const Vector & GetBlock(int i) const;
78 
79  //! Get the i-th vector in the block
80  void GetBlockView(int i, Vector & blockView);
81 
82  int BlockSize(int i) { return blockOffsets[i+1] - blockOffsets[i];}
83 
84  //! Update method
85  /**
86  * data is an array of double of length at least blockOffsets[numBlocks] that
87  * contain all the values of the monolithic vector. bOffsets is an array of
88  * integers (length nBlocks+1) that tells the offsets of each block start.
89  * nBlocks is the number of blocks.
90  */
91  void Update(double *data, const Array<int> & bOffsets);
92 };
93 
94 }
95 
96 #endif /* MFEM_BLOCKVECTOR */
~BlockVector()
Destructor.
int BlockSize(int i)
Definition: blockvector.hpp:82
void GetBlockView(int i, Vector &blockView)
Get the i-th vector in the block.
BlockVector()
empty constructor
Definition: blockvector.cpp:19
const int * blockOffsets
Offset for each block start. (length numBlocks+1)
Definition: blockvector.hpp:39
void Update(double *data, const Array< int > &bOffsets)
Update method.
Definition: blockvector.cpp:70
Array< Vector * > tmp_block
array of Vector objects used to extract blocks without allocating memory.
Definition: blockvector.hpp:41
int numBlocks
Number of blocks in the blockVector.
Definition: blockvector.hpp:34
BlockVector & operator=(const BlockVector &original)
Assignment operator. this and original must have the same block structure.
Definition: blockvector.cpp:90
Vector data type.
Definition: vector.hpp:41
double * data
Definition: vector.hpp:46
Vector & GetBlock(int i)
Get the i-th vector in the block.