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