xref: /phasta/phSolver/compressible/localt.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine localt (global, rlocal, ien, 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. This
6*59599516SKenneth E. Jansenc is the transpose of local.f, i.e., recieves a global and returns
7*59599516SKenneth E. Jansenc a transposed local, or the oposite.
8*59599516SKenneth E. Jansenc
9*59599516SKenneth E. Jansenc input:
10*59599516SKenneth E. Jansenc  global (nshg,n)             : global array
11*59599516SKenneth E. Jansenc  rlocal (npro,n,nenl)         : local array
12*59599516SKenneth E. Jansenc  ien    (npro,nshape)      : nodal connectivity
13*59599516SKenneth E. Jansenc  n                            : number of d.o.f.'s to be copied
14*59599516SKenneth E. Jansenc  code                         : the transfer code
15*59599516SKenneth E. Jansenc                                  .eq. 'gather  ', from global to local
16*59599516SKenneth E. Jansenc                                  .eq. 'scatter ', add  local to global
17*59599516SKenneth E. Jansenc                                  .eq. 'globaliz', from local to global
18*59599516SKenneth E. Jansenc
19*59599516SKenneth E. Jansenc
20*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1992.
21*59599516SKenneth E. Jansenc----------------------------------------------------------------------
22*59599516SKenneth E. Jansenc
23*59599516SKenneth E. Jansen        include "common.h"
24*59599516SKenneth E. Jansen
25*59599516SKenneth E. Jansen        dimension global(nshg,n),           rlocal(npro,n,nshape),
26*59599516SKenneth E. Jansen     &            ien(npro,nshape)
27*59599516SKenneth E. Jansenc
28*59599516SKenneth E. Jansen        character*8 code
29*59599516SKenneth E. Jansenc
30*59599516SKenneth E. Jansenc.... ------------------------>  'localization  '  <--------------------
31*59599516SKenneth E. Jansenc
32*59599516SKenneth E. Jansen        if (code .eq. 'gather  ') then
33*59599516SKenneth E. Jansenc
34*59599516SKenneth E. Jansenc.... set timer
35*59599516SKenneth E. Jansenc
36*59599516SKenneth E. Jansen          call timer ('Gather  ')
37*59599516SKenneth E. Jansenc
38*59599516SKenneth E. Jansenc.... gather the data
39*59599516SKenneth E. Jansenc
40*59599516SKenneth E. Jansen          ttim(3) = ttim(3) - secs(0.0)
41*59599516SKenneth E. Jansen
42*59599516SKenneth E. Jansen          do j = 1, nshape
43*59599516SKenneth E. Jansen            do i = 1, n
44*59599516SKenneth E. Jansen              rlocal(:,i,j) = global(ien(:,j),i)
45*59599516SKenneth E. Jansen            enddo
46*59599516SKenneth E. Jansen          enddo
47*59599516SKenneth E. Jansen
48*59599516SKenneth E. Jansen	  ttim(3) = ttim(3) + secs(0.0)
49*59599516SKenneth E. Jansen
50*59599516SKenneth E. Jansenc
51*59599516SKenneth E. Jansenc.... transfer count
52*59599516SKenneth E. Jansenc
53*59599516SKenneth E. Jansenc          gbytes = gbytes + n*nenl*npro
54*59599516SKenneth E. Jansenc
55*59599516SKenneth E. Jansenc.... return
56*59599516SKenneth E. Jansenc
57*59599516SKenneth E. Jansen          call timer ('Back    ')
58*59599516SKenneth E. Jansen          return
59*59599516SKenneth E. Jansen        endif
60*59599516SKenneth E. Jansenc
61*59599516SKenneth E. Jansenc.... ------------------------->  'assembling '  <----------------------
62*59599516SKenneth E. Jansenc
63*59599516SKenneth E. Jansen        if (code .eq. 'scatter ') then
64*59599516SKenneth E. Jansenc
65*59599516SKenneth E. Jansenc.... set timer
66*59599516SKenneth E. Jansenc
67*59599516SKenneth E. Jansen          call timer ('Scatter ')
68*59599516SKenneth E. Jansenc
69*59599516SKenneth E. Jansenc.... scatter the data (possible collisions)
70*59599516SKenneth E. Jansenc
71*59599516SKenneth E. Jansen          ttim(4) = ttim(4) - secs(0.0)
72*59599516SKenneth E. Jansen
73*59599516SKenneth E. Jansen          do j = 1, nshape
74*59599516SKenneth E. Jansen            do i = 1, n
75*59599516SKenneth E. Jansen              do nel = 1,npro
76*59599516SKenneth E. Jansen                global(ien(nel,j),i) = global(ien(nel,j),i)
77*59599516SKenneth E. Jansen     &                               + rlocal(nel,i,j)
78*59599516SKenneth E. Jansen              enddo
79*59599516SKenneth E. Jansen            enddo
80*59599516SKenneth E. Jansen          enddo
81*59599516SKenneth E. Jansen
82*59599516SKenneth E. Jansen	  ttim(4) = ttim(4) + secs(0.0)
83*59599516SKenneth E. Jansen
84*59599516SKenneth E. Jansenc
85*59599516SKenneth E. Jansenc.... transfer and flop counts
86*59599516SKenneth E. Jansenc
87*59599516SKenneth E. Jansenc          sbytes = sbytes + n*nenl*npro
88*59599516SKenneth E. Jansenc          flops  = flops  + n*nenl*npro
89*59599516SKenneth E. Jansenc
90*59599516SKenneth E. Jansenc.... return
91*59599516SKenneth E. Jansenc
92*59599516SKenneth E. Jansen          call timer ('Back    ')
93*59599516SKenneth E. Jansen          return
94*59599516SKenneth E. Jansen        endif
95*59599516SKenneth E. Jansenc
96*59599516SKenneth E. Jansenc.... ------------------------->  'globalizing '  <----------------------
97*59599516SKenneth E. Jansenc
98*59599516SKenneth E. Jansen        if (code .eq. 'globaliz') then
99*59599516SKenneth E. Jansenc
100*59599516SKenneth E. Jansenc.... scatter the data (possible collisions)
101*59599516SKenneth E. Jansenc
102*59599516SKenneth E. Jansen          do j = 1, nshape
103*59599516SKenneth E. Jansen            do i = 1, n
104*59599516SKenneth E. Jansen              do nel = 1,npro
105*59599516SKenneth E. Jansen                global(ien(nel,j),i) = rlocal(nel,i,j)
106*59599516SKenneth E. Jansen              enddo
107*59599516SKenneth E. Jansen            enddo
108*59599516SKenneth E. Jansen          enddo
109*59599516SKenneth E. Jansenc
110*59599516SKenneth E. Jansenc.... return
111*59599516SKenneth E. Jansenc
112*59599516SKenneth E. Jansen          call timer ('Back    ')
113*59599516SKenneth E. Jansen          return
114*59599516SKenneth E. Jansen        endif
115*59599516SKenneth E. Jansenc
116*59599516SKenneth E. Jansenc.... --------------------------->  error  <---------------------------
117*59599516SKenneth E. Jansenc
118*59599516SKenneth E. Jansen        call error ('local   ', code, 0)
119*59599516SKenneth E. Jansenc
120*59599516SKenneth E. Jansenc.... end
121*59599516SKenneth E. Jansenc
122*59599516SKenneth E. Jansen        end
123*59599516SKenneth E. Jansenc
124*59599516SKenneth E. Jansenc
125*59599516SKenneth E. Jansenc
126*59599516SKenneth E. Jansen        subroutine localtSclr (global, rlocal, ien, code)
127*59599516SKenneth E. Jansenc
128*59599516SKenneth E. Jansenc----------------------------------------------------------------------
129*59599516SKenneth E. Jansenc
130*59599516SKenneth E. Jansenc This subroutine performs a vector gather/scatter operation. This
131*59599516SKenneth E. Jansenc is the transpose of local.f, i.e., recieves a global and returns
132*59599516SKenneth E. Jansenc a transposed local, or the oposite.
133*59599516SKenneth E. Jansenc
134*59599516SKenneth E. Jansenc input:
135*59599516SKenneth E. Jansenc  global (nshg)              : global array
136*59599516SKenneth E. Jansenc  rlocal (npro,nshape)         : local array
137*59599516SKenneth E. Jansenc  ien    (npro,nshape)         : nodal connectivity
138*59599516SKenneth E. Jansenc  n                            : number of d.o.f.'s to be copied
139*59599516SKenneth E. Jansenc  code                         : the transfer code
140*59599516SKenneth E. Jansenc                                  .eq. 'gather  ', from global to local
141*59599516SKenneth E. Jansenc                                  .eq. 'scatter ', add  local to global
142*59599516SKenneth E. Jansenc                                  .eq. 'globaliz', from local to global
143*59599516SKenneth E. Jansenc
144*59599516SKenneth E. Jansenc
145*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1992.
146*59599516SKenneth E. Jansenc----------------------------------------------------------------------
147*59599516SKenneth E. Jansenc
148*59599516SKenneth E. Jansen        include "common.h"
149*59599516SKenneth E. Jansen
150*59599516SKenneth E. Jansen        dimension global(nshg),           rlocal(npro,nshape),
151*59599516SKenneth E. Jansen     &            ien(npro,nshape)
152*59599516SKenneth E. Jansenc
153*59599516SKenneth E. Jansen        character*8 code
154*59599516SKenneth E. Jansenc
155*59599516SKenneth E. Jansenc.... ------------------------>  'localization  '  <--------------------
156*59599516SKenneth E. Jansenc
157*59599516SKenneth E. Jansen        if (code .eq. 'gather  ') then
158*59599516SKenneth E. Jansenc
159*59599516SKenneth E. Jansenc.... set timer
160*59599516SKenneth E. Jansenc
161*59599516SKenneth E. Jansen          call timer ('Gather  ')
162*59599516SKenneth E. Jansenc
163*59599516SKenneth E. Jansenc.... gather the data
164*59599516SKenneth E. Jansenc
165*59599516SKenneth E. Jansen          ttim(3) = ttim(3) - tmr()
166*59599516SKenneth E. Jansen
167*59599516SKenneth E. Jansen          do j = 1, nshape
168*59599516SKenneth E. Jansen              rlocal(:,j) = global(ien(:,j))
169*59599516SKenneth E. Jansen          enddo
170*59599516SKenneth E. Jansen
171*59599516SKenneth E. Jansen	  ttim(3) = ttim(3) + tmr()
172*59599516SKenneth E. Jansen
173*59599516SKenneth E. Jansenc
174*59599516SKenneth E. Jansenc.... transfer count
175*59599516SKenneth E. Jansenc
176*59599516SKenneth E. Jansenc          gbytes = gbytes + n*nshape*npro
177*59599516SKenneth E. Jansenc
178*59599516SKenneth E. Jansenc.... return
179*59599516SKenneth E. Jansenc
180*59599516SKenneth E. Jansen          call timer ('Back    ')
181*59599516SKenneth E. Jansen          return
182*59599516SKenneth E. Jansen        endif
183*59599516SKenneth E. Jansenc
184*59599516SKenneth E. Jansenc.... ------------------------->  'assembling '  <----------------------
185*59599516SKenneth E. Jansenc
186*59599516SKenneth E. Jansen        if (code .eq. 'scatter ') then
187*59599516SKenneth E. Jansenc
188*59599516SKenneth E. Jansenc.... set timer
189*59599516SKenneth E. Jansenc
190*59599516SKenneth E. Jansen          call timer ('Scatter ')
191*59599516SKenneth E. Jansenc
192*59599516SKenneth E. Jansenc.... scatter the data (possible collisions)
193*59599516SKenneth E. Jansenc
194*59599516SKenneth E. Jansen          ttim(4) = ttim(4) - tmr()
195*59599516SKenneth E. Jansen
196*59599516SKenneth E. Jansen          do j = 1, nshape
197*59599516SKenneth E. Jansen             do nel = 1,npro
198*59599516SKenneth E. Jansen                global(ien(nel,j)) = global(ien(nel,j))
199*59599516SKenneth E. Jansen     &               + rlocal(nel,j)
200*59599516SKenneth E. Jansen             enddo
201*59599516SKenneth E. Jansen          enddo
202*59599516SKenneth E. Jansen
203*59599516SKenneth E. Jansen	  ttim(4) = ttim(4) + tmr()
204*59599516SKenneth E. Jansen
205*59599516SKenneth E. Jansenc
206*59599516SKenneth E. Jansenc.... transfer and flop counts
207*59599516SKenneth E. Jansenc
208*59599516SKenneth E. Jansenc          sbytes = sbytes + n*nshape*npro
209*59599516SKenneth E. Jansenc          flops  = flops  + n*nshape*npro
210*59599516SKenneth E. Jansenc
211*59599516SKenneth E. Jansenc.... return
212*59599516SKenneth E. Jansenc
213*59599516SKenneth E. Jansen          call timer ('Back    ')
214*59599516SKenneth E. Jansen          return
215*59599516SKenneth E. Jansen        endif
216*59599516SKenneth E. Jansenc
217*59599516SKenneth E. Jansenc.... ------------------------->  'globalizing '  <----------------------
218*59599516SKenneth E. Jansenc
219*59599516SKenneth E. Jansen        if (code .eq. 'globaliz') then
220*59599516SKenneth E. Jansenc
221*59599516SKenneth E. Jansenc.... scatter the data (possible collisions)
222*59599516SKenneth E. Jansenc
223*59599516SKenneth E. Jansen          do j = 1, nshape
224*59599516SKenneth E. Jansen              do nel = 1,npro
225*59599516SKenneth E. Jansen                global(ien(nel,j)) = rlocal(nel,j)
226*59599516SKenneth E. Jansen              enddo
227*59599516SKenneth E. Jansen          enddo
228*59599516SKenneth E. Jansenc
229*59599516SKenneth E. Jansenc.... return
230*59599516SKenneth E. Jansenc
231*59599516SKenneth E. Jansen          call timer ('Back    ')
232*59599516SKenneth E. Jansen          return
233*59599516SKenneth E. Jansen        endif
234*59599516SKenneth E. Jansenc
235*59599516SKenneth E. Jansenc.... --------------------------->  error  <---------------------------
236*59599516SKenneth E. Jansenc
237*59599516SKenneth E. Jansen        call error ('local   ', code, 0)
238*59599516SKenneth E. Jansenc
239*59599516SKenneth E. Jansenc.... end
240*59599516SKenneth E. Jansenc
241*59599516SKenneth E. Jansen        end
242*59599516SKenneth E. Jansenc
243*59599516SKenneth E. Jansen
244*59599516SKenneth E. Jansen
245*59599516SKenneth E. Jansen
246