imate
C++/CUDA Reference
Loading...
Searching...
No Matches
cDenseAffineMatrixFunction< DataType > Class Template Reference

Container for dense affine matrix functions of one parameter. More...

#include <c_dense_affine_matrix_function.h>

Inheritance diagram for cDenseAffineMatrixFunction< DataType >:
Collaboration diagram for cDenseAffineMatrixFunction< DataType >:

Public Member Functions

 cDenseAffineMatrixFunction (const DataType *A_, const LongIndexType num_rows_, const LongIndexType num_columns_, const FlagType A_is_row_major_, const FlagType A_is_symmetric_)
 Default constructor.
 
 cDenseAffineMatrixFunction (const DataType *A_, const LongIndexType num_rows_, const LongIndexType num_columns_, const FlagType A_is_row_major_, const FlagType A_is_symmetric_, const DataType *B_, const FlagType B_is_row_major_, const FlagType B_is_symmetric_)
 Constructor.
 
virtual ~cDenseAffineMatrixFunction ()
 Destructor.
 
virtual void set_symmetry (const FlagType symmetric)
 Specify whether the matrices are symmetic or non-symmetric.
 
virtual void dot (const DataType *vector, DataType *product)
 Matrix vector product.
 
virtual void transpose_dot (const DataType *vector, DataType *product)
 Matrix vector product written in place.
 
- Public Member Functions inherited from cAffineMatrixFunction< DataType >
 cAffineMatrixFunction ()
 Constructor.
 
virtual ~cAffineMatrixFunction ()
 Virtual destructor.
 
DataType get_eigenvalue (const DataType *known_parameters, const DataType known_eigenvalue, const DataType *inquiry_parameters) const
 This function defines an analytic relationship between a given set of parameters and the corresponding eigenvalue of the operator. Namely, given a set of parameters and a known eigenvalue of the operator for that specific set of parameters, this function obtains the eigenvalue of the operator for an other given set of parameters.
 
- Public Member Functions inherited from cLinearOperator< DataType >
 cLinearOperator ()
 Default constructor.
 
virtual ~cLinearOperator ()
 Destructor.
 
void set_parameters (DataType *parameters_)
 Sets the scalar parameter this->parameters. Parameter is initialized to NULL. However, before calling dot or transpose_dot functions, the parameters must be set.
 
- Public Member Functions inherited from cLinearOperatorBase
 cLinearOperatorBase ()
 Default constructor.
 
 cLinearOperatorBase (const LongIndexType num_rows_, const LongIndexType num_columns_)
 Constructor with setting num_rows and num_columns.
 
virtual ~cLinearOperatorBase ()
 Destructor.
 
LongIndexType get_num_rows () const
 Returns the number of rows of the matrix.
 
LongIndexType get_num_columns () const
 Returns the number of columns of the matrix.
 
IndexType get_num_parameters () const
 Returns the number of parameters of the linear operator.
 
FlagType is_eigenvalue_relation_known () const
 Returns a flag that determines whether a relation between the parameters of the operator and its eigenvalue(s) is known.
 

Protected Attributes

cDenseMatrix< DataType > A
 
cDenseMatrix< DataType > B
 
- Protected Attributes inherited from cAffineMatrixFunction< DataType >
bool B_is_identity
 
- Protected Attributes inherited from cLinearOperator< DataType >
DataType * parameters
 
- Protected Attributes inherited from cLinearOperatorBase
const LongIndexType num_rows
 
const LongIndexType num_columns
 
FlagType eigenvalue_relation_known
 
IndexType num_parameters
 

Additional Inherited Members

- Protected Member Functions inherited from cAffineMatrixFunction< DataType >
void _add_scaled_vector (const DataType *input_vector, const LongIndexType vector_size, const DataType scale, DataType *output_vector) const
 Performs the operation \( \boldsymbol{c} = \boldsymbol{c} + \alpha \boldsymbol{b} \), where \( \boldsymbol{b} \) is an input vector scaled by \( \alpha \) and \( \boldsymbol{c} \) it the output vector.
 

Detailed Description

template<typename DataType>
class cDenseAffineMatrixFunction< DataType >

Container for dense affine matrix functions of one parameter.

The cDenseAffineMatrixFunction contains two-dimensional dense matrices A and B. This operoator can perofrom matrix-vector product and transposed matrix-vector product.

See also
cAffineMatrixFunction, cCSRMatrixFunction, cCSCMatrixFunction, cDenseMatrix, cuDenseAffineMatrixFunction

Definition at line 45 of file c_dense_affine_matrix_function.h.

Constructor & Destructor Documentation

◆ cDenseAffineMatrixFunction() [1/2]

