159599516SKenneth E. Jansen subroutine localt (global, rlocal, ien, n, code) 259599516SKenneth E. Jansenc 359599516SKenneth E. Jansenc---------------------------------------------------------------------- 459599516SKenneth E. Jansenc 559599516SKenneth E. Jansenc This subroutine performs a vector gather/scatter operation. This 659599516SKenneth E. Jansenc is the transpose of local.f, i.e., recieves a global and returns 759599516SKenneth E. Jansenc a transposed local, or the oposite. 859599516SKenneth E. Jansenc 959599516SKenneth E. Jansenc input: 1059599516SKenneth E. Jansenc global (nshg,n) : global array 1159599516SKenneth E. Jansenc rlocal (npro,n,nenl) : local array 12*513954efSKenneth E. Jansenc ien (npro,nshl) : nodal connectivity 1359599516SKenneth E. Jansenc n : number of d.o.f.'s to be copied 1459599516SKenneth E. Jansenc code : the transfer code 1559599516SKenneth E. Jansenc .eq. 'gather ', from global to local 1659599516SKenneth E. Jansenc .eq. 'scatter ', add local to global 1759599516SKenneth E. Jansenc .eq. 'globaliz', from local to global 1859599516SKenneth E. Jansenc 1959599516SKenneth E. Jansenc 2059599516SKenneth E. Jansenc Zdenek Johan, Winter 1992. 2159599516SKenneth E. Jansenc---------------------------------------------------------------------- 2259599516SKenneth E. Jansenc 2359599516SKenneth E. Jansen include "common.h" 2459599516SKenneth E. Jansen 25*513954efSKenneth E. Jansen dimension global(nshg,n), rlocal(npro,n,nshl), 26*513954efSKenneth E. Jansen & ien(npro,nshl) 2759599516SKenneth E. Jansenc 2859599516SKenneth E. Jansen character*8 code 2959599516SKenneth E. Jansenc 3059599516SKenneth E. Jansenc.... ------------------------> 'localization ' <-------------------- 3159599516SKenneth E. Jansenc 3259599516SKenneth E. Jansen if (code .eq. 'gather ') then 3359599516SKenneth E. Jansenc 3459599516SKenneth E. Jansenc.... set timer 3559599516SKenneth E. Jansenc 3659599516SKenneth E. Jansen call timer ('Gather ') 3759599516SKenneth E. Jansenc 3859599516SKenneth E. Jansenc.... gather the data 3959599516SKenneth E. Jansenc 4059599516SKenneth E. Jansen ttim(3) = ttim(3) - secs(0.0) 4159599516SKenneth E. Jansen 42*513954efSKenneth E. Jansen do j = 1, nshl 4359599516SKenneth E. Jansen do i = 1, n 4459599516SKenneth E. Jansen rlocal(:,i,j) = global(ien(:,j),i) 4559599516SKenneth E. Jansen enddo 4659599516SKenneth E. Jansen enddo 4759599516SKenneth E. Jansen 4859599516SKenneth E. Jansen ttim(3) = ttim(3) + secs(0.0) 4959599516SKenneth E. Jansen 5059599516SKenneth E. Jansenc 5159599516SKenneth E. Jansenc.... transfer count 5259599516SKenneth E. Jansenc 5359599516SKenneth E. Jansenc gbytes = gbytes + n*nenl*npro 5459599516SKenneth E. Jansenc 5559599516SKenneth E. Jansenc.... return 5659599516SKenneth E. Jansenc 5759599516SKenneth E. Jansen call timer ('Back ') 5859599516SKenneth E. Jansen return 5959599516SKenneth E. Jansen endif 6059599516SKenneth E. Jansenc 6159599516SKenneth E. Jansenc.... -------------------------> 'assembling ' <---------------------- 6259599516SKenneth E. Jansenc 6359599516SKenneth E. Jansen if (code .eq. 'scatter ') then 6459599516SKenneth E. Jansenc 6559599516SKenneth E. Jansenc.... set timer 6659599516SKenneth E. Jansenc 6759599516SKenneth E. Jansen call timer ('Scatter ') 6859599516SKenneth E. Jansenc 6959599516SKenneth E. Jansenc.... scatter the data (possible collisions) 7059599516SKenneth E. Jansenc 7159599516SKenneth E. Jansen ttim(4) = ttim(4) - secs(0.0) 7259599516SKenneth E. Jansen 73*513954efSKenneth E. Jansen do j = 1, nshl 7459599516SKenneth E. Jansen do i = 1, n 7559599516SKenneth E. Jansen do nel = 1,npro 7659599516SKenneth E. Jansen global(ien(nel,j),i) = global(ien(nel,j),i) 7759599516SKenneth E. Jansen & + rlocal(nel,i,j) 7859599516SKenneth E. Jansen enddo 7959599516SKenneth E. Jansen enddo 8059599516SKenneth E. Jansen enddo 8159599516SKenneth E. Jansen 8259599516SKenneth E. Jansen ttim(4) = ttim(4) + secs(0.0) 8359599516SKenneth E. Jansen 8459599516SKenneth E. Jansenc 8559599516SKenneth E. Jansenc.... transfer and flop counts 8659599516SKenneth E. Jansenc 8759599516SKenneth E. Jansenc sbytes = sbytes + n*nenl*npro 8859599516SKenneth E. Jansenc flops = flops + n*nenl*npro 8959599516SKenneth E. Jansenc 9059599516SKenneth E. Jansenc.... return 9159599516SKenneth E. Jansenc 9259599516SKenneth E. Jansen call timer ('Back ') 9359599516SKenneth E. Jansen return 9459599516SKenneth E. Jansen endif 9559599516SKenneth E. Jansenc 9659599516SKenneth E. Jansenc.... -------------------------> 'globalizing ' <---------------------- 9759599516SKenneth E. Jansenc 9859599516SKenneth E. Jansen if (code .eq. 'globaliz') then 9959599516SKenneth E. Jansenc 10059599516SKenneth E. Jansenc.... scatter the data (possible collisions) 10159599516SKenneth E. Jansenc 102*513954efSKenneth E. Jansen do j = 1, nshl 10359599516SKenneth E. Jansen do i = 1, n 10459599516SKenneth E. Jansen do nel = 1,npro 10559599516SKenneth E. Jansen global(ien(nel,j),i) = rlocal(nel,i,j) 10659599516SKenneth E. Jansen enddo 10759599516SKenneth E. Jansen enddo 10859599516SKenneth E. Jansen enddo 10959599516SKenneth E. Jansenc 11059599516SKenneth E. Jansenc.... return 11159599516SKenneth E. Jansenc 11259599516SKenneth E. Jansen call timer ('Back ') 11359599516SKenneth E. Jansen return 11459599516SKenneth E. Jansen endif 11559599516SKenneth E. Jansenc 11659599516SKenneth E. Jansenc.... ---------------------------> error <--------------------------- 11759599516SKenneth E. Jansenc 11859599516SKenneth E. Jansen call error ('local ', code, 0) 11959599516SKenneth E. Jansenc 12059599516SKenneth E. Jansenc.... end 12159599516SKenneth E. Jansenc 12259599516SKenneth E. Jansen end 12359599516SKenneth E. Jansenc 12459599516SKenneth E. Jansenc 12559599516SKenneth E. Jansenc 12659599516SKenneth E. Jansen subroutine localtSclr (global, rlocal, ien, code) 12759599516SKenneth E. Jansenc 12859599516SKenneth E. Jansenc---------------------------------------------------------------------- 12959599516SKenneth E. Jansenc 13059599516SKenneth E. Jansenc This subroutine performs a vector gather/scatter operation. This 13159599516SKenneth E. Jansenc is the transpose of local.f, i.e., recieves a global and returns 13259599516SKenneth E. Jansenc a transposed local, or the oposite. 13359599516SKenneth E. Jansenc 13459599516SKenneth E. Jansenc input: 13559599516SKenneth E. Jansenc global (nshg) : global array 136*513954efSKenneth E. Jansenc rlocal (npro,nshl) : local array 137*513954efSKenneth E. Jansenc ien (npro,nshl) : nodal connectivity 13859599516SKenneth E. Jansenc n : number of d.o.f.'s to be copied 13959599516SKenneth E. Jansenc code : the transfer code 14059599516SKenneth E. Jansenc .eq. 'gather ', from global to local 14159599516SKenneth E. Jansenc .eq. 'scatter ', add local to global 14259599516SKenneth E. Jansenc .eq. 'globaliz', from local to global 14359599516SKenneth E. Jansenc 14459599516SKenneth E. Jansenc 14559599516SKenneth E. Jansenc Zdenek Johan, Winter 1992. 14659599516SKenneth E. Jansenc---------------------------------------------------------------------- 14759599516SKenneth E. Jansenc 14859599516SKenneth E. Jansen include "common.h" 14959599516SKenneth E. Jansen 150*513954efSKenneth E. Jansen dimension global(nshg), rlocal(npro,nshl), 151*513954efSKenneth E. Jansen & ien(npro,nshl) 15259599516SKenneth E. Jansenc 15359599516SKenneth E. Jansen character*8 code 15459599516SKenneth E. Jansenc 15559599516SKenneth E. Jansenc.... ------------------------> 'localization ' <-------------------- 15659599516SKenneth E. Jansenc 15759599516SKenneth E. Jansen if (code .eq. 'gather ') then 15859599516SKenneth E. Jansenc 15959599516SKenneth E. Jansenc.... set timer 16059599516SKenneth E. Jansenc 16159599516SKenneth E. Jansen call timer ('Gather ') 16259599516SKenneth E. Jansenc 16359599516SKenneth E. Jansenc.... gather the data 16459599516SKenneth E. Jansenc 16559599516SKenneth E. Jansen ttim(3) = ttim(3) - tmr() 16659599516SKenneth E. Jansen 167*513954efSKenneth E. Jansen do j = 1, nshl 16859599516SKenneth E. Jansen rlocal(:,j) = global(ien(:,j)) 16959599516SKenneth E. Jansen enddo 17059599516SKenneth E. Jansen 17159599516SKenneth E. Jansen ttim(3) = ttim(3) + tmr() 17259599516SKenneth E. Jansen 17359599516SKenneth E. Jansenc 17459599516SKenneth E. Jansenc.... transfer count 17559599516SKenneth E. Jansenc 176*513954efSKenneth E. Jansenc gbytes = gbytes + n*nshl*npro 17759599516SKenneth E. Jansenc 17859599516SKenneth E. Jansenc.... return 17959599516SKenneth E. Jansenc 18059599516SKenneth E. Jansen call timer ('Back ') 18159599516SKenneth E. Jansen return 18259599516SKenneth E. Jansen endif 18359599516SKenneth E. Jansenc 18459599516SKenneth E. Jansenc.... -------------------------> 'assembling ' <---------------------- 18559599516SKenneth E. Jansenc 18659599516SKenneth E. Jansen if (code .eq. 'scatter ') then 18759599516SKenneth E. Jansenc 18859599516SKenneth E. Jansenc.... set timer 18959599516SKenneth E. Jansenc 19059599516SKenneth E. Jansen call timer ('Scatter ') 19159599516SKenneth E. Jansenc 19259599516SKenneth E. Jansenc.... scatter the data (possible collisions) 19359599516SKenneth E. Jansenc 19459599516SKenneth E. Jansen ttim(4) = ttim(4) - tmr() 19559599516SKenneth E. Jansen 196*513954efSKenneth E. Jansen do j = 1, nshl 19759599516SKenneth E. Jansen do nel = 1,npro 19859599516SKenneth E. Jansen global(ien(nel,j)) = global(ien(nel,j)) 19959599516SKenneth E. Jansen & + rlocal(nel,j) 20059599516SKenneth E. Jansen enddo 20159599516SKenneth E. Jansen enddo 20259599516SKenneth E. Jansen 20359599516SKenneth E. Jansen ttim(4) = ttim(4) + tmr() 20459599516SKenneth E. Jansen 20559599516SKenneth E. Jansenc 20659599516SKenneth E. Jansenc.... transfer and flop counts 20759599516SKenneth E. Jansenc 208*513954efSKenneth E. Jansenc sbytes = sbytes + n*nshl*npro 209*513954efSKenneth E. Jansenc flops = flops + n*nshl*npro 21059599516SKenneth E. Jansenc 21159599516SKenneth E. Jansenc.... return 21259599516SKenneth E. Jansenc 21359599516SKenneth E. Jansen call timer ('Back ') 21459599516SKenneth E. Jansen return 21559599516SKenneth E. Jansen endif 21659599516SKenneth E. Jansenc 21759599516SKenneth E. Jansenc.... -------------------------> 'globalizing ' <---------------------- 21859599516SKenneth E. Jansenc 21959599516SKenneth E. Jansen if (code .eq. 'globaliz') then 22059599516SKenneth E. Jansenc 22159599516SKenneth E. Jansenc.... scatter the data (possible collisions) 22259599516SKenneth E. Jansenc 223*513954efSKenneth E. Jansen do j = 1, nshl 22459599516SKenneth E. Jansen do nel = 1,npro 22559599516SKenneth E. Jansen global(ien(nel,j)) = rlocal(nel,j) 22659599516SKenneth E. Jansen enddo 22759599516SKenneth E. Jansen enddo 22859599516SKenneth E. Jansenc 22959599516SKenneth E. Jansenc.... return 23059599516SKenneth E. Jansenc 23159599516SKenneth E. Jansen call timer ('Back ') 23259599516SKenneth E. Jansen return 23359599516SKenneth E. Jansen endif 23459599516SKenneth E. Jansenc 23559599516SKenneth E. Jansenc.... ---------------------------> error <--------------------------- 23659599516SKenneth E. Jansenc 23759599516SKenneth E. Jansen call error ('local ', code, 0) 23859599516SKenneth E. Jansenc 23959599516SKenneth E. Jansenc.... end 24059599516SKenneth E. Jansenc 24159599516SKenneth E. Jansen end 24259599516SKenneth E. Jansenc 24359599516SKenneth E. Jansen 24459599516SKenneth E. Jansen 24559599516SKenneth E. Jansen 246