1#include <cuda_runtime.h>
10 template <
typename VarType>
14 my_transposedA.clear();
19 template <
typename VarType>
22 my_A.assign(s_matrix);
23 my_transposedA.assign(s_matrix_transposed);
26 my_x.resize(s_b.size());
30 template <
typename VarType>
33 int system_size = my_b.size();
39 SparseV x_0(system_size);
44 VarType delta_0 = 10, delta_new = 10, delta_old = 10;
45 SparseV b_new, temp1, temp2, my_r, my_d, my_q;
46 b_new.resize(system_size); temp1.resize(system_size); temp2.resize(system_size); my_r.resize(system_size); my_d.resize(system_size); my_q.resize(system_size);
47 b_new.reset(); temp1.reset(); temp2.reset(); my_r.reset(); my_d.reset(); my_q.reset();
60 delta_new = m_arithmetic->Dot(my_r, my_r);
62 while ((itor < i_max) && (delta_new > (threshold*threshold*delta_0)))
66 VarType alpha = delta_new / m_arithmetic->Dot(my_q, my_q);
72 temp1.reset(); temp2.reset();
84 delta_old = delta_new;
85 delta_new = m_arithmetic->Dot(my_r, my_r);
86 VarType beta = delta_new / delta_old;
94 x_0.clear();b_new.clear();temp1.clear();temp2.clear();my_r.clear();my_d.clear();my_q.clear();
static Arithmetic * Create(int n)
void assign_cgls(CArray< VarType > &s_b, std::vector< std::map< int, VarType > > &s_matrix, std::vector< std::map< int, VarType > > &s_matrix_transposed)
void clear()
Free allocated memory. Should be called before the object is deleted.
void CGLS(int i_max, VarType threshold)
void saxpy(DArray< T > &zArr, DArray< T > &xArr, DArray< T > &yArr, T alpha)
void subtract(DArray< T > &zArr, DArray< T > &xArr, DArray< T > &yArr)
This is an implementation of AdditiveCCD based on peridyno.
Array< T, DeviceType::CPU > CArray
void multiply_SM_by_vector(DArrayMap< VarType > &matrix_a, DArray< VarType > &a, DArray< VarType > &Aa)