pzplgsy.c 3 KB
Newer Older
1 2
/**
 *
3 4
 * @copyright (c) 2009-2014 The University of Tennessee and The University
 *                          of Tennessee Research Foundation.
5
 *                          All rights reserved.
6
 * @copyright (c) 2012-2016 Inria. All rights reserved.
7
 * @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
8 9 10 11 12 13 14 15 16 17 18 19
 *
 **/

/**
 *
 * @file pzplgsy.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.5.0
20 21
 * @comment This file is a copy of pzplgsy.c,
            wich has been automatically generated
22 23 24 25
 *          from Plasma 2.5.0 for MORSE 1.0.0
 * @author Mathieu Faverge
 * @author Emmanuel Agullo
 * @author Cedric Castagnede
26 27 28
 * @author Rade Mathis
 * @author Florent Pruvost
 * @date 2016-08-01
29 30 31
 * @precisions normal z -> c d s
 *
 **/
32
#include "control/common.h"
33 34 35

#define A(m,n) A,  m,  n
/***************************************************************************//**
36
 *  morse_pzplgsy - Generate a random symmetric (positive definite if 'bump' is large enough) half-matrix by tiles.
37
 **/
38 39
void morse_pzplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, MORSE_desc_t *A,
                    unsigned long long int seed,
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
                    MORSE_sequence_t *sequence, MORSE_request_t *request )
{
    MORSE_context_t *morse;
    MORSE_option_t options;

    int m, n;
    int ldam;
    int tempmm, tempnn;

    morse = morse_context_self();
    if (sequence->status != MORSE_SUCCESS)
        return;
    RUNTIME_options_init(&options, morse, sequence, request);

    for (m = 0; m < A->mt; m++) {
        tempmm = m == A->mt-1 ? A->m-m*A->mb : A->mb;
        ldam = BLKLDD(A, m);
Mathieu Faverge's avatar
Mathieu Faverge committed
57

58 59 60 61 62 63
        /*
         * MorseLower
         */
        if (uplo == MorseLower) {
            for (n = 0; n <= m; n++) {
                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
Mathieu Faverge's avatar
Mathieu Faverge committed
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
                options.priority = m + n;
                MORSE_TASK_zplgsy(
                    &options,
                    bump, tempmm, tempnn, A(m, n), ldam,
                    A->m, m*A->mb, n*A->nb, seed );
            }
        }
        /*
         * MorseUpper
         */
        else if (uplo == MorseUpper) {
            for (n = m; n < A->nt; n++) {
                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;

                options.priority = m + n;
                MORSE_TASK_zplgsy(
                    &options,
                    bump, tempmm, tempnn, A(m, n), ldam,
                    A->m, m*A->mb, n*A->nb, seed );
            }
        }
        /*
         * MorseUpperLower
         */
        else {
Mathieu Faverge's avatar
Mathieu Faverge committed
90 91
            for (n = 0; n < A->nt; n++) {
                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
92

Mathieu Faverge's avatar
Mathieu Faverge committed
93 94 95 96 97
                MORSE_TASK_zplgsy(
                    &options,
                    bump, tempmm, tempnn, A(m, n), ldam,
                    A->m, m*A->mb, n*A->nb, seed );
            }
98 99
        }
    }
Mathieu Faverge's avatar
Mathieu Faverge committed
100
    MORSE_TASK_flush_desc( &options, uplo, A );
101 102
    RUNTIME_options_finalize(&options, morse);
}