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

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

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

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