File: desc_convert.f

package info (click to toggle)
scalapack 2.2.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 37,012 kB
  • sloc: fortran: 339,113; ansic: 74,517; makefile: 1,494; sh: 34
file content (124 lines) | stat: -rw-r--r-- 3,083 bytes parent folder | download | duplicates (4)
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
      SUBROUTINE DESC_CONVERT( DESC_IN, DESC_OUT, INFO )
*
*
*     .. Array Arguments ..
      INTEGER DESC_IN( * ), DESC_OUT( * ), INFO
*     ..
*
*  Purpose
*  =======
*
*  Converts descriptors from one type to another if they are compatible.
*
*  Supports *ONLY* an output descriptor type of 1D_horizontal (type
*     number 501) or 1D_vertical (number 502).
*  Supports only one-dimensional 1xP input grids if descriptor_in is 2D.
*
*  Arguments
*  =========
*
*  DESC_IN: (input) input descriptor
*
*  DESC_OUT: (output) output descriptor (required to be 1D_horizontal
*            in this release).
*
*  INFO: (output) return code
*
*  =====================================================================
*
*     .. Parameters ..
      INTEGER            BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DT_,
     $                   LLD_, MB_, M_, NB_, N_, RSRC_
      PARAMETER          ( BLOCK_CYCLIC_2D = 1, DLEN_ = 9, DT_ = 1,
     $                     CTXT_ = 2, M_ = 3, N_ = 4, MB_ = 5, NB_ = 6,
     $                     RSRC_ = 7, CSRC_ = 8, LLD_ = 9 )
*     ..
*
*     .. Local Scalars ..
      INTEGER         DESC_TYPE, DESC_TYPE_IN, ICTXT
      INTEGER         CSRC, RSRC, MB, NB, LLDA
      INTEGER         M, N, NPROW, NPCOL, IDUM1, IDUM2
*
*     .. External routines ..
*     EXTERNAL        BLACS_GRIDINFO
*     ..
*     .. Executable Statements ..
*
      INFO = 0
*
      DESC_TYPE_IN = DESC_IN( 1 )
*
*     .. Initialize Variables ..
*
	RSRC = 0
	NB = 0
	N = 0
	MB = 0
	M = 0
	LLDA = 0
	CSRC = 0
*	
      IF( DESC_TYPE_IN .EQ. BLOCK_CYCLIC_2D ) THEN
         ICTXT = DESC_IN( CTXT_ )
         RSRC = DESC_IN( RSRC_ )
         CSRC = DESC_IN( CSRC_ )
         MB = DESC_IN( MB_ )
         NB = DESC_IN( NB_ )
         LLDA = DESC_IN( LLD_ )
         M = DESC_IN( M_ )
         N = DESC_IN( N_ )
         CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, IDUM1, IDUM2 )
      ELSEIF ( DESC_TYPE_IN .EQ. 502 ) THEN
         ICTXT = DESC_IN( 2 )
         RSRC = DESC_IN( 5 )
         CSRC = 1
         MB = DESC_IN( 4 )
         NB = 1
         LLDA = DESC_IN( 6 )
         M = DESC_IN( 3 )
         N = 1
         NPROW = 0
         NPCOL = 1
      ELSEIF ( DESC_TYPE_IN .EQ. 501 ) THEN
         ICTXT = DESC_IN( 2 )
         RSRC = 1
         CSRC = DESC_IN( 5 )
         MB = 1
         NB = DESC_IN( 4 )
         LLDA = DESC_IN( 6 )
         M = 1
         N = DESC_IN( 3 )
         NPROW = 1
         NPCOL = 0
      ENDIF
*
*
      DESC_TYPE = DESC_OUT( 1 )
*
      IF( DESC_TYPE .EQ. 501 ) THEN
         IF( NPROW .NE. 1 )THEN
            INFO = -1
            RETURN
         ENDIF
         DESC_OUT( 2 ) = ICTXT
         DESC_OUT( 5 ) = CSRC
         DESC_OUT( 4 ) = NB
         DESC_OUT( 6 ) = LLDA
         DESC_OUT( 3 ) = N
      ELSEIF( DESC_TYPE .EQ. 502 ) THEN
         IF( NPCOL .NE. 1 )THEN
            INFO = -1
            RETURN
         ENDIF
         DESC_OUT( 2 ) = ICTXT
         DESC_OUT( 5 ) = RSRC
         DESC_OUT( 4 ) = MB
         DESC_OUT( 6 ) = LLDA
         DESC_OUT( 3 ) = M
      ENDIF
*
      RETURN
*
*     End of DESC_CONVERT
*
      END