Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/**
*
* @file pzlascal.c
*
* MORSE auxiliary routines
* MORSE is a software package provided by Univ. of Tennessee,
* Univ. of California Berkeley and Univ. of Colorado Denver
*
* @version 2.8.0
* @author Dalal Sukkari
* @date 2010-11-15
* @precisions normal z -> s d c
*
**/
#include "control/common.h"
#define A(m, n) A, m, n
/**
* Parallel scale of a matrix A
**/
void morse_pzlascal(MORSE_enum uplo, MORSE_Complex64_t alpha, MORSE_desc_t *A,
MORSE_sequence_t *sequence, MORSE_request_t *request)
{
MORSE_context_t *morse;
MORSE_option_t options;
int tempmm, tempnn, tempmn, tempnm;
int m, n;
int ldam, ldan;
int minmnt = min(A->mt, A->nt);
morse = morse_context_self();
if (sequence->status != MORSE_SUCCESS)
return;
RUNTIME_options_init(&options, morse, sequence, request);
switch(uplo) {
case MorseLower:
for (n = 0; n < minmnt; n++) {
tempnm = n == A->mt-1 ? A->m-n*A->mb : A->mb;
tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
ldan = BLKLDD(A, n);
MORSE_TASK_zlascal(
&options,
MorseLower, tempnm, tempnn, A->mb,
alpha, A(n, n), ldan);
for (m = n+1; m < A->mt; m++) {
tempmm = m == A->mt-1 ? A->m-A->mb*m : A->nb;
ldam = BLKLDD(A, m);
MORSE_TASK_zlascal(
&options,
MorseUpperLower, tempmm, tempnn, A->mb,
alpha, A(m, n), ldam);
}
}
break;
case MorseUpper:
for (m = 0; m < minmnt; m++) {
tempmm = m == A->mt-1 ? A->m-A->mb*m : A->nb;
tempmn = m == A->nt-1 ? A->n-m*A->nb : A->nb;
ldam = BLKLDD(A, m);
MORSE_TASK_zlascal(
&options,
MorseUpper, tempmm, tempmn, A->mb,
alpha, A(m, m), ldam);
for (n = m+1; n < A->nt; n++) {
tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
MORSE_TASK_zlascal(
&options,
MorseUpperLower, tempmm, tempnn, A->mb,
alpha, A(m, n), ldam);
}
}
break;
case MorseUpperLower:
default:
for (m = 0; m < A->mt; m++) {
tempmm = m == A->mt-1 ? A->m-A->mb*m : A->nb;
ldam = BLKLDD(A, m);
for (n = 0; n < A->nt; n++) {
tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
MORSE_TASK_zlascal(
&options,
MorseUpperLower, tempmm, tempnn, A->mb,
alpha, A(m, n), ldam);
}
}
}
RUNTIME_options_ws_free(&options);
RUNTIME_options_finalize(&options, morse);
MORSE_TASK_dataflush_all();
}