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

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

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

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

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