22#include "common/common.h"
29#ifndef DOXYGEN_SHOULD_SKIP_THIS
30#if defined(PRECISION_zc)
31#define cpucblk_zccheck_overflow( value, overflow ) \
33 double rvalue = fabs( creal( value ) ); \
34 double ivalue = fabs( cimag( value ) ); \
35 if ( pastix_unlikely( (rvalue > overflow) || (ivalue > overflow) ) ) { \
36 pastix_print_warning( "cpucblk_zccheck_overflow, Incorrect value overflow for mixed precision" ); \
41#define cpucblk_dscheck_overflow( value, overflow ) \
43 double valabs = fabs( value ); \
44 if ( pastix_unlikely( valabs > overflow ) ) { \
45 pastix_print_warning( "cpucblk_dscheck_overflow, Incorrect value overflow for mixed precision" ); \
83 const pastix_bcsc_t *bcsc,
89 SolverBlok *lsolvblok = (solvcblk+1)->fblokptr;
92 pastix_complex64_t *Lvalues = bcsc->Lvalues;
93 pastix_complex64_t *Uvalues = bcsc->Uvalues;
96 int is2d = solvcblk->
cblktype & CBLK_LAYOUT_2D;
97 double overflow = LAPACKE_slamch(
'o' );
99 assert( (side !=
PastixUCoef) || (ucoeftab != NULL) );
101 for (itercoltab=0; itercoltab<csccblk->
colnbr; itercoltab++)
110 for (iterval=frow; iterval<lrow; iterval++)
115 if (rownum >= (solvcblk->
fcolnum+itercoltab))
117 while ((solvblok < lsolvblok) &&
118 ((solvblok->
lrownum < rownum) ||
127 if ( solvblok < lsolvblok )
130 coefindx += rownum - solvblok->
frownum;
131 coefindx += itercoltab * ldd;
132 pastix_cblk_lock( solvcblk );
134 pastix_cblk_unlock( solvcblk );
137 cpucblk_zccheck_overflow( Lvalues[iterval], overflow )
142 (rownum > (solvcblk->
fcolnum + itercoltab)) )
144 cpucblk_zccheck_overflow( Uvalues[iterval], overflow );
145#if defined(PRECISION_zc)
156#if defined(PASTIX_DEBUG_COEFTAB)
159 fprintf( stderr,
"cpucblk_zfillin: drop coeff from CSC c=%ld(%ld) l=%ld(%ld) cblk=%ld fcol=%ld lcol=%ld\n",
160 (
long)solvcblk->
fcolnum + itercoltab, (
long)itercoltab,
161 (
long)rownum, (
long)iterval, (
long)itercblk,
203 const pastix_bcsc_t *bcsc,
209 SolverBlok *lsolvblok = (solvcblk+1)->fblokptr;
211 pastix_complex64_t *Lvalues = bcsc->Lvalues;
212 pastix_complex64_t *Uvalues = bcsc->Uvalues;
214 double overflow = LAPACKE_slamch(
'o' );
216 assert( solvcblk->
cblktype & CBLK_LAYOUT_2D );
218 for (itercoltab=0; itercoltab<csccblk->
colnbr; itercoltab++)
228 for (iterval=frow; iterval<lrow; iterval++)
233 if (rownum >= (solvcblk->
fcolnum+itercoltab))
235 while ((solvblok < lsolvblok) &&
236 ((solvblok->
lrownum < rownum) ||
245 if ( solvblok < lsolvblok )
247 coefindx = rownum - solvblok->
frownum;
248 coefindx += itercoltab * ldd;
249 pastix_cblk_lock( solvcblk );
251 pastix_cblk_unlock( solvcblk );
254 cpucblk_zccheck_overflow( Lvalues[iterval], overflow );
259 (rownum > (solvcblk->
fcolnum + itercoltab)) )
261 cpucblk_zccheck_overflow( Uvalues[iterval], overflow);
262#if defined(PRECISION_zc)
273#if defined(PASTIX_DEBUG_COEFTAB)
276 fprintf( stderr,
"cpucblk_zfillin: drop coeff from CSC c=%ld(%ld) l=%ld(%ld) cblk=%ld fcol=%ld lcol=%ld\n",
277 (
long)solvcblk->
fcolnum + itercoltab, (
long)itercoltab,
278 (
long)rownum, (
long)iterval, (
long)itercblk,
320 const pastix_bcsc_t *bcsc,
324 if ( (solvmtx->
cblktab + itercblk)->cblktype & CBLK_COMPRESSED ) {
static int cpucblk_zcfillin_fr(pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk)
Initialize the full-rank coeftab structure from the internat bcsc.
int cpucblk_zcfillin(pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk)
Initialize the coeftab structure from the internal bcsc.
static int cpucblk_zcfillin_lr(pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk)
Initialize the low-rank coeftab structure from the internal bcsc.
BEGIN_C_DECLS typedef int pastix_int_t
float _Complex pastix_complex32_t
Compressed colptr format for the bcsc.
enum pastix_coefside_e pastix_coefside_t
Data blocks used in the kernel.
static pastix_int_t blok_rownbr(const SolverBlok *blok)
Compute the number of rows of a block.
pastix_lrblock_t * LRblock[2]
SolverCblk *restrict cblktab
Solver column block structure.
Solver column block structure.