[next] [tail] [up]

#### 5.1 psb_halo — Halo Data Communication

These subroutines gathers the values of the halo elements:

where:

x
  is a global dense submatrix.

α, x | Subroutine
Integer | psb_halo
Short Precision Real | psb_halo
Long Precision Real | psb_halo
Short Precision Complex | psb_halo
Long Precision Complex | psb_halo

Table 17: Data types

call psb_halo(x, desc_a, info)
call psb_halo(x, desc_a, info, work, data)

Type:
  Synchronous.
On Entry
x
  global dense matrix x.
  Scope: local
  Type: required
  Intent: inout.
  Specified as: a rank one or two array or an object of type psb_T_vect_type containing numbers of type specified in Table 17.
desc_a
  contains data structures for communications.
  Scope: local
  Type: required
  Intent: in.
  Specified as: a structured data of type psb_desc_type.
work
  the work array.
  Scope: local
  Type: optional
  Intent: inout.
  Specified as: a rank one array of the same type of x.
data
  index list selector.
  Scope: global
  Type: optional
  Specified as: an integer. Values:psb_comm_halo_,psb_comm_mov_, psb_comm_ext_, default: psb_comm_halo_. Chooses the index list on which to base the data exchange.
On Return
x
  global dense result matrix x.
  Scope: local
  Type: required
  Intent: inout.
  Returned as: a rank one or two array containing numbers of type specified in Table 17.
info
  the local portion of result submatrix y.
  Scope: local
  Type: required
  Intent: out.
  An integer value that contains an error code.

Figure 3: Sample discretization mesh.

Usage Example Consider the discretization mesh depicted in fig. 3, partitioned among two processes as shown by the dashed line; the data distribution is such that each process will own 32 entries in the index space, with a halo made of 8 entries placed at local indices 33 through 40. If process 0 assigns an initial value of 1 to its entries in the x vector, and process 1 assigns a value of 2, then after a call to psb_halo the contents of the local vectors will be the following:

Process 0 | Process 1
I | GLOB(I) | X(I) | I | GLOB(I) | X(I)
1 | 1 | 1.0 | 1 | 33 | 2.0
2 | 2 | 1.0 | 2 | 34 | 2.0
3 | 3 | 1.0 | 3 | 35 | 2.0
4 | 4 | 1.0 | 4 | 36 | 2.0
5 | 5 | 1.0 | 5 | 37 | 2.0
6 | 6 | 1.0 | 6 | 38 | 2.0
7 | 7 | 1.0 | 7 | 39 | 2.0
8 | 8 | 1.0 | 8 | 40 | 2.0
9 | 9 | 1.0 | 9 | 41 | 2.0
10 | 10 | 1.0 | 10 | 42 | 2.0
11 | 11 | 1.0 | 11 | 43 | 2.0
12 | 12 | 1.0 | 12 | 44 | 2.0
13 | 13 | 1.0 | 13 | 45 | 2.0
14 | 14 | 1.0 | 14 | 46 | 2.0
15 | 15 | 1.0 | 15 | 47 | 2.0
16 | 16 | 1.0 | 16 | 48 | 2.0
17 | 17 | 1.0 | 17 | 49 | 2.0
18 | 18 | 1.0 | 18 | 50 | 2.0
19 | 19 | 1.0 | 19 | 51 | 2.0
20 | 20 | 1.0 | 20 | 52 | 2.0
21 | 21 | 1.0 | 21 | 53 | 2.0
22 | 22 | 1.0 | 22 | 54 | 2.0
23 | 23 | 1.0 | 23 | 55 | 2.0
24 | 24 | 1.0 | 24 | 56 | 2.0
25 | 25 | 1.0 | 25 | 57 | 2.0
26 | 26 | 1.0 | 26 | 58 | 2.0
27 | 27 | 1.0 | 27 | 59 | 2.0
28 | 28 | 1.0 | 28 | 60 | 2.0
29 | 29 | 1.0 | 29 | 61 | 2.0
30 | 30 | 1.0 | 30 | 62 | 2.0
31 | 31 | 1.0 | 31 | 63 | 2.0
32 | 32 | 1.0 | 32 | 64 | 2.0
33 | 33 | 2.0 | 33 | 25 | 1.0
34 | 34 | 2.0 | 34 | 26 | 1.0
35 | 35 | 2.0 | 35 | 27 | 1.0
36 | 36 | 2.0 | 36 | 28 | 1.0
37 | 37 | 2.0 | 37 | 29 | 1.0
38 | 38 | 2.0 | 38 | 30 | 1.0
39 | 39 | 2.0 | 39 | 31 | 1.0
40 | 40 | 2.0 | 40 | 32 | 1.0

[next] [front] [up]