1*59599516SKenneth E. Jansen subroutine local (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.... gather the data 42*59599516SKenneth E. Jansenc 43*59599516SKenneth E. Jansen 44*59599516SKenneth E. Jansen do j = 1, n 45*59599516SKenneth E. Jansen do i = 1, nshl 46*59599516SKenneth E. Jansen rlocal(:,i,j) = global(ien(:,i),j) 47*59599516SKenneth E. Jansen enddo 48*59599516SKenneth E. Jansen enddo 49*59599516SKenneth E. Jansen 50*59599516SKenneth E. Jansen 51*59599516SKenneth E. Jansenc 52*59599516SKenneth E. Jansenc.... transfer count 53*59599516SKenneth E. Jansenc 54*59599516SKenneth E. Jansen gbytes = gbytes + n*nshl*npro 55*59599516SKenneth E. Jansenc 56*59599516SKenneth E. Jansenc.... return 57*59599516SKenneth E. Jansenc 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.... scatter the data (possible collisions) 66*59599516SKenneth E. Jansenc 67*59599516SKenneth E. Jansen do j = 1, n 68*59599516SKenneth E. Jansen do i = 1, nshl 69*59599516SKenneth E. Jansen do nel = 1,npro 70*59599516SKenneth E. Jansen global(ien(nel,i),j) = global(ien(nel,i),j) 71*59599516SKenneth E. Jansen & + rlocal(nel,i,j) 72*59599516SKenneth E. Jansen enddo 73*59599516SKenneth E. Jansen enddo 74*59599516SKenneth E. Jansen enddo 75*59599516SKenneth E. Jansen 76*59599516SKenneth E. Jansenc 77*59599516SKenneth E. Jansenc.... transfer and flop counts 78*59599516SKenneth E. Jansenc 79*59599516SKenneth E. Jansen sbytes = sbytes + n*nshl*npro 80*59599516SKenneth E. Jansen flops = flops + n*nshl*npro 81*59599516SKenneth E. Jansenc 82*59599516SKenneth E. Jansenc.... return 83*59599516SKenneth E. Jansenc 84*59599516SKenneth E. Jansen return 85*59599516SKenneth E. Jansen endif 86*59599516SKenneth E. Jansenc 87*59599516SKenneth E. Jansenc.... -------------------------> 'globalizing ' <---------------------- 88*59599516SKenneth E. Jansenc 89*59599516SKenneth E. Jansen if (code .eq. 'globaliz') then 90*59599516SKenneth E. Jansenc 91*59599516SKenneth E. Jansenc.... scatter the data (possible collisions) 92*59599516SKenneth E. Jansenc 93*59599516SKenneth E. Jansen do j = 1, n 94*59599516SKenneth E. Jansen do i = 1, nshl 95*59599516SKenneth E. Jansen do nel = 1,npro 96*59599516SKenneth E. Jansen global(ien(nel,i),j) = rlocal(nel,i,j) 97*59599516SKenneth E. Jansen enddo 98*59599516SKenneth E. Jansen enddo 99*59599516SKenneth E. Jansen enddo 100*59599516SKenneth E. Jansenc 101*59599516SKenneth E. Jansenc.... return 102*59599516SKenneth E. Jansenc 103*59599516SKenneth E. Jansen return 104*59599516SKenneth E. Jansen endif 105*59599516SKenneth E. Jansenc 106*59599516SKenneth E. Jansenc.... ---------------------------> error <--------------------------- 107*59599516SKenneth E. Jansenc 108*59599516SKenneth E. Jansen call error ('local ', code, 0) 109*59599516SKenneth E. Jansenc 110*59599516SKenneth E. Jansenc.... end 111*59599516SKenneth E. Jansenc 112*59599516SKenneth E. Jansen end 113*59599516SKenneth E. Jansenc 114*59599516SKenneth E. Jansen subroutine localx (global, rlocal, ien, n, code) 115*59599516SKenneth E. Jansenc 116*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 117*59599516SKenneth E. Jansenc 118*59599516SKenneth E. Jansenc This subroutine performs a vector gather/scatter operation for the 119*59599516SKenneth E. Jansenc nodal coordinates array. 120*59599516SKenneth E. Jansenc 121*59599516SKenneth E. Jansenc input: 122*59599516SKenneth E. Jansenc global (numnp,n) : global array 123*59599516SKenneth E. Jansenc rlocal (npro,nenl,n) : local array 124*59599516SKenneth E. Jansenc ien (npro,nshl) : nodal connectivity 125*59599516SKenneth E. Jansenc n : number of d.o.f.'s to be copied 126*59599516SKenneth E. Jansenc code : the transfer code 127*59599516SKenneth E. Jansenc .eq. 'gather ', from global to local 128*59599516SKenneth E. Jansenc .eq. 'scatter ', add local to global 129*59599516SKenneth E. Jansenc 130*59599516SKenneth E. Jansenc 131*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1992. 132*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 133*59599516SKenneth E. Jansenc 134*59599516SKenneth E. Jansen include "common.h" 135*59599516SKenneth E. Jansen 136*59599516SKenneth E. Jansen dimension global(numnp,n), rlocal(npro,nenl,n), 137*59599516SKenneth E. Jansen & ien(npro,nshl) 138*59599516SKenneth E. Jansenc 139*59599516SKenneth E. Jansen character*8 code 140*59599516SKenneth E. Jansenc 141*59599516SKenneth E. Jansenc.... ------------------------> 'localization ' <-------------------- 142*59599516SKenneth E. Jansenc 143*59599516SKenneth E. Jansen if (code .eq. 'gather ') then 144*59599516SKenneth E. Jansenc 145*59599516SKenneth E. Jansenc.... gather the data 146*59599516SKenneth E. Jansenc 147*59599516SKenneth E. Jansen do j = 1, n 148*59599516SKenneth E. Jansen do i = 1, nenl 149*59599516SKenneth E. Jansen rlocal(:,i,j) = global(ien(:,i),j) 150*59599516SKenneth E. Jansen enddo 151*59599516SKenneth E. Jansen enddo 152*59599516SKenneth E. Jansen 153*59599516SKenneth E. Jansen 154*59599516SKenneth E. Jansenc 155*59599516SKenneth E. Jansenc.... transfer count 156*59599516SKenneth E. Jansenc 157*59599516SKenneth E. Jansen gbytes = gbytes + n*nenl*npro 158*59599516SKenneth E. Jansenc 159*59599516SKenneth E. Jansenc.... return 160*59599516SKenneth E. Jansenc 161*59599516SKenneth E. Jansen return 162*59599516SKenneth E. Jansen endif 163*59599516SKenneth E. Jansenc 164*59599516SKenneth E. Jansenc.... -------------------------> 'assembling ' <---------------------- 165*59599516SKenneth E. Jansenc 166*59599516SKenneth E. Jansen if (code .eq. 'scatter ') then 167*59599516SKenneth E. Jansenc 168*59599516SKenneth E. Jansenc.... scatter the data (possible collisions) 169*59599516SKenneth E. Jansenc 170*59599516SKenneth E. Jansen 171*59599516SKenneth E. Jansen do j = 1, n 172*59599516SKenneth E. Jansen do i = 1, nenl 173*59599516SKenneth E. Jansen do nel = 1,npro 174*59599516SKenneth E. Jansen global(ien(nel,i),j) = global(ien(nel,i),j) 175*59599516SKenneth E. Jansen & + rlocal(nel,i,j) 176*59599516SKenneth E. Jansen enddo 177*59599516SKenneth E. Jansen enddo 178*59599516SKenneth E. Jansen enddo 179*59599516SKenneth E. Jansen 180*59599516SKenneth E. Jansen 181*59599516SKenneth E. Jansenc 182*59599516SKenneth E. Jansenc.... transfer and flop counts 183*59599516SKenneth E. Jansenc 184*59599516SKenneth E. Jansen sbytes = sbytes + n*nenl*npro 185*59599516SKenneth E. Jansen flops = flops + n*nenl*npro 186*59599516SKenneth E. Jansenc 187*59599516SKenneth E. Jansenc.... return 188*59599516SKenneth E. Jansenc 189*59599516SKenneth E. Jansen return 190*59599516SKenneth E. Jansen endif 191*59599516SKenneth E. Jansenc 192*59599516SKenneth E. Jansenc.... ---------------------------> error <--------------------------- 193*59599516SKenneth E. Jansenc 194*59599516SKenneth E. Jansen call error ('local ', code, 0) 195*59599516SKenneth E. Jansenc 196*59599516SKenneth E. Jansenc.... end 197*59599516SKenneth E. Jansenc 198*59599516SKenneth E. Jansen end 199*59599516SKenneth E. Jansenc 200*59599516SKenneth E. Jansen 201*59599516SKenneth E. Jansenc subroutine localM (global, xKebe, xGoC, ien) 202*59599516SKenneth E. Jansencc 203*59599516SKenneth E. Jansencc---------------------------------------------------------------------- 204*59599516SKenneth E. Jansencc This routine assembles a global tangent matrix from the element 205*59599516SKenneth E. Jansencc matrices. 206*59599516SKenneth E. Jansencc 207*59599516SKenneth E. Jansencc 208*59599516SKenneth E. Jansencc 209*59599516SKenneth E. Jansencc 210*59599516SKenneth E. Jansencc 211*59599516SKenneth E. Jansencc | C G^T | 212*59599516SKenneth E. Jansencc globalK = | | 213*59599516SKenneth E. Jansencc | G K | 214*59599516SKenneth E. Jansencc 215*59599516SKenneth E. Jansencc 216*59599516SKenneth E. Jansencc 217*59599516SKenneth E. Jansencc 218*59599516SKenneth E. Jansencc Chris Whiting, Winter '98 219*59599516SKenneth E. Jansencc---------------------------------------------------------------------- 220*59599516SKenneth E. Jansencc 221*59599516SKenneth E. Jansenc include "common.h" 222*59599516SKenneth E. Jansenc 223*59599516SKenneth E. Jansenc dimension global(nshg*4,nshg*4),xKebe(npro,3*nshl,3*nshl), 224*59599516SKenneth E. Jansenc & xGoC(npro,4*nshl,nshl), 225*59599516SKenneth E. Jansenc & ien(npro,nshape) 226*59599516SKenneth E. Jansencc 227*59599516SKenneth E. Jansenc character*8 code 228*59599516SKenneth E. Jansencc 229*59599516SKenneth E. Jansencc.... -------------------------> 'assembling ' <---------------------- 230*59599516SKenneth E. Jansencc 231*59599516SKenneth E. Jansenc 232*59599516SKenneth E. Jansencc 233*59599516SKenneth E. Jansencc.... scatter the data (possible collisions) 234*59599516SKenneth E. Jansencc 235*59599516SKenneth E. Jansenc 236*59599516SKenneth E. Jansencc 237*59599516SKenneth E. Jansencc.... k 238*59599516SKenneth E. Jansencc 239*59599516SKenneth E. Jansenc do iel = 1, numel 240*59599516SKenneth E. Jansenc 241*59599516SKenneth E. Jansenc do i = 1, nshl 242*59599516SKenneth E. Jansenc i0 = (i-1)*3 243*59599516SKenneth E. Jansencc 244*59599516SKenneth E. Jansenc do j = 1, nshl 245*59599516SKenneth E. Jansenc j0 = (j-1)*3 246*59599516SKenneth E. Jansencc 247*59599516SKenneth E. Jansenc ia = (ien(iel,i)-1)*4 + 1 248*59599516SKenneth E. Jansenc ib = (ien(iel,j)-1)*4 + 1 249*59599516SKenneth E. Jansencc 250*59599516SKenneth E. Jansenc global(ia+1,ib+1) = global(ia+1,ib+1) 251*59599516SKenneth E. Jansenc & + xKebe(iel,i0+1,j0+1) 252*59599516SKenneth E. Jansenc global(ia+1,ib+2) = global(ia+1,ib+2) 253*59599516SKenneth E. Jansenc & + xKebe(iel,i0+1,j0+2) 254*59599516SKenneth E. Jansenc global(ia+1,ib+3) = global(ia+1,ib+3) 255*59599516SKenneth E. Jansenc & + xKebe(iel,i0+1,j0+3) 256*59599516SKenneth E. Jansenc global(ia+2,ib+1) = global(ia+2,ib+1) 257*59599516SKenneth E. Jansenc & + xKebe(iel,i0+2,j0+1) 258*59599516SKenneth E. Jansenc global(ia+2,ib+2) = global(ia+2,ib+2) 259*59599516SKenneth E. Jansenc & + xKebe(iel,i0+2,j0+2) 260*59599516SKenneth E. Jansenc global(ia+2,ib+3) = global(ia+2,ib+3) 261*59599516SKenneth E. Jansenc & + xKebe(iel,i0+2,j0+3) 262*59599516SKenneth E. Jansenc global(ia+3,ib+1) = global(ia+3,ib+1) 263*59599516SKenneth E. Jansenc & + xKebe(iel,i0+3,j0+1) 264*59599516SKenneth E. Jansenc global(ia+3,ib+2) = global(ia+3,ib+2) 265*59599516SKenneth E. Jansenc & + xKebe(iel,i0+3,j0+2) 266*59599516SKenneth E. Jansenc global(ia+3,ib+3) = global(ia+3,ib+3) 267*59599516SKenneth E. Jansenc & + xKebe(iel,i0+3,j0+3) 268*59599516SKenneth E. Jansencc 269*59599516SKenneth E. Jansenc enddo 270*59599516SKenneth E. Jansencc 271*59599516SKenneth E. Jansenc enddo 272*59599516SKenneth E. Jansencc 273*59599516SKenneth E. Jansenc enddo 274*59599516SKenneth E. Jansenc 275*59599516SKenneth E. Jansencc 276*59599516SKenneth E. Jansencc.... G and G^T 277*59599516SKenneth E. Jansencc 278*59599516SKenneth E. Jansenc do iel = 1, numel 279*59599516SKenneth E. Jansenc 280*59599516SKenneth E. Jansenc do i = 1, nshl 281*59599516SKenneth E. Jansenc i0 = (i-1)*3 282*59599516SKenneth E. Jansenc do j = 1, nshl 283*59599516SKenneth E. Jansenc 284*59599516SKenneth E. Jansenc ia = (ien(iel,i)-1)*4 + 1 285*59599516SKenneth E. Jansenc ib = (ien(iel,j)-1)*4 + 1 286*59599516SKenneth E. Jansencc 287*59599516SKenneth E. Jansenc global(ia+1,ib ) = global(ia+1,ib )+ xGoC(iel,i0+1,j) 288*59599516SKenneth E. Jansenc global(ia+2,ib ) = global(ia+2,ib )+ xGoC(iel,i0+2,j) 289*59599516SKenneth E. Jansenc global(ia+3,ib ) = global(ia+3,ib )+ xGoC(iel,i0+3,j) 290*59599516SKenneth E. Jansenc global(ia ,ib+1) = global(ia ,ib+1)+ xGoC(iel,i0+1,j) 291*59599516SKenneth E. Jansenc global(ia ,ib+2) = global(ia ,ib+2)+ xGoC(iel,i0+2,j) 292*59599516SKenneth E. Jansenc global(ia ,ib+3) = global(ia ,ib+3)+ xGoC(iel,i0+3,j) 293*59599516SKenneth E. Jansenc 294*59599516SKenneth E. Jansencc 295*59599516SKenneth E. Jansenc enddo 296*59599516SKenneth E. Jansencc 297*59599516SKenneth E. Jansenc enddo 298*59599516SKenneth E. Jansenc enddo 299*59599516SKenneth E. Jansenc 300*59599516SKenneth E. Jansencc 301*59599516SKenneth E. Jansencc.... C 302*59599516SKenneth E. Jansencc 303*59599516SKenneth E. Jansenc do iel = 1, numel 304*59599516SKenneth E. Jansenc do i = 1, nshl 305*59599516SKenneth E. Jansenc i0 = 3*nshl + i 306*59599516SKenneth E. Jansenc do j = 1, nshl 307*59599516SKenneth E. Jansenc ia = (ien(iel,i)-1)*4 + 1 308*59599516SKenneth E. Jansenc ib = (ien(iel,j)-1)*4 + 1 309*59599516SKenneth E. Jansencc 310*59599516SKenneth E. Jansenc global(ia,ib) = global(ia,ib) + xGoC(iel,i0,j) 311*59599516SKenneth E. Jansencc 312*59599516SKenneth E. Jansenc enddo 313*59599516SKenneth E. Jansenc enddo 314*59599516SKenneth E. Jansenc 315*59599516SKenneth E. Jansencc 316*59599516SKenneth E. Jansenc enddo 317*59599516SKenneth E. Jansenc 318*59599516SKenneth E. Jansenc 319*59599516SKenneth E. Jansenc 320*59599516SKenneth E. Jansenccad ttim(4) = ttim(4) + secs(0.0) 321*59599516SKenneth E. Jansenc 322*59599516SKenneth E. Jansencc 323*59599516SKenneth E. Jansencc.... transfer and flop counts 324*59599516SKenneth E. Jansencc 325*59599516SKenneth E. Jansenc sbytes = sbytes + nshl*nenl*npro 326*59599516SKenneth E. Jansenc flops = flops + nshl*nenl*npro 327*59599516SKenneth E. Jansencc 328*59599516SKenneth E. Jansencc.... return 329*59599516SKenneth E. Jansencc 330*59599516SKenneth E. Jansenccad call timer ('Back ') 331*59599516SKenneth E. Jansenc return 332*59599516SKenneth E. Jansencc 333*59599516SKenneth E. Jansencc.... ---------------------------> error <--------------------------- 334*59599516SKenneth E. Jansencc 335*59599516SKenneth E. Jansenc call error ('local ', code, 0) 336*59599516SKenneth E. Jansencc 337*59599516SKenneth E. Jansencc.... end 338*59599516SKenneth E. Jansencc 339*59599516SKenneth E. Jansenc end 340*59599516SKenneth E. Jansencc 341*59599516SKenneth E. Jansenc 342*59599516SKenneth E. Jansen 343*59599516SKenneth E. Jansen 344*59599516SKenneth E. Jansen subroutine localSum (global, rlocal, ientmp, nHits, n) 345*59599516SKenneth E. Jansenc 346*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 347*59599516SKenneth E. Jansenc 348*59599516SKenneth E. Jansenc sum the data from the local array to the global degrees of 349*59599516SKenneth E. Jansenc freedom and keep track of the number of locals contributing 350*59599516SKenneth E. Jansenc to each global dof. This may be used to find the average. 351*59599516SKenneth E. Jansenc 352*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 353*59599516SKenneth E. Jansenc 354*59599516SKenneth E. Jansen include "common.h" 355*59599516SKenneth E. Jansen 356*59599516SKenneth E. Jansen dimension global(nshg,n), rlocal(npro,nshl,n), 357*59599516SKenneth E. Jansen & ien(npro,nshl), ientmp(npro,nshl), 358*59599516SKenneth E. Jansen & nHits(nshg) 359*59599516SKenneth E. Jansenc 360*59599516SKenneth E. Jansenc.... cubic basis has negatives in ien 361*59599516SKenneth E. Jansenc 362*59599516SKenneth E. Jansen if (ipord > 2) then 363*59599516SKenneth E. Jansen ien = abs(ientmp) 364*59599516SKenneth E. Jansen else 365*59599516SKenneth E. Jansen ien = ientmp 366*59599516SKenneth E. Jansen endif 367*59599516SKenneth E. Jansenc 368*59599516SKenneth E. Jansenc.... -------------------------> 'assembling ' <---------------------- 369*59599516SKenneth E. Jansenc 370*59599516SKenneth E. Jansen do j = 1, n 371*59599516SKenneth E. Jansen do i = 1, nshl 372*59599516SKenneth E. Jansen do nel = 1,npro 373*59599516SKenneth E. Jansen idg = ien(nel,i) 374*59599516SKenneth E. Jansen global(idg,j) = global(idg,j) + rlocal(nel,i,j) 375*59599516SKenneth E. Jansen enddo 376*59599516SKenneth E. Jansen enddo 377*59599516SKenneth E. Jansen enddo 378*59599516SKenneth E. Jansen do i = 1, nshl 379*59599516SKenneth E. Jansen do nel = 1,npro 380*59599516SKenneth E. Jansen idg = ien(nel,i) 381*59599516SKenneth E. Jansen nHits(idg) = nHits(idg) + 1 382*59599516SKenneth E. Jansen enddo 383*59599516SKenneth E. Jansen enddo 384*59599516SKenneth E. Jansenc 385*59599516SKenneth E. Jansenc.... end 386*59599516SKenneth E. Jansenc 387*59599516SKenneth E. Jansen end 388*59599516SKenneth E. Jansen 389*59599516SKenneth E. Jansen subroutine localb (global, rlocal, ientmp, n, code) 390*59599516SKenneth E. Jansenc 391*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 392*59599516SKenneth E. Jansenc 393*59599516SKenneth E. Jansenc This subroutine performs a vector gather/scatter operation on boundary only. 394*59599516SKenneth E. Jansenc 395*59599516SKenneth E. Jansenc input: 396*59599516SKenneth E. Jansenc global (nshg,n) : global array 397*59599516SKenneth E. Jansenc rlocal (npro,nshl,n) : local array 398*59599516SKenneth E. Jansenc ien (npro,nshl) : nodal connectivity 399*59599516SKenneth E. Jansenc n : number of d.o.f.'s to be copied 400*59599516SKenneth E. Jansenc code : the transfer code 401*59599516SKenneth E. Jansenc .eq. 'gather ', from global to local 402*59599516SKenneth E. Jansenc .eq. 'scatter ', add local to global 403*59599516SKenneth E. Jansenc .eq. 'globaliz', from local to global 404*59599516SKenneth E. Jansenc 405*59599516SKenneth E. Jansenc 406*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1992. 407*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 408*59599516SKenneth E. Jansenc 409*59599516SKenneth E. Jansen include "common.h" 410*59599516SKenneth E. Jansen 411*59599516SKenneth E. Jansen dimension global(nshg,n), rlocal(npro,nshlb,n), 412*59599516SKenneth E. Jansen & ien(npro,nshl), ientmp(npro,nshl) 413*59599516SKenneth E. Jansenc 414*59599516SKenneth E. Jansen character*8 code 415*59599516SKenneth E. Jansen 416*59599516SKenneth E. Jansenc 417*59599516SKenneth E. Jansenc.... cubic basis has negatives in ien 418*59599516SKenneth E. Jansenc 419*59599516SKenneth E. Jansen if (ipord > 2) then 420*59599516SKenneth E. Jansen ien = abs(ientmp) 421*59599516SKenneth E. Jansen else 422*59599516SKenneth E. Jansen ien = ientmp 423*59599516SKenneth E. Jansen endif 424*59599516SKenneth E. Jansenc 425*59599516SKenneth E. Jansenc.... ------------------------> 'localization ' <-------------------- 426*59599516SKenneth E. Jansenc 427*59599516SKenneth E. Jansen if (code .eq. 'gather ') then 428*59599516SKenneth E. Jansenc 429*59599516SKenneth E. Jansenc.... set timer 430*59599516SKenneth E. Jansenc 431*59599516SKenneth E. Jansencad call timer ('Gather ') 432*59599516SKenneth E. Jansenc 433*59599516SKenneth E. Jansenc.... gather the data 434*59599516SKenneth E. Jansenc 435*59599516SKenneth E. Jansen 436*59599516SKenneth E. Jansen do j = 1, n 437*59599516SKenneth E. Jansen do i = 1, nshlb 438*59599516SKenneth E. Jansen rlocal(:,i,j) = global(ien(:,i),j) 439*59599516SKenneth E. Jansen enddo 440*59599516SKenneth E. Jansen enddo 441*59599516SKenneth E. Jansen 442*59599516SKenneth E. Jansen 443*59599516SKenneth E. Jansenc 444*59599516SKenneth E. Jansenc.... transfer count 445*59599516SKenneth E. Jansenc 446*59599516SKenneth E. Jansen gbytes = gbytes + n*nshl*npro 447*59599516SKenneth E. Jansenc 448*59599516SKenneth E. Jansenc.... return 449*59599516SKenneth E. Jansenc 450*59599516SKenneth E. Jansencad call timer ('Back ') 451*59599516SKenneth E. Jansen return 452*59599516SKenneth E. Jansen endif 453*59599516SKenneth E. Jansenc 454*59599516SKenneth E. Jansenc.... -------------------------> 'assembling ' <---------------------- 455*59599516SKenneth E. Jansenc 456*59599516SKenneth E. Jansen if (code .eq. 'scatter ') then 457*59599516SKenneth E. Jansenc 458*59599516SKenneth E. Jansenc.... set timer 459*59599516SKenneth E. Jansenc 460*59599516SKenneth E. Jansencad call timer ('Scatter ') 461*59599516SKenneth E. Jansenc 462*59599516SKenneth E. Jansenc.... scatter the data (possible collisions) 463*59599516SKenneth E. Jansenc 464*59599516SKenneth E. Jansen do j = 1, n 465*59599516SKenneth E. Jansen do i = 1, nshlb 466*59599516SKenneth E. Jansen do nel = 1,npro 467*59599516SKenneth E. Jansen global(ien(nel,i),j) = global(ien(nel,i),j) 468*59599516SKenneth E. Jansen & + rlocal(nel,i,j) 469*59599516SKenneth E. Jansen enddo 470*59599516SKenneth E. Jansen enddo 471*59599516SKenneth E. Jansen enddo 472*59599516SKenneth E. Jansen 473*59599516SKenneth E. Jansenc 474*59599516SKenneth E. Jansenc.... transfer and flop counts 475*59599516SKenneth E. Jansenc 476*59599516SKenneth E. Jansen sbytes = sbytes + n*nshlb*npro 477*59599516SKenneth E. Jansen flops = flops + n*nshlb*npro 478*59599516SKenneth E. Jansenc 479*59599516SKenneth E. Jansenc.... return 480*59599516SKenneth E. Jansenc 481*59599516SKenneth E. JansenCAD call timer ('Back ') 482*59599516SKenneth E. Jansen return 483*59599516SKenneth E. Jansen endif 484*59599516SKenneth E. Jansenc 485*59599516SKenneth E. Jansenc.... -------------------------> 'globalizing ' <---------------------- 486*59599516SKenneth E. Jansenc 487*59599516SKenneth E. Jansen if (code .eq. 'globaliz') then 488*59599516SKenneth E. Jansenc 489*59599516SKenneth E. Jansenc.... scatter the data (possible collisions) 490*59599516SKenneth E. Jansenc 491*59599516SKenneth E. Jansen do j = 1, n 492*59599516SKenneth E. Jansen do i = 1, nshlb 493*59599516SKenneth E. Jansen do nel = 1,npro 494*59599516SKenneth E. Jansen global(ien(nel,i),j) = rlocal(nel,i,j) 495*59599516SKenneth E. Jansen enddo 496*59599516SKenneth E. Jansen enddo 497*59599516SKenneth E. Jansen enddo 498*59599516SKenneth E. Jansenc 499*59599516SKenneth E. Jansenc.... return 500*59599516SKenneth E. Jansenc 501*59599516SKenneth E. Jansencad call timer ('Back ') 502*59599516SKenneth E. Jansen return 503*59599516SKenneth E. Jansen endif 504*59599516SKenneth E. Jansenc 505*59599516SKenneth E. Jansenc.... ---------------------------> error <--------------------------- 506*59599516SKenneth E. Jansenc 507*59599516SKenneth E. Jansen call error ('local ', code, 0) 508*59599516SKenneth E. Jansenc 509*59599516SKenneth E. Jansenc.... end 510*59599516SKenneth E. Jansenc 511*59599516SKenneth E. Jansen end 512*59599516SKenneth E. Jansenc 513*59599516SKenneth E. Jansen 514*59599516SKenneth E. Jansen 515*59599516SKenneth E. Jansen 516*59599516SKenneth E. Jansen 517