template class xf::fintech::internal::Solver

#include "fd_solver.hpp"

Overview

Class to encapsulate the Finite Difference engine components.

template <
    typename DT,
    unsigned int M_SIZE,
    unsigned int LOG2_M_SIZE,
    unsigned int A_SIZE,
    unsigned int MEM_WIDTH,
    unsigned int DIM2_SIZE1 = 3,
    unsigned int DIM2_SIZE2 = 5
    >
class Solver

Methods

Solver

Solver ()

default constructor

reorderS2V

void reorderS2V (
    const DT v_in [M_SIZE],
    DT v_out [M_SIZE],
    const unsigned int m1,
    const unsigned int m2
    )

Copy and reorder S ordered vector into V inner form.

Parameters:

v_in Vector representing array of size m1 x m2 flattened in S inner form
m1 Size of array [0..m1-1] in S direction
m2 Size of array [0..m2-1] in V direction
v_out Vector representing array of size m1 x m2 flattened in V inner form

reorderV2S

void reorderV2S (
    const DT v_in [M_SIZE],
    DT v_out [M_SIZE],
    const unsigned int m1,
    const unsigned int m2
    )

Copy and reorder V ordered vector into S inner form.

Parameters:

v_in Vector representing array of size m1 x m2 flattened in V inner form
m1 Size of array [0..m1] in S direction
m2 Size of array [0..m2] in V direction
v_out Vector representing array of size m1 x m2 flattened in S inner form

CopyVector

void CopyVector (
    const DT v_in [M_SIZE],
    DT v_out [M_SIZE]
    )

Utility function to copy a vector.

vectorAdd

void vectorAdd (
    const DT v_in0 [M_SIZE],
    const DT v_in1 [M_SIZE],
    DT v_out [M_SIZE]
    )

Utility function to add two vectors.

vectorSub

void vectorSub (
    const DT v_in0 [M_SIZE],
    const DT v_in1 [M_SIZE],
    DT v_out [M_SIZE]
    )

Utility function to subtract two vectors.

triDiagSovlerPCR

void triDiagSovlerPCR (
    DT X1 [M_SIZE][DIM2_SIZE1],
    DT rhs [M_SIZE],
    DT v_out [M_SIZE],
    const unsigned int m1,
    const unsigned int m2
    )

Wrapper to PCR tridiagonal solver.

Solves tridiagonal linear system

Parameters:

X1 M x 3 array holding lower/main/upper diagonals of X1 tridiagonal matrix
rhs Right hand side of linear system to be solved
m1 Size of array [0..m1-1] in S direction
m2 Size of array [0..m2-1] in V direction
v_out Solution vector representing array of size m1 x m2 flattened in V inner form

pendaDiagSovler

void pendaDiagSovler (
    DT A [M_SIZE][DIM2_SIZE2],
    DT rhs [M_SIZE],
    DT v_out [M_SIZE],
    bool precompute
    )

Solve pentadiagonal form linear system.

This is a highly serial algorithm and is the bottleneck in this solver Unfortunately due to the formulation used by In ‘T Hout & Foulon, the pentadiagonal array contains diagonals which are not fully populated. This causes the common parallel pentadiagonal systems to fail due to divide-by-zero errors or similar.

Parameters:

A M x 5 array holding lower/lower/main/upper/upper diagonals of X1 tridiagonal matrix
rhs Right hand side of linear system to be solved
precompute Flag to indicate the scaling factors should be computed
v_out Solution vector representing array of size m1 x m2 flattened in V inner form