xref: /phasta/phSolver/common/localy.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine localy (global, rlocal, ientmp, n, code)
2*59599516SKenneth E. Jansenc
3*59599516SKenneth E. Jansenc----------------------------------------------------------------------
4*59599516SKenneth E. Jansenc
5*59599516SKenneth E. Jansenc This subroutine performs a vector gather/scatter operation.
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc input:
8*59599516SKenneth E. Jansenc  global (nshg,n)              : global array
9*59599516SKenneth E. Jansenc  rlocal (npro,nshl,n)         : local array
10*59599516SKenneth E. Jansenc  ien    (npro,nshl)           : nodal connectivity
11*59599516SKenneth E. Jansenc  n                            : number of d.o.f.'s to be copied
12*59599516SKenneth E. Jansenc  code                         : the transfer code
13*59599516SKenneth E. Jansenc                                  .eq. 'gather  ', from global to local
14*59599516SKenneth E. Jansenc                                  .eq. 'scatter ', add  local to global
15*59599516SKenneth E. Jansenc                                  .eq. 'globaliz', from local to global
16*59599516SKenneth E. Jansenc
17*59599516SKenneth E. Jansenc
18*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1992.
19*59599516SKenneth E. Jansenc----------------------------------------------------------------------
20*59599516SKenneth E. Jansenc
21*59599516SKenneth E. Jansen        include "common.h"
22*59599516SKenneth E. Jansen
23*59599516SKenneth E. Jansen        dimension global(nshg,n),           rlocal(npro,nshl,n),
24*59599516SKenneth E. Jansen     &            ien(npro,nshl),           ientmp(npro,nshl)
25*59599516SKenneth E. Jansenc
26*59599516SKenneth E. Jansen        character*8 code
27*59599516SKenneth E. Jansen
28*59599516SKenneth E. Jansenc
29*59599516SKenneth E. Jansenc.... cubic basis has negatives in ien
30*59599516SKenneth E. Jansenc
31*59599516SKenneth E. Jansen        if (ipord > 2) then
32*59599516SKenneth E. Jansen           ien = abs(ientmp)
33*59599516SKenneth E. Jansen        else
34*59599516SKenneth E. Jansen           ien = ientmp
35*59599516SKenneth E. Jansen        endif
36*59599516SKenneth E. Jansenc
37*59599516SKenneth E. Jansenc.... ------------------------>  'localization  '  <--------------------
38*59599516SKenneth E. Jansenc
39*59599516SKenneth E. Jansen        if (code .eq. 'gather  ') then
40*59599516SKenneth E. Jansenc
41*59599516SKenneth E. Jansenc.... set timer
42*59599516SKenneth E. Jansenc
43*59599516SKenneth E. Jansenc          call timer ('Gather  ')
44*59599516SKenneth E. Jansenc
45*59599516SKenneth E. Jansenc.... gather the data to the current block
46*59599516SKenneth E. Jansenc
47*59599516SKenneth E. Jansen
48*59599516SKenneth E. JansenCAD      rlocal = yl={P, u, v, w, T, scalar1, ...}
49*59599516SKenneth E. JansenCAD	 global = y = {u, v, w, P, T, scalar1, ...}
50*59599516SKenneth E. Jansen
51*59599516SKenneth E. JansenCAD      Put u,v,w in the slots 2,3,4 of yl
52*59599516SKenneth E. Jansen
53*59599516SKenneth E. Jansen          do j = 1, 3
54*59599516SKenneth E. Jansen            do i = 1, nshl
55*59599516SKenneth E. Jansen              rlocal(:,i,j+1) = global(ien(:,i),j)
56*59599516SKenneth E. Jansen            enddo
57*59599516SKenneth E. Jansen          enddo
58*59599516SKenneth E. Jansen
59*59599516SKenneth E. JansenCAD      Put Pressure in the first slot of yl
60*59599516SKenneth E. Jansen
61*59599516SKenneth E. Jansen          do i = 1, nshl
62*59599516SKenneth E. Jansen             rlocal(:,i,1) = global(ien(:,i),4)
63*59599516SKenneth E. Jansen          enddo
64*59599516SKenneth E. Jansen
65*59599516SKenneth E. JansenCAD      Fill in the remaining slots with T, and additional scalars
66*59599516SKenneth E. Jansen
67*59599516SKenneth E. Jansen          if(n.gt.4) then
68*59599516SKenneth E. Jansen             do j = 5, n
69*59599516SKenneth E. Jansen                do i = 1, nshl
70*59599516SKenneth E. Jansen                   rlocal(:,i,j) = global(ien(:,i),j)
71*59599516SKenneth E. Jansen                enddo
72*59599516SKenneth E. Jansen             enddo
73*59599516SKenneth E. Jansen          endif
74*59599516SKenneth E. Jansenc
75*59599516SKenneth E. Jansenc.... transfer count
76*59599516SKenneth E. Jansenc
77*59599516SKenneth E. Jansen          gbytes = gbytes + n*nshl*npro
78*59599516SKenneth E. Jansenc
79*59599516SKenneth E. Jansenc.... return
80*59599516SKenneth E. Jansenc
81*59599516SKenneth E. Jansenc          call timer ('Back    ')
82*59599516SKenneth E. Jansen          return
83*59599516SKenneth E. Jansen        endif
84*59599516SKenneth E. Jansenc
85*59599516SKenneth E. Jansenc.... ------------------------->  'assembling '  <----------------------
86*59599516SKenneth E. Jansenc
87*59599516SKenneth E. Jansen        if (code .eq. 'scatter ') then
88*59599516SKenneth E. Jansen           write(*,*) 'do not use localy here'
89*59599516SKenneth E. Jansen        endif
90*59599516SKenneth E. Jansenc
91*59599516SKenneth E. Jansenc.... ------------------------->  'globalizing '  <----------------------
92*59599516SKenneth E. Jansenc
93*59599516SKenneth E. Jansen        if (code .eq. 'globaliz') then
94*59599516SKenneth E. Jansen           write(*,*) 'do not use localy here'
95*59599516SKenneth E. Jansen        endif
96*59599516SKenneth E. Jansenc
97*59599516SKenneth E. Jansenc.... --------------------------->  error  <---------------------------
98*59599516SKenneth E. Jansenc
99*59599516SKenneth E. Jansen        call error ('local   ', code, 0)
100*59599516SKenneth E. Jansenc
101*59599516SKenneth E. Jansenc.... end
102*59599516SKenneth E. Jansenc
103*59599516SKenneth E. Jansen        end
104