template<typename DataType >
cDenseAffineMatrixFunction< DataType >::cDenseAffineMatrixFunction ( const DataType *  A_,
const LongIndexType  num_rows_,
const LongIndexType  num_columns_,
const FlagType  A_is_row_major_,
const FlagType  A_is_symmetric_ 
)

Default constructor.

Matrix B is assumed to be the identity matrix.

Parameters
[in]A_1D array that represents a 2D dense array with either C (row) major ordering or Fortran (column) major ordering. The major ordering should de defined by A_is_row_major flag.
[in]num_rows_Number of rows of A and B
[in]num_columns_Number of columns of A and B
[in]A_is_row_major_Boolean, can be 0 or 1 as follows:
  • If A is row major (C ordering where the last index is contiguous) this value should be 1.
  • If A is column major (Fortran ordering where the first index is contiguous), this value should be set to 0.
[in]A_is_symmetric_Boolean. If A is symmetric, set this value to 1, otherwise 0.

Definition at line 48 of file c_dense_affine_matrix_function.cpp.

53 :
54
55 // Base class constructor
56 cLinearOperatorBase(num_rows_, num_columns_),
57
58 // Initializer list
59 A(A_, num_rows_, num_columns_, A_is_row_major_, A_is_symmetric_)
60{
61 // This constructor is called assuming B is identity
62 this->B_is_identity = true;
63
64 // When B is identity, the eigenvalues of A+tB are known for any t
66}
cLinearOperatorBase()
Default constructor.

References cAffineMatrixFunction< DataType >::B_is_identity, and cLinearOperatorBase::eigenvalue_relation_known.

◆ cDenseAffineMatrixFunction() [2/2]

template<typename DataType >
cDenseAffineMatrixFunction< DataType >::cDenseAffineMatrixFunction ( const DataType *  A_,
const LongIndexType  num_rows_,
const LongIndexType  num_columns_,
const FlagType  A_is_row_major_,
const FlagType  A_is_symmetric_,
const DataType *  B_,
const FlagType  B_is_row_major_,
const FlagType  B_is_symmetric_ 
)

Constructor.

Matrix B is assumed to be the identity matrix.

Parameters
[in]A_1D array that represents a 2D dense array with either C (row) major ordering or Fortran (column) major ordering. The major ordering should de defined by A_is_row_major flag.
[in]num_rows_Number of rows of A and B
[in]num_columns_Number of columns of A and B
[in]A_is_row_major_Boolean, can be 0 or 1 as follows:
  • If A is row major (C ordering where the last index is contiguous) this value should be 1.
  • If A is column major (Fortran ordering where the first index is contiguous), this value should be set to 0.
[in]A_is_symmetric_Boolean. If A is symmetric, set this value to 1, otherwise 0.
[in]B_1D array that represents a 2D dense array with either C (row) major ordering or Fortran (column) major ordering. The major ordering should de defined by A_is_row_major flag.
[in]B_is_row_major_Boolean, can be 0 or 1 as follows:
  • If B is row major (C ordering where the last index is contiguous) this value should be 1.
  • If B is column major (Fortran ordering where the first index is contiguous), this value should be set to 0.
[in]B_is_symmetric_Boolean. If B is symmetric, set this value to 1, otherwise 0.

Definition at line 109 of file c_dense_affine_matrix_function.cpp.

117 :
118
119 // Base class constructor
120 cLinearOperatorBase(num_rows_, num_columns_),
121
122 // Initializer list
123 A(A_, num_rows_, num_columns_, A_is_row_major_, A_is_symmetric_),
124 B(B_, num_rows_, num_columns_, B_is_row_major_, B_is_symmetric_)
125{
126 // Matrix B is assumed to be non-zero. Check if it is identity or generic
127 if (this->B.is_identity_matrix())
128 {
129 this->B_is_identity = true;
131 }
132}

References cDenseAffineMatrixFunction< DataType >::B, cAffineMatrixFunction< DataType >::B_is_identity, and cLinearOperatorBase::eigenvalue_relation_known.

◆ ~cDenseAffineMatrixFunction()

template<typename DataType >
cDenseAffineMatrixFunction< DataType >::~cDenseAffineMatrixFunction ( )
virtual

Destructor.

Definition at line 143 of file c_dense_affine_matrix_function.cpp.

144{
145}

Member Function Documentation

◆ dot()

template<typename DataType >
void cDenseAffineMatrixFunction< DataType >::dot ( const DataType *  vector,
DataType *  product 
)
virtual

Matrix vector product.

Performs the matrix vector product \( \boldsymbol{y} = (\mathbf{A} + t \mathbf{B}) \boldsymbol{x} \).

