Template Numerical Library version main:e6bb26f
Public Types | Static Public Member Functions | List of all members
TNL::Matrices::LambdaMatrixFactory< Real, Device, Index > Struct Template Reference

Helper class for creating instances of LambdaMatrix. More...

#include <TNL/Matrices/LambdaMatrix.h>

Public Types

using IndexType = Index
 
using RealType = Real
 

Static Public Member Functions

template<typename MatrixElementsLambda , typename CompressedRowLengthsLambda >
static auto create (const IndexType &rows, const IndexType &columns, MatrixElementsLambda &matrixElementsLambda, CompressedRowLengthsLambda &compressedRowLengthsLambda) -> LambdaMatrix< MatrixElementsLambda, CompressedRowLengthsLambda, Real, Device, Index >
 Creates lambda matrix with given dimensions and lambda functions. More...
 
template<typename MatrixElementsLambda , typename CompressedRowLengthsLambda >
static auto create (MatrixElementsLambda &matrixElementsLambda, CompressedRowLengthsLambda &compressedRowLengthsLambda) -> LambdaMatrix< MatrixElementsLambda, CompressedRowLengthsLambda, Real, Device, Index >
 Creates lambda matrix with given lambda functions. More...
 

Detailed Description

template<typename Real = double, typename Device = Devices::Host, typename Index = int>
struct TNL::Matrices::LambdaMatrixFactory< Real, Device, Index >

Helper class for creating instances of LambdaMatrix.

See LambdaMatrix.

Parameters
matrixElementsLambda
compressedRowLengthsLambda

Member Function Documentation

◆ create() [1/2]

template<typename Real = double, typename Device = Devices::Host, typename Index = int>
template<typename MatrixElementsLambda , typename CompressedRowLengthsLambda >
static auto TNL::Matrices::LambdaMatrixFactory< Real, Device, Index >::create ( const IndexType &  rows,
const IndexType &  columns,
MatrixElementsLambda &  matrixElementsLambda,
CompressedRowLengthsLambda &  compressedRowLengthsLambda 
) -> LambdaMatrix< MatrixElementsLambda, CompressedRowLengthsLambda, Real, Device, Index >
inlinestatic

Creates lambda matrix with given dimensions and lambda functions.

Parameters
rowsis number of matrix rows.
columnsis number of matrix columns.
matrixElementsLambdais a lambda function evaluating matrix elements.
compressedRowLengthsLambdais a lambda function returning number of non-zero matrix elements in given row.
Returns
instance of LambdaMatrix.
Example
#include <iostream>
#include <TNL/Matrices/LambdaMatrix.h>
int main( int argc, char* argv[] )
{
/***
* Lambda functions defining the matrix.
*/
auto compressedRowLengths = [=] __cuda_callable__ ( const int rows, const int columns, const int rowIdx ) -> int { return 1; };
auto matrixElements1 = [=] __cuda_callable__ ( const int rows, const int columns, const int rowIdx, const int localIdx, int& columnIdx, double& value ) {
columnIdx = rowIdx;
value = 1.0;
};
auto matrixElements2 = [=] __cuda_callable__ ( const int rows, const int columns, const int rowIdx, const int localIdx, int& columnIdx, double& value ) {
columnIdx = rowIdx;
value = rowIdx;
};
const int size = 5;
/***
* Matrix construction with explicit type definition.
*/
using MatrixType = decltype( TNL::Matrices::LambdaMatrixFactory< double, TNL::Devices::Host, int >::create( matrixElements1, compressedRowLengths ) );
MatrixType m1( size, size, matrixElements1, compressedRowLengths );
/***
* Matrix construction using 'auto'.
*/
auto m2 = TNL::Matrices::LambdaMatrixFactory< double, TNL::Devices::Host, int >::create( matrixElements2, compressedRowLengths );
m2.setDimensions( size, size );
std::cout << "The first lambda matrix: " << std::endl << m1 << std::endl;
std::cout << "The second lambda matrix: " << std::endl << m2 << std::endl;
}
#define __cuda_callable__
Definition: CudaCallable.h:22
T endl(T... args)
static auto create(MatrixElementsLambda &matrixElementsLambda, CompressedRowLengthsLambda &compressedRowLengthsLambda) -> LambdaMatrix< MatrixElementsLambda, CompressedRowLengthsLambda, Real, Device, Index >
Creates lambda matrix with given lambda functions.
Definition: LambdaMatrix.h:576
Output
The first lambda matrix:
Row: 0 -> 0:1
Row: 1 -> 1:1
Row: 2 -> 2:1
Row: 3 -> 3:1
Row: 4 -> 4:1
The second lambda matrix:
Row: 0 ->
Row: 1 -> 1:1
Row: 2 -> 2:2
Row: 3 -> 3:3
Row: 4 -> 4:4

◆ create() [2/2]

template<typename Real = double, typename Device = Devices::Host, typename Index = int>
template<typename MatrixElementsLambda , typename CompressedRowLengthsLambda >
static auto TNL::Matrices::LambdaMatrixFactory< Real, Device, Index >::create ( MatrixElementsLambda &  matrixElementsLambda,
CompressedRowLengthsLambda &  compressedRowLengthsLambda 
) -> LambdaMatrix< MatrixElementsLambda, CompressedRowLengthsLambda, Real, Device, Index >
inlinestatic

Creates lambda matrix with given lambda functions.

Parameters
matrixElementsLambdais a lambda function evaluating matrix elements.
compressedRowLengthsLambdais a lambda function returning number of non-zero matrix elements in given row.
Returns
instance of LambdaMatrix.
Example
#include <iostream>
#include <TNL/Matrices/LambdaMatrix.h>
int main( int argc, char* argv[] )
{
/***
* Lambda functions defining the matrix.
*/
auto compressedRowLengths = [=] __cuda_callable__ ( const int rows, const int columns, const int rowIdx ) -> int { return 1; };
auto matrixElements1 = [=] __cuda_callable__ ( const int rows, const int columns, const int rowIdx, const int localIdx, int& columnIdx, double& value ) {
columnIdx = rowIdx;
value = 1.0;
};
auto matrixElements2 = [=] __cuda_callable__ ( const int rows, const int columns, const int rowIdx, const int localIdx, int& columnIdx, double& value ) {
columnIdx = rowIdx;
value = rowIdx;
};
const int size = 5;
/***
* Matrix construction with explicit type definition.
*/
using MatrixType = decltype( TNL::Matrices::LambdaMatrixFactory< double, TNL::Devices::Host, int >::create( matrixElements1, compressedRowLengths ) );
MatrixType m1( size, size, matrixElements1, compressedRowLengths );
/***
* Matrix construction using 'auto'.
*/
auto m2 = TNL::Matrices::LambdaMatrixFactory< double, TNL::Devices::Host, int >::create( matrixElements2, compressedRowLengths );
m2.setDimensions( size, size );
std::cout << "The first lambda matrix: " << std::endl << m1 << std::endl;
std::cout << "The second lambda matrix: " << std::endl << m2 << std::endl;
}
Output
The first lambda matrix:
Row: 0 -> 0:1
Row: 1 -> 1:1
Row: 2 -> 2:1
Row: 3 -> 3:1
Row: 4 -> 4:1
The second lambda matrix:
Row: 0 ->
Row: 1 -> 1:1
Row: 2 -> 2:2
Row: 3 -> 3:3
Row: 4 -> 4:4

The documentation for this struct was generated from the following file: