pzplgsy.c 2.88 KB
Newer Older
1
/**
2 3
 *
 * @file pzplgsy.c
4
 *
Mathieu Faverge's avatar
Mathieu Faverge committed
5 6
 * @copyright 2009-2014 The University of Tennessee and The University of
 *                      Tennessee Research Foundation. All rights reserved.
7 8
 * @copyright 2012-2016 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
 *                      Univ. Bordeaux. All rights reserved.
9
 *
Mathieu Faverge's avatar
Mathieu Faverge committed
10
 ***
11 12 13 14 15 16 17
 *
 *
 *  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
18 19
 * @comment This file is a copy of pzplgsy.c,
            wich has been automatically generated
20 21 22 23
 *          from Plasma 2.5.0 for MORSE 1.0.0
 * @author Mathieu Faverge
 * @author Emmanuel Agullo
 * @author Cedric Castagnede
24 25 26
 * @author Rade Mathis
 * @author Florent Pruvost
 * @date 2016-08-01
27 28 29
 * @precisions normal z -> c d s
 *
 **/
30
#include "control/common.h"
31 32

#define A(m,n) A,  m,  n
Mathieu Faverge's avatar
Mathieu Faverge committed
33
/*******************************************************************************
34
 *  morse_pzplgsy - Generate a random symmetric (positive definite if 'bump' is large enough) half-matrix by tiles.
35
 **/
36 37
void morse_pzplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, MORSE_desc_t *A,
                    unsigned long long int seed,
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
                    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
55

56 57 58 59 60 61
        /*
         * 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
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
                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
88 89
            for (n = 0; n < A->nt; n++) {
                tempnn = n == A->nt-1 ? A->n-n*A->nb : A->nb;
90

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