Parameters
[in]vectorA one-dimensional input vector \( \boldsymbol{x} \) with size the of the number of columns of the matrix \( \mathbf{A} \).
[out]productA one-dimensional output vector \( \boldsymbol{y} \) with the size of the number of rows of \( \mathbf{A} \). This vector will be overwritten.
See also
cDenseAffineMatrixFunction::transpose_dot

Implements cLinearOperator< DataType >.

Definition at line 201 of file c_dense_affine_matrix_function.cpp.

204{
205 // Matrix A times vector
206 this->A.dot(vector, product);
207 LongIndexType min_vector_size;
208
209 // Matrix B times vector to be added to the product
210 if (this->B_is_identity)
211 {
212 // Check parameter is set
213 assert((this->parameters != NULL) && "Parameter is not set.");
214
215 // Find minimum of the number of rows and columns
216 min_vector_size = \
217 (this->num_rows < this->num_columns) ? \
218 this->num_rows : this->num_columns;
219
220 // Adding input vector to product
221 this->_add_scaled_vector(vector, min_vector_size,
222 this->parameters[0], product);
223 }
224 else
225 {
226 // Check parameter is set
227 assert((this->parameters != NULL) && "Parameter is not set.");
228
229 // Adding parameter times B times input vector to the product
230 this->B.dot_plus(vector, this->parameters[0], product);
231 }
232}
void _add_scaled_vector(const DataType *input_vector, const LongIndexType vector_size, const DataType scale, DataType *output_vector) const
Performs the operation , where is an input vector scaled by and it the output vector.
const LongIndexType num_rows
const LongIndexType num_columns
int LongIndexType
Definition types.h:60

◆ set_symmetry()

template<typename DataType >
void cDenseAffineMatrixFunction< DataType >::set_symmetry ( const FlagType  symmetric)
virtual

Specify whether the matrices are symmetic or non-symmetric.

This function overwrites the symmetry status that has been set by the constructor. Note that the symmetry status of both matrices \( \mathbf{A} \) and \( \mathbf{B} \) in the linear operator \( \mathbf{A} + t \mathbf{B} \) will be set together.

Parameters
[in]symmetricBoolean. If set to 1, the matrix is assumed to be symmetric. Otherwiese non-symmetric.

Implements cAffineMatrixFunction< DataType >.

Definition at line 165 of file c_dense_affine_matrix_function.cpp.

167{
168 if (symmetric == 1)
169 {
170 this->A.set_symmetry(1);
171 this->B.set_symmetry(1);
172 }
173 else
174 {
175 this->A.set_symmetry(0);
176 this->B.set_symmetry(0);
177 }
178}

References cLinearOperatorBase::set_symmetry().

Here is the call graph for this function:

◆ transpose_dot()

template<typename DataType >
void cDenseAffineMatrixFunction< DataType >::transpose_dot ( const DataType *  vector,
DataType *  product 
)
virtual

Matrix vector product written in place.

Performs the matrix vector product \( \boldsymbol{y} = (\mathbf{A} + t \mathbf{B})^{\intercal} \boldsymbol{x} \).

Parameters
[in]vectorA one-dimensional input vector \( \boldsymbol{x} \) with size the of the number of columns of the matrix \( \mathbf{A} \).
[out]productA one-dimensional output vector \( \boldsymbol{y} \) with the size of the number of rows of \( \mathbf{A} \).
See also
cDenseAffineMatrixFunction::dot

Implements cLinearOperator< DataType >.

Definition at line 254 of file c_dense_affine_matrix_function.cpp.

257{
258 // Matrix A times vector
259 this->A.transpose_dot(vector, product);
260 LongIndexType min_vector_size;
261
262 // Matrix B times vector to be added to the product
263 if (this->B_is_identity)
264 {
265 // Check parameter is set
266 assert((this->parameters != NULL) && "Parameter is not set.");
267
268 // Find minimum of the number of rows and columns
269 min_vector_size = \
270 (this->num_rows < this->num_columns) ? \
271 this->num_rows : this->num_columns;
272
273 // Adding input vector to product
274 this->_add_scaled_vector(vector, min_vector_size,
275 this->parameters[0], product);
276 }
277 else
278 {
279 // Check parameter is set
280 assert((this->parameters != NULL) && "Parameter is not set.");
281
282 // Adding "parameter * B * input vector" to the product
283 this->B.transpose_dot_plus(vector, this->parameters[0], product);
284 }
285}

Member Data Documentation

◆ A

template<typename DataType >
cDenseMatrix<DataType> cDenseAffineMatrixFunction< DataType >::A
protected

Definition at line 82 of file c_dense_affine_matrix_function.h.

◆ B

template<typename DataType >
cDenseMatrix<DataType> cDenseAffineMatrixFunction< DataType >::B
protected

The documentation for this class was generated from the following files: