PaStiX Handbook
6.4.0
Loading...
Searching...
No Matches
core_clrnrm.c
Go to the documentation of this file.
1
/**
2
*
3
* @file core_clrnrm.c
4
*
5
* PaStiX low-rank kernel to compute the norms of a low-rank block.
6
*
7
* @copyright 2016-2024 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
8
* Univ. Bordeaux. All rights reserved.
9
*
10
* @version 6.4.0
11
* @author Mathieu Faverge
12
* @date 2024-07-05
13
* @generated from /builds/2mk6rsew/0/solverstack/pastix/kernels/core_zlrnrm.c, normal z -> c, Tue Feb 25 14:34:50 2025
14
*
15
**/
16
#include "common.h"
17
#include <lapacke.h>
18
#include "
pastix_clrcores.h
"
19
20
/**
21
*******************************************************************************
22
*
23
* @brief Compute the norm of a low-rank matrix.
24
*
25
*******************************************************************************
26
*
27
* @param[in] ntype
28
* The matrix norm to compute.
29
*
30
* @param[in] transV
31
* TODO
32
*
33
* @param[in] M
34
* TODO
35
*
36
* @param[in] N
37
* TODO
38
*
39
* @param[in] A
40
* The low-rank matrix
41
*
42
*******************************************************************************
43
*
44
* @return The norm of the matrix A
45
*
46
*******************************************************************************/
47
float
48
core_clrnrm
(
pastix_normtype_t
ntype,
49
int
transV,
50
pastix_int_t
M,
51
pastix_int_t
N,
52
const
pastix_lrblock_t
*A )
53
{
54
if
( ntype !=
PastixFrobeniusNorm
) {
55
fprintf( stderr,
"core_clrnrm: Only the Frobenius norm is available for now\n"
);
56
ntype =
PastixFrobeniusNorm
;
57
}
58
59
if
( A->
rk
== -1 ) {
60
assert( transV ==
PastixNoTrans
);
61
return
LAPACKE_clange_work( LAPACK_COL_MAJOR,
'f'
,
62
M, N, A->
u
, M, NULL );
63
}
64
else
if
( A->
rk
== 0 ) {
65
return
0.;
66
}
67
else
{
68
float
normU, normV;
69
70
normU = LAPACKE_clange_work( LAPACK_COL_MAJOR,
'f'
,
71
M, A->
rk
, A->
u
, M, NULL );
72
if
( transV ==
PastixNoTrans
) {
73
normV = LAPACKE_clange_work( LAPACK_COL_MAJOR,
'f'
,
74
A->
rk
, N, A->
v
, A->
rkmax
, NULL );
75
}
76
else
{
77
normV = LAPACKE_clange_work( LAPACK_COL_MAJOR,
'f'
,
78
N, A->
rk
, A->
v
, N, NULL );
79
}
80
/* This is an over-estimation of the norm as with frobenius ||UV|| <= ||U|| * ||V|| */
81
return
normU * normV;
82
}
83
}
pastix_int_t
BEGIN_C_DECLS typedef int pastix_int_t
Definition
datatypes.h:51
pastix_lrblock_s::u
void * u
Definition
pastix_lowrank.h:169
pastix_lrblock_s::rk
int rk
Definition
pastix_lowrank.h:167
pastix_lrblock_s::v
void * v
Definition
pastix_lowrank.h:170
pastix_lrblock_s::rkmax
int rkmax
Definition
pastix_lowrank.h:168
pastix_lrblock_s
The block low-rank structure to hold a matrix in low-rank form.
Definition
pastix_lowrank.h:166
core_clrnrm
float core_clrnrm(pastix_normtype_t ntype, int transV, pastix_int_t M, pastix_int_t N, const pastix_lrblock_t *A)
Compute the norm of a low-rank matrix.
Definition
core_clrnrm.c:48
pastix_normtype_t
enum pastix_normtype_e pastix_normtype_t
Norms.
PastixFrobeniusNorm
@ PastixFrobeniusNorm
Definition
api.h:504
PastixNoTrans
@ PastixNoTrans
Definition
api.h:445
pastix_clrcores.h
build-mpi
kernels
core_clrnrm.c
Generated by
1.9.8