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