![]() |
Reference documentation for deal.II version 8.1.0
|
#include <compressed_set_sparsity_pattern.h>
Classes | |
struct | Line |
Public Types | |
typedef types::global_dof_index | size_type |
typedef std::set< size_type >::const_iterator | row_iterator |
Public Member Functions | |
CompressedSetSparsityPattern () | |
CompressedSetSparsityPattern (const CompressedSetSparsityPattern &) | |
CompressedSetSparsityPattern (const size_type m, const size_type n) | |
CompressedSetSparsityPattern (const size_type n) | |
CompressedSetSparsityPattern & | operator= (const CompressedSetSparsityPattern &) |
void | reinit (const size_type m, const size_type n) |
void | compress () |
bool | empty () const |
size_type | max_entries_per_row () const |
void | add (const size_type i, const size_type j) |
template<typename ForwardIterator > | |
void | add_entries (const size_type row, ForwardIterator begin, ForwardIterator end, const bool indices_are_sorted=false) |
bool | exists (const size_type i, const size_type j) const |
void | symmetrize () |
void | print (std::ostream &out) const |
void | print_gnuplot (std::ostream &out) const |
size_type | n_rows () const |
size_type | n_cols () const |
size_type | row_length (const size_type row) const |
row_iterator | row_begin (const size_type row) const |
row_iterator | row_end (const size_type row) const |
size_type | bandwidth () const |
size_type | n_nonzero_elements () const |
![]() | |
Subscriptor () | |
Subscriptor (const Subscriptor &) | |
virtual | ~Subscriptor () |
Subscriptor & | operator= (const Subscriptor &) |
void | subscribe (const char *identifier=0) const |
void | unsubscribe (const char *identifier=0) const |
unsigned int | n_subscriptions () const |
void | list_subscribers () const |
DeclException3 (ExcInUse, int, char *, std::string &,<< "Object of class "<< arg2<< " is still used by "<< arg1<< " other objects.\n"<< "(Additional information: "<< arg3<< ")\n"<< "Note the entry in the Frequently Asked Questions of "<< "deal.II (linked to from http://www.dealii.org/) for "<< "more information on what this error means.") | |
DeclException2 (ExcNoSubscriber, char *, char *,<< "No subscriber with identifier \""<< arg2<< "\" did subscribe to this object of class "<< arg1) | |
template<class Archive > | |
void | serialize (Archive &ar, const unsigned int version) |
Static Public Member Functions | |
static bool | stores_only_added_elements () |
Private Attributes | |
size_type | rows |
size_type | cols |
std::vector< Line > | lines |
This class acts as an intermediate form of the SparsityPattern class. From the interface it mostly represents a SparsityPattern object that is kept compressed at all times. However, since the final sparsity pattern is not known while constructing it, keeping the pattern compressed at all times can only be achieved at the expense of either increased memory or run time consumption upon use. The main purpose of this class is to avoid some memory bottlenecks, so we chose to implement it memory conservative, but the chosen data format is too unsuited to be used for actual matrices. It is therefore necessary to first copy the data of this object over to an object of type SparsityPattern before using it in actual matrices.
Another viewpoint is that this class does not need up front allocation of a certain amount of memory, but grows as necessary. An extensive description of sparsity patterns can be found in the documentation of the Sparsity patterns module.
This class is an example of the "dynamic" type of Sparsity patterns. It is discussed in the step-27 and step-22 tutorial programs.
Since this class is intended as an intermediate replacement of the SparsityPattern class, it has mostly the same interface, with small changes where necessary. In particular, the add() function, and the functions inquiring properties of the sparsity pattern are the same.
Use this class as follows:
See also step-11 and step-18 for usage patterns of the related CompressedSparsityPattern class, and step-27 of the current class.
There are several, exchangeable variations of this class, see Sparsity patterns, section '"Dynamic" or "compressed" sparsity patterns' for more information.
This class is a variation of the CompressedSparsityPattern class. Instead of using sorted vectors together with a caching algorithm for storing the column indices of nonzero entries, the std::set container is used. This solution might not be the fastest in all situations, but seems to work much better than the CompressedSparsityPattern in the context of hp-adaptivity (see for example step-27), or generally when there are many nonzero entries in each row of a matrix (see step-22). On the other hand, a benchmark where nonzero entries were randomly inserted into the sparsity pattern revealed that this class is slower by a factor 4-6 in this situation. Hence, currently the suggestion is to carefully analyze which of the CompressedSparsityPattern classes works best in a certain setting. An algorithm which performs equally well in all situations still has to be found.
Definition at line 111 of file compressed_set_sparsity_pattern.h.
Declare the type for container size.
Definition at line 117 of file compressed_set_sparsity_pattern.h.
typedef std::set<size_type>::const_iterator CompressedSetSparsityPattern::row_iterator |
An iterator that can be used to iterate over the elements of a single row. The result of dereferencing such an iterator is a column index.
Definition at line 125 of file compressed_set_sparsity_pattern.h.
CompressedSetSparsityPattern::CompressedSetSparsityPattern | ( | ) |
Initialize the matrix empty, that is with no memory allocated. This is useful if you want such objects as member variables in other classes. You can make the structure usable by calling the reinit() function.
CompressedSetSparsityPattern::CompressedSetSparsityPattern | ( | const CompressedSetSparsityPattern & | ) |
Copy constructor. This constructor is only allowed to be called if the matrix structure to be copied is empty. This is so in order to prevent involuntary copies of objects for temporaries, which can use large amounts of computing time. However, copy constructors are needed if yo want to use the STL data types on classes like this, e.g. to write such statements like v.push_back (CompressedSetSparsityPattern());
, with v
a vector of CompressedSetSparsityPattern
objects.
Initialize a rectangular matrix with m
rows and n
columns.
CompressedSetSparsityPattern::CompressedSetSparsityPattern | ( | const size_type | n | ) |
Initialize a square matrix of dimension n
.
CompressedSetSparsityPattern& CompressedSetSparsityPattern::operator= | ( | const CompressedSetSparsityPattern & | ) |
Copy operator. For this the same holds as for the copy constructor: it is declared, defined and fine to be called, but the latter only for empty objects.
Reallocate memory and set up data structures for a new matrix with m
rows and n
columns, with at most max_entries_per_row() nonzero entries per row.
void CompressedSetSparsityPattern::compress | ( | ) |
Since this object is kept compressed at all times anway, this function does nothing, but is declared to make the interface of this class as much alike as that of the SparsityPattern class.
bool CompressedSetSparsityPattern::empty | ( | ) | const |
Return whether the object is empty. It is empty if no memory is allocated, which is the same as that both dimensions are zero.
size_type CompressedSetSparsityPattern::max_entries_per_row | ( | ) | const |
Return the maximum number of entries per row. Note that this number may change as entries are added.
Add a nonzero entry to the matrix. If the entry already exists, nothing bad happens.
Definition at line 468 of file compressed_set_sparsity_pattern.h.
|
inline |
Add several nonzero entries to the specified row of the matrix. If the entries already exist, nothing bad happens.
Definition at line 482 of file compressed_set_sparsity_pattern.h.
Check if a value at a certain position may be non-zero.
void CompressedSetSparsityPattern::symmetrize | ( | ) |
Make the sparsity pattern symmetric by adding the sparsity pattern of the transpose object.
This function throws an exception if the sparsity pattern does not represent a square matrix.
void CompressedSetSparsityPattern::print | ( | std::ostream & | out | ) | const |
Print the sparsity of the matrix. The output consists of one line per row of the format [i,j1,j2,j3,...]
. i is the row number and jn are the allocated columns in this row.
void CompressedSetSparsityPattern::print_gnuplot | ( | std::ostream & | out | ) | const |
Print the sparsity of the matrix in a format that gnuplot
understands and which can be used to plot the sparsity pattern in a graphical way. The format consists of pairs i j
of nonzero elements, each representing one entry of this matrix, one per line of the output file. Indices are counted from zero on, as usual. Since sparsity patterns are printed in the same way as matrices are displayed, we print the negative of the column index, which means that the (0,0)
element is in the top left rather than in the bottom left corner.
Print the sparsity pattern in gnuplot by setting the data style to dots or points and use the plot
command.
|
inline |
Return number of rows of this matrix, which equals the dimension of the image space.
Definition at line 450 of file compressed_set_sparsity_pattern.h.
|
inline |
Return number of columns of this matrix, which equals the dimension of the range space.
Definition at line 459 of file compressed_set_sparsity_pattern.h.
|
inline |
Number of entries in a specific row.
Definition at line 496 of file compressed_set_sparsity_pattern.h.
|
inline |
Return an iterator that can loop over all entries in the given row. Dereferencing the iterator yields a column index.
Definition at line 507 of file compressed_set_sparsity_pattern.h.
|
inline |
End iterator for the given row.
Definition at line 516 of file compressed_set_sparsity_pattern.h.
size_type CompressedSetSparsityPattern::bandwidth | ( | ) | const |
Compute the bandwidth of the matrix represented by this structure. The bandwidth is the maximum of for which the index pair
represents a nonzero entry of the matrix.
size_type CompressedSetSparsityPattern::n_nonzero_elements | ( | ) | const |
Return the number of nonzero elements allocated through this sparsity pattern.
|
inlinestatic |
Return whether this object stores only those entries that have been added explicitly, or if the sparsity pattern contains elements that have been added through other means (implicitly) while building it. For the current class, the result is always true.
This function mainly serves the purpose of describing the current class in cases where several kinds of sparsity patterns can be passed as template arguments.
Definition at line 525 of file compressed_set_sparsity_pattern.h.
|
private |
Number of rows that this sparsity structure shall represent.
Definition at line 370 of file compressed_set_sparsity_pattern.h.
|
private |
Number of columns that this sparsity structure shall represent.
Definition at line 376 of file compressed_set_sparsity_pattern.h.
|
private |
Actual data: store for each row the set of nonzero entries.
Definition at line 415 of file compressed_set_sparsity_pattern.h.