1*59599516SKenneth E. Jansenc--------------------------------------------------------------------- 2*59599516SKenneth E. Jansenc 3*59599516SKenneth E. Jansenc ftools.f : Bundle of Fortran routines 4*59599516SKenneth E. Jansenc 5*59599516SKenneth E. Jansenc Each routine is to be called by drvftools.f 6*59599516SKenneth E. Jansenc 7*59599516SKenneth E. Jansenc Various operations run based on les**.c 8*59599516SKenneth E. Jansenc 9*59599516SKenneth E. Jansenc--------------------------------------------------------------------- 10*59599516SKenneth E. Jansenc 11*59599516SKenneth E. Jansenc-------------- 12*59599516SKenneth E. Jansenc flesPrepDiag 13*59599516SKenneth E. Jansenc-------------- 14*59599516SKenneth E. Jansenc 15*59599516SKenneth E. Jansen subroutine flesPrepDiag ( ien, xKebe, xGoc, flowDiag ) 16*59599516SKenneth E. Jansenc 17*59599516SKenneth E. Jansen include "common.h" 18*59599516SKenneth E. Jansenc 19*59599516SKenneth E. Jansen dimension xKebe(npro,3*nshl,3*nshl), 20*59599516SKenneth E. Jansen & xGoC(npro,4*nshl,nshl) 21*59599516SKenneth E. Jansen dimension Diagl(npro,nshl,nflow), flowDiag(nshg, 4) 22*59599516SKenneth E. Jansen integer ien(npro,nshl) 23*59599516SKenneth E. Jansenc 24*59599516SKenneth E. Jansenc 25*59599516SKenneth E. Jansenc.... monentum contribution to diagonal 26*59599516SKenneth E. Jansenc 27*59599516SKenneth E. Jansen do i = 1, nshl 28*59599516SKenneth E. Jansen i0 = (nsd) * (i - 1) 29*59599516SKenneth E. Jansen Diagl(:,i,1) = xKebe(1:npro,i0+1,i0+1) 30*59599516SKenneth E. Jansen Diagl(:,i,2) = xKebe(1:npro,i0+2,i0+2) 31*59599516SKenneth E. Jansen Diagl(:,i,3) = xKebe(1:npro,i0+3,i0+3) 32*59599516SKenneth E. Jansen enddo 33*59599516SKenneth E. Jansenc 34*59599516SKenneth E. Jansenc.... continuity contribution to diagonal 35*59599516SKenneth E. Jansenc 36*59599516SKenneth E. Jansen nn2 = nshl * nsd 37*59599516SKenneth E. Jansen do i = 1, nshl 38*59599516SKenneth E. Jansen Diagl(:,i,4) = xGoC(1:npro,nn2+i,i) 39*59599516SKenneth E. Jansen enddo 40*59599516SKenneth E. Jansen 41*59599516SKenneth E. Jansen call local (flowDiag, Diagl, ien, nflow, 'scatter ') 42*59599516SKenneth E. Jansenc 43*59599516SKenneth E. Jansen return 44*59599516SKenneth E. Jansen end 45*59599516SKenneth E. Jansenc 46*59599516SKenneth E. Jansenc-------------------------------- 47*59599516SKenneth E. Jansenc fMtxVdimVecMult 48*59599516SKenneth E. Jansenc Farzin's implementation 49*59599516SKenneth E. Jansenc row and column index exchanged 50*59599516SKenneth E. Jansenc-------------------------------- 51*59599516SKenneth E. Jansenc 52*59599516SKenneth E. Jansen subroutine fMtxVdimVecMult( a, b, c, na, nb, nc, m, n ) 53*59599516SKenneth E. Jansenc 54*59599516SKenneth E. Jansenc.... Data declaration 55*59599516SKenneth E. Jansenc 56*59599516SKenneth E. Jansen implicit none 57*59599516SKenneth E. Jansen integer na, nb, nc, m, n 58*59599516SKenneth E. Jansen real*8 a(n,na), b(n,nb), c(n,nc) 59*59599516SKenneth E. Jansenc 60*59599516SKenneth E. Jansen integer i, j 61*59599516SKenneth E. Jansenc 62*59599516SKenneth E. Jansenc.... Do the work 63*59599516SKenneth E. Jansenc 64*59599516SKenneth E. JansenC WIP: change to F90 65*59599516SKenneth E. JansenC 66*59599516SKenneth E. Jansen if ( m .eq. 1 ) then 67*59599516SKenneth E. Jansenc 68*59599516SKenneth E. Jansen do i = 1, n 69*59599516SKenneth E. Jansen c(i,1) = a(i,1) * b(i,1) 70*59599516SKenneth E. Jansen enddo 71*59599516SKenneth E. Jansenc 72*59599516SKenneth E. Jansen else if ( m .eq. 2 ) then 73*59599516SKenneth E. Jansenc 74*59599516SKenneth E. Jansen do i = 1, n 75*59599516SKenneth E. Jansen c(i,1) = a(i,1) * b(i,1) 76*59599516SKenneth E. Jansen c(i,2) = a(i,2) * b(i,2) 77*59599516SKenneth E. Jansen enddo 78*59599516SKenneth E. Jansenc 79*59599516SKenneth E. Jansen else if ( m .eq. 3 ) then 80*59599516SKenneth E. Jansenc 81*59599516SKenneth E. Jansen do i = 1, n 82*59599516SKenneth E. Jansen c(i,1) = a(i,1) * b(i,1) 83*59599516SKenneth E. Jansen c(i,2) = a(i,2) * b(i,2) 84*59599516SKenneth E. Jansen c(i,3) = a(i,3) * b(i,3) 85*59599516SKenneth E. Jansen enddo 86*59599516SKenneth E. Jansenc 87*59599516SKenneth E. Jansen else if ( m .eq. 4 ) then 88*59599516SKenneth E. Jansenc 89*59599516SKenneth E. Jansen do i = 1, n 90*59599516SKenneth E. Jansen c(i,1) = a(i,1) * b(i,1) 91*59599516SKenneth E. Jansen c(i,2) = a(i,2) * b(i,2) 92*59599516SKenneth E. Jansen c(i,3) = a(i,3) * b(i,3) 93*59599516SKenneth E. Jansen c(i,4) = a(i,4) * b(i,4) 94*59599516SKenneth E. Jansen enddo 95*59599516SKenneth E. Jansenc 96*59599516SKenneth E. Jansen else 97*59599516SKenneth E. Jansenc 98*59599516SKenneth E. Jansen do i = 1, n 99*59599516SKenneth E. Jansen do j = 1, m 100*59599516SKenneth E. Jansen c(i,j) = a(i,j) * b(i,j) 101*59599516SKenneth E. Jansen enddo 102*59599516SKenneth E. Jansen enddo 103*59599516SKenneth E. Jansenc 104*59599516SKenneth E. Jansen endif 105*59599516SKenneth E. Jansenc 106*59599516SKenneth E. Jansen return 107*59599516SKenneth E. Jansen end 108*59599516SKenneth E. Jansenc 109*59599516SKenneth E. Jansenc---------- 110*59599516SKenneth E. Jansenc flesZero 111*59599516SKenneth E. Jansenc---------- 112*59599516SKenneth E. Jansenc 113*59599516SKenneth E. Jansen subroutine flesZero ( a, m, n ) 114*59599516SKenneth E. Jansenc 115*59599516SKenneth E. Jansen implicit none 116*59599516SKenneth E. Jansen integer m, n, i, j 117*59599516SKenneth E. Jansen real*8 a(n,m) 118*59599516SKenneth E. Jansenc 119*59599516SKenneth E. Jansen do i = 1, n 120*59599516SKenneth E. Jansen do j = 1, m 121*59599516SKenneth E. Jansen a(i,j) = 0.0e-0 122*59599516SKenneth E. Jansen enddo 123*59599516SKenneth E. Jansen enddo 124*59599516SKenneth E. Jansenc 125*59599516SKenneth E. Jansen return 126*59599516SKenneth E. Jansen end 127*59599516SKenneth E. Jansenc 128*59599516SKenneth E. Jansenc-------- 129*59599516SKenneth E. Jansenc flesCp 130*59599516SKenneth E. Jansenc-------- 131*59599516SKenneth E. Jansenc 132*59599516SKenneth E. Jansen subroutine flesCp ( a, b, m, n ) 133*59599516SKenneth E. Jansenc 134*59599516SKenneth E. Jansen implicit none 135*59599516SKenneth E. Jansen integer m, n, i, j 136*59599516SKenneth E. Jansen real*8 a(n,m), b(n,m) 137*59599516SKenneth E. Jansenc 138*59599516SKenneth E. Jansen do i = 1, n 139*59599516SKenneth E. Jansen do j = 1, m 140*59599516SKenneth E. Jansen b(i,j) = a(i,j) 141*59599516SKenneth E. Jansen enddo 142*59599516SKenneth E. Jansen enddo 143*59599516SKenneth E. Jansenc 144*59599516SKenneth E. Jansen return 145*59599516SKenneth E. Jansen end 146*59599516SKenneth E. Jansenc 147*59599516SKenneth E. Jansenc----------- 148*59599516SKenneth E. Jansenc flesScale 149*59599516SKenneth E. Jansenc----------- 150*59599516SKenneth E. Jansenc 151*59599516SKenneth E. Jansen subroutine flesScale ( a, s, m, n ) 152*59599516SKenneth E. Jansenc 153*59599516SKenneth E. Jansen implicit none 154*59599516SKenneth E. Jansen integer m, n, i, j 155*59599516SKenneth E. Jansen real*8 a(n,m), s 156*59599516SKenneth E. Jansenc 157*59599516SKenneth E. Jansen do i = 1, n 158*59599516SKenneth E. Jansen do j = 1, m 159*59599516SKenneth E. Jansen a(i,j) = a(i,j) * s 160*59599516SKenneth E. Jansen enddo 161*59599516SKenneth E. Jansen enddo 162*59599516SKenneth E. Jansenc 163*59599516SKenneth E. Jansen return 164*59599516SKenneth E. Jansen end 165*59599516SKenneth E. Jansenc 166*59599516SKenneth E. Jansenc------------- 167*59599516SKenneth E. Jansenc flesScaleCp 168*59599516SKenneth E. Jansenc------------- 169*59599516SKenneth E. Jansenc 170*59599516SKenneth E. Jansen subroutine flesScaleCp ( a, b, s, m, n ) 171*59599516SKenneth E. Jansenc 172*59599516SKenneth E. Jansen implicit none 173*59599516SKenneth E. Jansen integer m, n, i, j 174*59599516SKenneth E. Jansen real*8 a(n,m), b(n,m), s 175*59599516SKenneth E. Jansenc 176*59599516SKenneth E. Jansen do i = 1, n 177*59599516SKenneth E. Jansen do j = 1, m 178*59599516SKenneth E. Jansen b(i,j) = a(i,j) * s 179*59599516SKenneth E. Jansen enddo 180*59599516SKenneth E. Jansen enddo 181*59599516SKenneth E. Jansenc 182*59599516SKenneth E. Jansen return 183*59599516SKenneth E. Jansen end 184*59599516SKenneth E. Jansenc 185*59599516SKenneth E. Jansenc--------- 186*59599516SKenneth E. Jansenc flesAdd 187*59599516SKenneth E. Jansenc--------- 188*59599516SKenneth E. Jansenc 189*59599516SKenneth E. Jansen subroutine flesAdd ( a, b, m, n ) 190*59599516SKenneth E. Jansenc 191*59599516SKenneth E. Jansen implicit none 192*59599516SKenneth E. Jansen integer m, n, i, j 193*59599516SKenneth E. Jansen real*8 a(n,m), b(n,m) 194*59599516SKenneth E. Jansenc 195*59599516SKenneth E. Jansen do i = 1, n 196*59599516SKenneth E. Jansen do j = 1, m 197*59599516SKenneth E. Jansen b(i,j) = b(i,j) + a(i,j) 198*59599516SKenneth E. Jansen enddo 199*59599516SKenneth E. Jansen enddo 200*59599516SKenneth E. Jansenc 201*59599516SKenneth E. Jansen return 202*59599516SKenneth E. Jansen end 203*59599516SKenneth E. Jansenc 204*59599516SKenneth E. Jansenc--------- 205*59599516SKenneth E. Jansenc flesSub 206*59599516SKenneth E. Jansenc--------- 207*59599516SKenneth E. Jansenc 208*59599516SKenneth E. Jansen subroutine flesSub ( a, b, m, n ) 209*59599516SKenneth E. Jansenc 210*59599516SKenneth E. Jansen implicit none 211*59599516SKenneth E. Jansen integer m, n, i, j 212*59599516SKenneth E. Jansen real*8 a(n,m), b(n,m) 213*59599516SKenneth E. Jansenc 214*59599516SKenneth E. Jansen do i = 1, n 215*59599516SKenneth E. Jansen do j = 1, m 216*59599516SKenneth E. Jansen b(i,j) = b(i,j) - a(i,j) 217*59599516SKenneth E. Jansen enddo 218*59599516SKenneth E. Jansen enddo 219*59599516SKenneth E. Jansenc 220*59599516SKenneth E. Jansen return 221*59599516SKenneth E. Jansen end 222*59599516SKenneth E. Jansenc 223*59599516SKenneth E. Jansenc---------- 224*59599516SKenneth E. Jansenc flesDot1 225*59599516SKenneth E. Jansenc---------- 226*59599516SKenneth E. Jansenc 227*59599516SKenneth E. Jansen real*8 function flesDot1 ( a, m, n ) 228*59599516SKenneth E. Jansenc 229*59599516SKenneth E. Jansen implicit none 230*59599516SKenneth E. Jansen integer m, n, i, j 231*59599516SKenneth E. Jansen real*8 a(n,m) 232*59599516SKenneth E. Jansenc 233*59599516SKenneth E. Jansen flesDot1 = 0 234*59599516SKenneth E. Jansen do i = 1, n 235*59599516SKenneth E. Jansen do j = 1, m 236*59599516SKenneth E. Jansen flesDot1 = flesDot1 + a(i,j) * a(i,j) 237*59599516SKenneth E. Jansen enddo 238*59599516SKenneth E. Jansen enddo 239*59599516SKenneth E. Jansenc 240*59599516SKenneth E. Jansen return 241*59599516SKenneth E. Jansen end 242*59599516SKenneth E. Jansenc 243*59599516SKenneth E. Jansenc---------- 244*59599516SKenneth E. Jansenc flesDot2 245*59599516SKenneth E. Jansenc---------- 246*59599516SKenneth E. Jansenc 247*59599516SKenneth E. Jansen real*8 function flesDot2 ( a, b, m, n ) 248*59599516SKenneth E. Jansenc 249*59599516SKenneth E. Jansen implicit none 250*59599516SKenneth E. Jansen integer m, n, i, j 251*59599516SKenneth E. Jansen real*8 a(n,m), b(n,m) 252*59599516SKenneth E. Jansenc 253*59599516SKenneth E. Jansen flesDot2 = 0 254*59599516SKenneth E. Jansen do i = 1, n 255*59599516SKenneth E. Jansen do j = 1, m 256*59599516SKenneth E. Jansen flesDot2 = flesDot2 + a(i,j) * b(i,j) 257*59599516SKenneth E. Jansen enddo 258*59599516SKenneth E. Jansen enddo 259*59599516SKenneth E. Jansenc 260*59599516SKenneth E. Jansen return 261*59599516SKenneth E. Jansen end 262*59599516SKenneth E. Jansenc 263*59599516SKenneth E. Jansenc----------- 264*59599516SKenneth E. Jansenc flesDaxpy 265*59599516SKenneth E. Jansenc----------- 266*59599516SKenneth E. Jansenc 267*59599516SKenneth E. Jansen subroutine flesDaxpy ( x, y, a, m, n ) 268*59599516SKenneth E. Jansenc 269*59599516SKenneth E. Jansen implicit none 270*59599516SKenneth E. Jansen integer m, n, i, j 271*59599516SKenneth E. Jansen real*8 x(n,m), y(n,m) 272*59599516SKenneth E. Jansen real*8 a 273*59599516SKenneth E. Jansenc 274*59599516SKenneth E. Jansen do i = 1, n 275*59599516SKenneth E. Jansen do j= 1, m 276*59599516SKenneth E. Jansen y(i,j) = y(i,j) + a * x(i,j) 277*59599516SKenneth E. Jansen enddo 278*59599516SKenneth E. Jansen enddo 279*59599516SKenneth E. Jansenc 280*59599516SKenneth E. Jansen return 281*59599516SKenneth E. Jansen end 282*59599516SKenneth E. Jansenc 283*59599516SKenneth E. Jansenc----------- 284*59599516SKenneth E. Jansenc flesDxpay 285*59599516SKenneth E. Jansenc----------- 286*59599516SKenneth E. Jansenc 287*59599516SKenneth E. Jansen subroutine flesDxpay ( x, y, a, m, n ) 288*59599516SKenneth E. Jansenc 289*59599516SKenneth E. Jansen implicit none 290*59599516SKenneth E. Jansen integer m, n, i, j 291*59599516SKenneth E. Jansen real*8 x(n,m), y(n,m) 292*59599516SKenneth E. Jansen real*8 a 293*59599516SKenneth E. Jansenc 294*59599516SKenneth E. Jansen do i = 1, n 295*59599516SKenneth E. Jansen do j = 1, m 296*59599516SKenneth E. Jansen y(i,j) = a * y(i,j) + x(i,j) 297*59599516SKenneth E. Jansen enddo 298*59599516SKenneth E. Jansen enddo 299*59599516SKenneth E. Jansenc 300*59599516SKenneth E. Jansen return 301*59599516SKenneth E. Jansen end 302*59599516SKenneth E. Jansenc 303*59599516SKenneth E. Jansenc--------- 304*59599516SKenneth E. Jansenc flesInv 305*59599516SKenneth E. Jansenc--------- 306*59599516SKenneth E. Jansenc 307*59599516SKenneth E. Jansen subroutine flesInv ( x, m, n ) 308*59599516SKenneth E. Jansenc 309*59599516SKenneth E. Jansen implicit none 310*59599516SKenneth E. Jansen integer m, n, i, j 311*59599516SKenneth E. Jansen real*8 x(n,m) 312*59599516SKenneth E. Jansenc 313*59599516SKenneth E. Jansen do i = 1, n 314*59599516SKenneth E. Jansen do j = 1, m 315*59599516SKenneth E. Jansen if ( x(i,j) .ne. 0 ) x(i,j) = 1. / x(i,j) 316*59599516SKenneth E. Jansen enddo 317*59599516SKenneth E. Jansen enddo 318*59599516SKenneth E. Jansenc 319*59599516SKenneth E. Jansen return 320*59599516SKenneth E. Jansen end 321*59599516SKenneth E. Jansenc 322*59599516SKenneth E. Jansenc-------------------------- 323*59599516SKenneth E. Jansenc fMtxBlkDot2 324*59599516SKenneth E. Jansenc Farzin's implementation 325*59599516SKenneth E. Jansenc row and column exchanged 326*59599516SKenneth E. Jansenc-------------------------- 327*59599516SKenneth E. Jansenc 328*59599516SKenneth E. Jansen subroutine fMtxBlkDot2( x, y, c, m, n ) 329*59599516SKenneth E. Jansenc 330*59599516SKenneth E. Jansenc.... Data declaration 331*59599516SKenneth E. Jansenc 332*59599516SKenneth E. Jansen implicit none 333*59599516SKenneth E. Jansen integer m, n 334*59599516SKenneth E. Jansen real*8 x(n,m), y(n), c(m) 335*59599516SKenneth E. Jansenc 336*59599516SKenneth E. Jansen real*8 tmp1, tmp2, tmp3, tmp4 337*59599516SKenneth E. Jansen real*8 tmp5, tmp6, tmp7, tmp8 338*59599516SKenneth E. Jansen integer i, j, m1 339*59599516SKenneth E. Jansenc 340*59599516SKenneth E. Jansenc.... Determine the left overs 341*59599516SKenneth E. Jansenc 342*59599516SKenneth E. Jansen m1 = mod(m,8) + 1 343*59599516SKenneth E. Jansen 344*59599516SKenneth E. Jansenc 345*59599516SKenneth E. Jansenc.... Do the small pieces 346*59599516SKenneth E. Jansenc 347*59599516SKenneth E. Jansen goto ( 8000, 1000, 2000, 3000, 4000, 5000, 6000, 7000 ) m1 348*59599516SKenneth E. Jansenc 349*59599516SKenneth E. Jansen1000 continue 350*59599516SKenneth E. Jansen tmp1 = 0 351*59599516SKenneth E. Jansen do i = 1, n 352*59599516SKenneth E. Jansen tmp1 = tmp1 + x(i,1) * y(i) 353*59599516SKenneth E. Jansen enddo 354*59599516SKenneth E. Jansen c(1) = tmp1 355*59599516SKenneth E. Jansen goto 8000 356*59599516SKenneth E. Jansenc 357*59599516SKenneth E. Jansen2000 continue 358*59599516SKenneth E. Jansen tmp1 = 0 359*59599516SKenneth E. Jansen tmp2 = 0 360*59599516SKenneth E. Jansen do i = 1, n 361*59599516SKenneth E. Jansen tmp1 = tmp1 + x(i,1) * y(i) 362*59599516SKenneth E. Jansen tmp2 = tmp2 + x(i,2) * y(i) 363*59599516SKenneth E. Jansen enddo 364*59599516SKenneth E. Jansen c(1) = tmp1 365*59599516SKenneth E. Jansen c(2) = tmp2 366*59599516SKenneth E. Jansen goto 8000 367*59599516SKenneth E. Jansenc 368*59599516SKenneth E. Jansen3000 continue 369*59599516SKenneth E. Jansen tmp1 = 0 370*59599516SKenneth E. Jansen tmp2 = 0 371*59599516SKenneth E. Jansen tmp3 = 0 372*59599516SKenneth E. Jansen do i = 1, n 373*59599516SKenneth E. Jansen tmp1 = tmp1 + x(i,1) * y(i) 374*59599516SKenneth E. Jansen tmp2 = tmp2 + x(i,2) * y(i) 375*59599516SKenneth E. Jansen tmp3 = tmp3 + x(i,3) * y(i) 376*59599516SKenneth E. Jansen enddo 377*59599516SKenneth E. Jansen c(1) = tmp1 378*59599516SKenneth E. Jansen c(2) = tmp2 379*59599516SKenneth E. Jansen c(3) = tmp3 380*59599516SKenneth E. Jansen goto 8000 381*59599516SKenneth E. Jansenc 382*59599516SKenneth E. Jansen4000 continue 383*59599516SKenneth E. Jansen tmp1 = 0 384*59599516SKenneth E. Jansen tmp2 = 0 385*59599516SKenneth E. Jansen tmp3 = 0 386*59599516SKenneth E. Jansen tmp4 = 0 387*59599516SKenneth E. Jansen do i = 1, n 388*59599516SKenneth E. Jansen tmp1 = tmp1 + x(i,1) * y(i) 389*59599516SKenneth E. Jansen tmp2 = tmp2 + x(i,2) * y(i) 390*59599516SKenneth E. Jansen tmp3 = tmp3 + x(i,3) * y(i) 391*59599516SKenneth E. Jansen tmp4 = tmp4 + x(i,4) * y(i) 392*59599516SKenneth E. Jansen enddo 393*59599516SKenneth E. Jansen c(1) = tmp1 394*59599516SKenneth E. Jansen c(2) = tmp2 395*59599516SKenneth E. Jansen c(3) = tmp3 396*59599516SKenneth E. Jansen c(4) = tmp4 397*59599516SKenneth E. Jansen goto 8000 398*59599516SKenneth E. Jansenc 399*59599516SKenneth E. Jansen5000 continue 400*59599516SKenneth E. Jansen tmp1 = 0 401*59599516SKenneth E. Jansen tmp2 = 0 402*59599516SKenneth E. Jansen tmp3 = 0 403*59599516SKenneth E. Jansen tmp4 = 0 404*59599516SKenneth E. Jansen tmp5 = 0 405*59599516SKenneth E. Jansen do i = 1, n 406*59599516SKenneth E. Jansen tmp1 = tmp1 + x(i,1) * y(i) 407*59599516SKenneth E. Jansen tmp2 = tmp2 + x(i,2) * y(i) 408*59599516SKenneth E. Jansen tmp3 = tmp3 + x(i,3) * y(i) 409*59599516SKenneth E. Jansen tmp4 = tmp4 + x(i,4) * y(i) 410*59599516SKenneth E. Jansen tmp5 = tmp5 + x(i,5) * y(i) 411*59599516SKenneth E. Jansen enddo 412*59599516SKenneth E. Jansen c(1) = tmp1 413*59599516SKenneth E. Jansen c(2) = tmp2 414*59599516SKenneth E. Jansen c(3) = tmp3 415*59599516SKenneth E. Jansen c(4) = tmp4 416*59599516SKenneth E. Jansen c(5) = tmp5 417*59599516SKenneth E. Jansen goto 8000 418*59599516SKenneth E. Jansenc 419*59599516SKenneth E. Jansen6000 continue 420*59599516SKenneth E. Jansen tmp1 = 0 421*59599516SKenneth E. Jansen tmp2 = 0 422*59599516SKenneth E. Jansen tmp3 = 0 423*59599516SKenneth E. Jansen tmp4 = 0 424*59599516SKenneth E. Jansen tmp5 = 0 425*59599516SKenneth E. Jansen tmp6 = 0 426*59599516SKenneth E. Jansen do i = 1, n 427*59599516SKenneth E. Jansen tmp1 = tmp1 + x(i,1) * y(i) 428*59599516SKenneth E. Jansen tmp2 = tmp2 + x(i,2) * y(i) 429*59599516SKenneth E. Jansen tmp3 = tmp3 + x(i,3) * y(i) 430*59599516SKenneth E. Jansen tmp4 = tmp4 + x(i,4) * y(i) 431*59599516SKenneth E. Jansen tmp5 = tmp5 + x(i,5) * y(i) 432*59599516SKenneth E. Jansen tmp6 = tmp6 + x(i,6) * y(i) 433*59599516SKenneth E. Jansen enddo 434*59599516SKenneth E. Jansen c(1) = tmp1 435*59599516SKenneth E. Jansen c(2) = tmp2 436*59599516SKenneth E. Jansen c(3) = tmp3 437*59599516SKenneth E. Jansen c(4) = tmp4 438*59599516SKenneth E. Jansen c(5) = tmp5 439*59599516SKenneth E. Jansen c(6) = tmp6 440*59599516SKenneth E. Jansen goto 8000 441*59599516SKenneth E. Jansenc 442*59599516SKenneth E. Jansen7000 continue 443*59599516SKenneth E. Jansen tmp1 = 0 444*59599516SKenneth E. Jansen tmp2 = 0 445*59599516SKenneth E. Jansen tmp3 = 0 446*59599516SKenneth E. Jansen tmp4 = 0 447*59599516SKenneth E. Jansen tmp5 = 0 448*59599516SKenneth E. Jansen tmp6 = 0 449*59599516SKenneth E. Jansen tmp7 = 0 450*59599516SKenneth E. Jansen do i = 1, n 451*59599516SKenneth E. Jansen tmp1 = tmp1 + x(i,1) * y(i) 452*59599516SKenneth E. Jansen tmp2 = tmp2 + x(i,2) * y(i) 453*59599516SKenneth E. Jansen tmp3 = tmp3 + x(i,3) * y(i) 454*59599516SKenneth E. Jansen tmp4 = tmp4 + x(i,4) * y(i) 455*59599516SKenneth E. Jansen tmp5 = tmp5 + x(i,5) * y(i) 456*59599516SKenneth E. Jansen tmp6 = tmp6 + x(i,6) * y(i) 457*59599516SKenneth E. Jansen tmp7 = tmp7 + x(i,7) * y(i) 458*59599516SKenneth E. Jansen enddo 459*59599516SKenneth E. Jansen c(1) = tmp1 460*59599516SKenneth E. Jansen c(2) = tmp2 461*59599516SKenneth E. Jansen c(3) = tmp3 462*59599516SKenneth E. Jansen c(4) = tmp4 463*59599516SKenneth E. Jansen c(5) = tmp5 464*59599516SKenneth E. Jansen c(6) = tmp6 465*59599516SKenneth E. Jansen c(7) = tmp7 466*59599516SKenneth E. Jansen goto 8000 467*59599516SKenneth E. Jansenc 468*59599516SKenneth E. Jansenc.... Do the remaining part 469*59599516SKenneth E. Jansenc 470*59599516SKenneth E. Jansen8000 continue 471*59599516SKenneth E. Jansenc 472*59599516SKenneth E. Jansen do j = m1, m, 8 473*59599516SKenneth E. Jansen tmp1 = 0 474*59599516SKenneth E. Jansen tmp2 = 0 475*59599516SKenneth E. Jansen tmp3 = 0 476*59599516SKenneth E. Jansen tmp4 = 0 477*59599516SKenneth E. Jansen tmp5 = 0 478*59599516SKenneth E. Jansen tmp6 = 0 479*59599516SKenneth E. Jansen tmp7 = 0 480*59599516SKenneth E. Jansen tmp8 = 0 481*59599516SKenneth E. Jansen do i = 1, n 482*59599516SKenneth E. Jansen tmp1 = tmp1 + x(i,j+0) * y(i) 483*59599516SKenneth E. Jansen tmp2 = tmp2 + x(i,j+1) * y(i) 484*59599516SKenneth E. Jansen tmp3 = tmp3 + x(i,j+2) * y(i) 485*59599516SKenneth E. Jansen tmp4 = tmp4 + x(i,j+3) * y(i) 486*59599516SKenneth E. Jansen tmp5 = tmp5 + x(i,j+4) * y(i) 487*59599516SKenneth E. Jansen tmp6 = tmp6 + x(i,j+5) * y(i) 488*59599516SKenneth E. Jansen tmp7 = tmp7 + x(i,j+6) * y(i) 489*59599516SKenneth E. Jansen tmp8 = tmp8 + x(i,j+7) * y(i) 490*59599516SKenneth E. Jansen enddo 491*59599516SKenneth E. Jansen c(j+0) = tmp1 492*59599516SKenneth E. Jansen c(j+1) = tmp2 493*59599516SKenneth E. Jansen c(j+2) = tmp3 494*59599516SKenneth E. Jansen c(j+3) = tmp4 495*59599516SKenneth E. Jansen c(j+4) = tmp5 496*59599516SKenneth E. Jansen c(j+5) = tmp6 497*59599516SKenneth E. Jansen c(j+6) = tmp7 498*59599516SKenneth E. Jansen c(j+7) = tmp8 499*59599516SKenneth E. Jansen enddo 500*59599516SKenneth E. Jansenc 501*59599516SKenneth E. Jansen return 502*59599516SKenneth E. Jansen end 503*59599516SKenneth E. Jansenc 504*59599516SKenneth E. Jansenc-------------------------- 505*59599516SKenneth E. Jansenc fMtxBlkDaxpy 506*59599516SKenneth E. Jansenc Farzin's implementation 507*59599516SKenneth E. Jansenc row and column exchanged 508*59599516SKenneth E. Jansenc-------------------------- 509*59599516SKenneth E. Jansenc 510*59599516SKenneth E. Jansen subroutine fMtxBlkDaxpy( x, y, c, m, n ) 511*59599516SKenneth E. Jansenc 512*59599516SKenneth E. Jansenc.... Data declaration 513*59599516SKenneth E. Jansenc 514*59599516SKenneth E. Jansen implicit none 515*59599516SKenneth E. Jansen integer m, n 516*59599516SKenneth E. Jansen real*8 x(n,m), y(n), c(m) 517*59599516SKenneth E. Jansenc 518*59599516SKenneth E. Jansen real*8 tmp1, tmp2, tmp3, tmp4 519*59599516SKenneth E. Jansen real*8 tmp5, tmp6, tmp7, tmp8 520*59599516SKenneth E. Jansen integer i, j, m1 521*59599516SKenneth E. Jansenc 522*59599516SKenneth E. Jansenc.... Determine the left overs 523*59599516SKenneth E. Jansenc 524*59599516SKenneth E. Jansen m1 = mod(m,8) + 1 525*59599516SKenneth E. Jansenc 526*59599516SKenneth E. Jansenc.... Do the small pieces 527*59599516SKenneth E. Jansenc 528*59599516SKenneth E. Jansen goto ( 8000, 1000, 2000, 3000, 4000, 5000, 6000, 7000 ) m1 529*59599516SKenneth E. Jansenc 530*59599516SKenneth E. Jansen1000 continue 531*59599516SKenneth E. Jansen tmp1 = c(1) 532*59599516SKenneth E. Jansen do i = 1, n 533*59599516SKenneth E. Jansen y(i) = y(i) 534*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) 535*59599516SKenneth E. Jansen enddo 536*59599516SKenneth E. Jansen goto 8000 537*59599516SKenneth E. Jansenc 538*59599516SKenneth E. Jansen2000 continue 539*59599516SKenneth E. Jansen tmp1 = c(1) 540*59599516SKenneth E. Jansen tmp2 = c(2) 541*59599516SKenneth E. Jansen do i = 1, n 542*59599516SKenneth E. Jansen y(i) = y(i) 543*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) + tmp2 * x(i,2) 544*59599516SKenneth E. Jansen enddo 545*59599516SKenneth E. Jansen goto 8000 546*59599516SKenneth E. Jansenc 547*59599516SKenneth E. Jansen3000 continue 548*59599516SKenneth E. Jansen tmp1 = c(1) 549*59599516SKenneth E. Jansen tmp2 = c(2) 550*59599516SKenneth E. Jansen tmp3 = c(3) 551*59599516SKenneth E. Jansen 552*59599516SKenneth E. Jansen do i = 1, n 553*59599516SKenneth E. Jansen y(i) = y(i) 554*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) + tmp2 * x(i,2) 555*59599516SKenneth E. Jansen 2 + tmp3 * x(i,3) 556*59599516SKenneth E. Jansen enddo 557*59599516SKenneth E. Jansen goto 8000 558*59599516SKenneth E. Jansenc 559*59599516SKenneth E. Jansen4000 continue 560*59599516SKenneth E. Jansen tmp1 = c(1) 561*59599516SKenneth E. Jansen tmp2 = c(2) 562*59599516SKenneth E. Jansen tmp3 = c(3) 563*59599516SKenneth E. Jansen tmp4 = c(4) 564*59599516SKenneth E. Jansen do i = 1, n 565*59599516SKenneth E. Jansen y(i) = y(i) 566*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) + tmp2 * x(i,2) 567*59599516SKenneth E. Jansen 2 + tmp3 * x(i,3) + tmp4 * x(i,4) 568*59599516SKenneth E. Jansen enddo 569*59599516SKenneth E. Jansen goto 8000 570*59599516SKenneth E. Jansenc 571*59599516SKenneth E. Jansen5000 continue 572*59599516SKenneth E. Jansen tmp1 = c(1) 573*59599516SKenneth E. Jansen tmp2 = c(2) 574*59599516SKenneth E. Jansen tmp3 = c(3) 575*59599516SKenneth E. Jansen tmp4 = c(4) 576*59599516SKenneth E. Jansen tmp5 = c(5) 577*59599516SKenneth E. Jansen do i = 1, n 578*59599516SKenneth E. Jansen y(i) = y(i) 579*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) + tmp2 * x(i,2) 580*59599516SKenneth E. Jansen 2 + tmp3 * x(i,3) + tmp4 * x(i,4) 581*59599516SKenneth E. Jansen 3 + tmp5 * x(i,5) 582*59599516SKenneth E. Jansen enddo 583*59599516SKenneth E. Jansen goto 8000 584*59599516SKenneth E. Jansenc 585*59599516SKenneth E. Jansen6000 continue 586*59599516SKenneth E. Jansen tmp1 = c(1) 587*59599516SKenneth E. Jansen tmp2 = c(2) 588*59599516SKenneth E. Jansen tmp3 = c(3) 589*59599516SKenneth E. Jansen tmp4 = c(4) 590*59599516SKenneth E. Jansen tmp5 = c(5) 591*59599516SKenneth E. Jansen tmp6 = c(6) 592*59599516SKenneth E. Jansen do i = 1, n 593*59599516SKenneth E. Jansen y(i) = y(i) 594*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) + tmp2 * x(i,2) 595*59599516SKenneth E. Jansen 2 + tmp3 * x(i,3) + tmp4 * x(i,4) 596*59599516SKenneth E. Jansen 3 + tmp5 * x(i,5) + tmp6 * x(i,6) 597*59599516SKenneth E. Jansen enddo 598*59599516SKenneth E. Jansen goto 8000 599*59599516SKenneth E. Jansenc 600*59599516SKenneth E. Jansen7000 continue 601*59599516SKenneth E. Jansen tmp1 = c(1) 602*59599516SKenneth E. Jansen tmp2 = c(2) 603*59599516SKenneth E. Jansen tmp3 = c(3) 604*59599516SKenneth E. Jansen tmp4 = c(4) 605*59599516SKenneth E. Jansen tmp5 = c(5) 606*59599516SKenneth E. Jansen tmp6 = c(6) 607*59599516SKenneth E. Jansen tmp7 = c(7) 608*59599516SKenneth E. Jansen do i = 1, n 609*59599516SKenneth E. Jansen y(i) = y(i) 610*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) + tmp2 * x(i,2) 611*59599516SKenneth E. Jansen 2 + tmp3 * x(i,3) + tmp4 * x(i,4) 612*59599516SKenneth E. Jansen 3 + tmp5 * x(i,5) + tmp6 * x(i,6) 613*59599516SKenneth E. Jansen 4 + tmp7 * x(i,7) 614*59599516SKenneth E. Jansen enddo 615*59599516SKenneth E. Jansen goto 8000 616*59599516SKenneth E. Jansenc 617*59599516SKenneth E. Jansenc.... Do the remaining part 618*59599516SKenneth E. Jansenc 619*59599516SKenneth E. Jansen8000 continue 620*59599516SKenneth E. Jansenc 621*59599516SKenneth E. Jansen do j = m1, m, 8 622*59599516SKenneth E. Jansen tmp1 = c(j+0) 623*59599516SKenneth E. Jansen tmp2 = c(j+1) 624*59599516SKenneth E. Jansen tmp3 = c(j+2) 625*59599516SKenneth E. Jansen tmp4 = c(j+3) 626*59599516SKenneth E. Jansen tmp5 = c(j+4) 627*59599516SKenneth E. Jansen tmp6 = c(j+5) 628*59599516SKenneth E. Jansen tmp7 = c(j+6) 629*59599516SKenneth E. Jansen tmp8 = c(j+7) 630*59599516SKenneth E. Jansen do i = 1, n 631*59599516SKenneth E. Jansen y(i) = y(i) 632*59599516SKenneth E. Jansen 1 + tmp1 * x(i,j+0) + tmp2 * x(i,j+1) 633*59599516SKenneth E. Jansen 2 + tmp3 * x(i,j+2) + tmp4 * x(i,j+3) 634*59599516SKenneth E. Jansen 3 + tmp5 * x(i,j+4) + tmp6 * x(i,j+5) 635*59599516SKenneth E. Jansen 4 + tmp7 * x(i,j+6) + tmp8 * x(i,j+7) 636*59599516SKenneth E. Jansen enddo 637*59599516SKenneth E. Jansen enddo 638*59599516SKenneth E. Jansenc 639*59599516SKenneth E. Jansen return 640*59599516SKenneth E. Jansen end 641*59599516SKenneth E. Jansenc 642*59599516SKenneth E. Jansenc-------------------------- 643*59599516SKenneth E. Jansenc fMtxBlkDyeax 644*59599516SKenneth E. Jansenc Farzin's implementation 645*59599516SKenneth E. Jansenc row and column exchanged 646*59599516SKenneth E. Jansenc-------------------------- 647*59599516SKenneth E. Jansenc 648*59599516SKenneth E. Jansen subroutine fMtxBlkDyeax( x, y, c, m, n ) 649*59599516SKenneth E. Jansenc 650*59599516SKenneth E. Jansenc.... Data declaration 651*59599516SKenneth E. Jansenc 652*59599516SKenneth E. Jansen implicit none 653*59599516SKenneth E. Jansen integer m, n 654*59599516SKenneth E. Jansen real*8 x(n,m), y(n), c(m) 655*59599516SKenneth E. Jansenc 656*59599516SKenneth E. Jansen real*8 tmp1, tmp2, tmp3, tmp4 657*59599516SKenneth E. Jansen real*8 tmp5, tmp6, tmp7, tmp8 658*59599516SKenneth E. Jansen integer i, j, m1 659*59599516SKenneth E. Jansenc 660*59599516SKenneth E. Jansenc.... Determine the left overs 661*59599516SKenneth E. Jansenc 662*59599516SKenneth E. Jansen m1 = mod(m,8) + 1 663*59599516SKenneth E. Jansenc 664*59599516SKenneth E. Jansenc.... Do the small pieces 665*59599516SKenneth E. Jansenc 666*59599516SKenneth E. Jansen goto ( 8000, 1000, 2000, 3000, 4000, 5000, 6000, 7000 ) m1 667*59599516SKenneth E. Jansenc 668*59599516SKenneth E. Jansen1000 continue 669*59599516SKenneth E. Jansen tmp1 = c(1) 670*59599516SKenneth E. Jansen do i = 1, n 671*59599516SKenneth E. Jansen y(i) = 672*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) 673*59599516SKenneth E. Jansen enddo 674*59599516SKenneth E. Jansen goto 8001 675*59599516SKenneth E. Jansenc 676*59599516SKenneth E. Jansen2000 continue 677*59599516SKenneth E. Jansen tmp1 = c(1) 678*59599516SKenneth E. Jansen tmp2 = c(2) 679*59599516SKenneth E. Jansen do i = 1, n 680*59599516SKenneth E. Jansen y(i) = 681*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) + tmp2 * x(i,2) 682*59599516SKenneth E. Jansen enddo 683*59599516SKenneth E. Jansen goto 8001 684*59599516SKenneth E. Jansenc 685*59599516SKenneth E. Jansen3000 continue 686*59599516SKenneth E. Jansen tmp1 = c(1) 687*59599516SKenneth E. Jansen tmp2 = c(2) 688*59599516SKenneth E. Jansen tmp3 = c(3) 689*59599516SKenneth E. Jansen do i = 1, n 690*59599516SKenneth E. Jansen y(i) = 691*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) + tmp2 * x(i,2) 692*59599516SKenneth E. Jansen 2 + tmp3 * x(i,3) 693*59599516SKenneth E. Jansen enddo 694*59599516SKenneth E. Jansen goto 8001 695*59599516SKenneth E. Jansenc 696*59599516SKenneth E. Jansen4000 continue 697*59599516SKenneth E. Jansen tmp1 = c(1) 698*59599516SKenneth E. Jansen tmp2 = c(2) 699*59599516SKenneth E. Jansen tmp3 = c(3) 700*59599516SKenneth E. Jansen tmp4 = c(4) 701*59599516SKenneth E. Jansen do i = 1, n 702*59599516SKenneth E. Jansen y(i) = 703*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) + tmp2 * x(i,2) 704*59599516SKenneth E. Jansen 2 + tmp3 * x(i,3) + tmp4 * x(i,4) 705*59599516SKenneth E. Jansen enddo 706*59599516SKenneth E. Jansen goto 8001 707*59599516SKenneth E. Jansenc 708*59599516SKenneth E. Jansen5000 continue 709*59599516SKenneth E. Jansen tmp1 = c(1) 710*59599516SKenneth E. Jansen tmp2 = c(2) 711*59599516SKenneth E. Jansen tmp3 = c(3) 712*59599516SKenneth E. Jansen tmp4 = c(4) 713*59599516SKenneth E. Jansen tmp5 = c(5) 714*59599516SKenneth E. Jansen do i = 1, n 715*59599516SKenneth E. Jansen y(i) = 716*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) + tmp2 * x(i,2) 717*59599516SKenneth E. Jansen 2 + tmp3 * x(i,3) + tmp4 * x(i,4) 718*59599516SKenneth E. Jansen 3 + tmp5 * x(i,5) 719*59599516SKenneth E. Jansen enddo 720*59599516SKenneth E. Jansen goto 8001 721*59599516SKenneth E. Jansenc 722*59599516SKenneth E. Jansen6000 continue 723*59599516SKenneth E. Jansen tmp1 = c(1) 724*59599516SKenneth E. Jansen tmp2 = c(2) 725*59599516SKenneth E. Jansen tmp3 = c(3) 726*59599516SKenneth E. Jansen tmp4 = c(4) 727*59599516SKenneth E. Jansen tmp5 = c(5) 728*59599516SKenneth E. Jansen tmp6 = c(6) 729*59599516SKenneth E. Jansen do i = 1, n 730*59599516SKenneth E. Jansen y(i) = 731*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) + tmp2 * x(i,2) 732*59599516SKenneth E. Jansen 2 + tmp3 * x(i,3) + tmp4 * x(i,4) 733*59599516SKenneth E. Jansen 3 + tmp5 * x(i,5) + tmp6 * x(i,6) 734*59599516SKenneth E. Jansen enddo 735*59599516SKenneth E. Jansen goto 8001 736*59599516SKenneth E. Jansenc 737*59599516SKenneth E. Jansen7000 continue 738*59599516SKenneth E. Jansen tmp1 = c(1) 739*59599516SKenneth E. Jansen tmp2 = c(2) 740*59599516SKenneth E. Jansen tmp3 = c(3) 741*59599516SKenneth E. Jansen tmp4 = c(4) 742*59599516SKenneth E. Jansen tmp5 = c(5) 743*59599516SKenneth E. Jansen tmp6 = c(6) 744*59599516SKenneth E. Jansen tmp7 = c(7) 745*59599516SKenneth E. Jansen do i = 1, n 746*59599516SKenneth E. Jansen y(i) = 747*59599516SKenneth E. Jansen 1 + tmp1 * x(i,1) + tmp2 * x(i,2) 748*59599516SKenneth E. Jansen 2 + tmp3 * x(i,3) + tmp4 * x(i,4) 749*59599516SKenneth E. Jansen 3 + tmp5 * x(i,5) + tmp6 * x(i,6) 750*59599516SKenneth E. Jansen 4 + tmp7 * x(i,7) 751*59599516SKenneth E. Jansen enddo 752*59599516SKenneth E. Jansen goto 8001 753*59599516SKenneth E. Jansenc 754*59599516SKenneth E. Jansen8000 continue 755*59599516SKenneth E. Jansen do i = 1, n 756*59599516SKenneth E. Jansen y(i) = 0 757*59599516SKenneth E. Jansen enddo 758*59599516SKenneth E. Jansen goto 8001 759*59599516SKenneth E. Jansenc 760*59599516SKenneth E. Jansenc.... Do the remaining part 761*59599516SKenneth E. Jansenc 762*59599516SKenneth E. Jansen8001 continue 763*59599516SKenneth E. Jansenc 764*59599516SKenneth E. Jansen do j = m1, m, 8 765*59599516SKenneth E. Jansen tmp1 = c(j+0) 766*59599516SKenneth E. Jansen tmp2 = c(j+1) 767*59599516SKenneth E. Jansen tmp3 = c(j+2) 768*59599516SKenneth E. Jansen tmp4 = c(j+3) 769*59599516SKenneth E. Jansen tmp5 = c(j+4) 770*59599516SKenneth E. Jansen tmp6 = c(j+5) 771*59599516SKenneth E. Jansen tmp7 = c(j+6) 772*59599516SKenneth E. Jansen tmp8 = c(j+7) 773*59599516SKenneth E. Jansen do i = 1, n 774*59599516SKenneth E. Jansen y(i) = y(i) 775*59599516SKenneth E. Jansen 1 + tmp1 * x(i,j+0) + tmp2 * x(i,j+1) 776*59599516SKenneth E. Jansen 2 + tmp3 * x(i,j+2) + tmp4 * x(i,j+3) 777*59599516SKenneth E. Jansen 3 + tmp5 * x(i,j+4) + tmp6 * x(i,j+5) 778*59599516SKenneth E. Jansen 4 + tmp7 * x(i,j+6) + tmp8 * x(i,j+7) 779*59599516SKenneth E. Jansen enddo 780*59599516SKenneth E. Jansen enddo 781*59599516SKenneth E. Jansenc 782*59599516SKenneth E. Jansen return 783*59599516SKenneth E. Jansen end 784*59599516SKenneth E. Jansenc 785*59599516SKenneth E. Jansenc-------------------------- 786*59599516SKenneth E. Jansenc fMtxBlkDmaxpy 787*59599516SKenneth E. Jansenc Farzin's implementation 788*59599516SKenneth E. Jansenc row and column exchanged 789*59599516SKenneth E. Jansenc-------------------------- 790*59599516SKenneth E. Jansenc 791*59599516SKenneth E. Jansen subroutine fMtxBlkDmaxpy( x, y, c, m, n ) 792*59599516SKenneth E. Jansenc 793*59599516SKenneth E. Jansenc.... Data declaration 794*59599516SKenneth E. Jansenc 795*59599516SKenneth E. Jansen implicit none 796*59599516SKenneth E. Jansen integer m, n 797*59599516SKenneth E. Jansen real*8 x(n,m), y(n), c(m) 798*59599516SKenneth E. Jansenc 799*59599516SKenneth E. Jansen real*8 tmp1, tmp2, tmp3, tmp4 800*59599516SKenneth E. Jansen real*8 tmp5, tmp6, tmp7, tmp8 801*59599516SKenneth E. Jansen integer i, j, m1 802*59599516SKenneth E. Jansenc 803*59599516SKenneth E. Jansenc.... Determine the left overs 804*59599516SKenneth E. Jansenc 805*59599516SKenneth E. Jansen m1 = mod(m,8) + 1 806*59599516SKenneth E. Jansenc 807*59599516SKenneth E. Jansenc.... Do the small pieces 808*59599516SKenneth E. Jansenc 809*59599516SKenneth E. Jansen goto ( 8000, 1000, 2000, 3000, 4000, 5000, 6000, 7000 ) m1 810*59599516SKenneth E. Jansenc 811*59599516SKenneth E. Jansen1000 continue 812*59599516SKenneth E. Jansen tmp1 = c(1) 813*59599516SKenneth E. Jansen do i = 1, n 814*59599516SKenneth E. Jansen y(i) = y(i) 815*59599516SKenneth E. Jansen 1 - tmp1 * x(i,1) 816*59599516SKenneth E. Jansen enddo 817*59599516SKenneth E. Jansen goto 8000 818*59599516SKenneth E. Jansenc 819*59599516SKenneth E. Jansen2000 continue 820*59599516SKenneth E. Jansen tmp1 = c(1) 821*59599516SKenneth E. Jansen tmp2 = c(2) 822*59599516SKenneth E. Jansen do i = 1, n 823*59599516SKenneth E. Jansen y(i) = y(i) 824*59599516SKenneth E. Jansen 1 - tmp1 * x(i,1) - tmp2 * x(i,2) 825*59599516SKenneth E. Jansen enddo 826*59599516SKenneth E. Jansen goto 8000 827*59599516SKenneth E. Jansenc 828*59599516SKenneth E. Jansen3000 continue 829*59599516SKenneth E. Jansen tmp1 = c(1) 830*59599516SKenneth E. Jansen tmp2 = c(2) 831*59599516SKenneth E. Jansen tmp3 = c(3) 832*59599516SKenneth E. Jansen do i = 1, n 833*59599516SKenneth E. Jansen y(i) = y(i) 834*59599516SKenneth E. Jansen 1 - tmp1 * x(i,1) - tmp2 * x(i,2) 835*59599516SKenneth E. Jansen 2 - tmp3 * x(i,3) 836*59599516SKenneth E. Jansen enddo 837*59599516SKenneth E. Jansen goto 8000 838*59599516SKenneth E. Jansenc 839*59599516SKenneth E. Jansen4000 continue 840*59599516SKenneth E. Jansen tmp1 = c(1) 841*59599516SKenneth E. Jansen tmp2 = c(2) 842*59599516SKenneth E. Jansen tmp3 = c(3) 843*59599516SKenneth E. Jansen tmp4 = c(4) 844*59599516SKenneth E. Jansen do i = 1, n 845*59599516SKenneth E. Jansen y(i) = y(i) 846*59599516SKenneth E. Jansen 1 - tmp1 * x(i,1) - tmp2 * x(i,2) 847*59599516SKenneth E. Jansen 2 - tmp3 * x(i,3) - tmp4 * x(i,4) 848*59599516SKenneth E. Jansen enddo 849*59599516SKenneth E. Jansen goto 8000 850*59599516SKenneth E. Jansenc 851*59599516SKenneth E. Jansen5000 continue 852*59599516SKenneth E. Jansen tmp1 = c(1) 853*59599516SKenneth E. Jansen tmp2 = c(2) 854*59599516SKenneth E. Jansen tmp3 = c(3) 855*59599516SKenneth E. Jansen tmp4 = c(4) 856*59599516SKenneth E. Jansen tmp5 = c(5) 857*59599516SKenneth E. Jansen do i = 1, n 858*59599516SKenneth E. Jansen y(i) = y(i) 859*59599516SKenneth E. Jansen 1 - tmp1 * x(i,1) - tmp2 * x(i,2) 860*59599516SKenneth E. Jansen 2 - tmp3 * x(i,3) - tmp4 * x(i,4) 861*59599516SKenneth E. Jansen 3 - tmp5 * x(i,5) 862*59599516SKenneth E. Jansen enddo 863*59599516SKenneth E. Jansen goto 8000 864*59599516SKenneth E. Jansenc 865*59599516SKenneth E. Jansen6000 continue 866*59599516SKenneth E. Jansen tmp1 = c(1) 867*59599516SKenneth E. Jansen tmp2 = c(2) 868*59599516SKenneth E. Jansen tmp3 = c(3) 869*59599516SKenneth E. Jansen tmp4 = c(4) 870*59599516SKenneth E. Jansen tmp5 = c(5) 871*59599516SKenneth E. Jansen tmp6 = c(6) 872*59599516SKenneth E. Jansen do i = 1, n 873*59599516SKenneth E. Jansen y(i) = y(i) 874*59599516SKenneth E. Jansen 1 - tmp1 * x(i,1) - tmp2 * x(i,2) 875*59599516SKenneth E. Jansen 2 - tmp3 * x(i,3) - tmp4 * x(i,4) 876*59599516SKenneth E. Jansen 3 - tmp5 * x(i,5) - tmp6 * x(i,6) 877*59599516SKenneth E. Jansen enddo 878*59599516SKenneth E. Jansen goto 8000 879*59599516SKenneth E. Jansen 880*59599516SKenneth E. Jansen7000 continue 881*59599516SKenneth E. Jansen tmp1 = c(1) 882*59599516SKenneth E. Jansen tmp2 = c(2) 883*59599516SKenneth E. Jansen tmp3 = c(3) 884*59599516SKenneth E. Jansen tmp4 = c(4) 885*59599516SKenneth E. Jansen tmp5 = c(5) 886*59599516SKenneth E. Jansen tmp6 = c(6) 887*59599516SKenneth E. Jansen tmp7 = c(7) 888*59599516SKenneth E. Jansen do i = 1, n 889*59599516SKenneth E. Jansen y(i) = y(i) 890*59599516SKenneth E. Jansen 1 - tmp1 * x(i,1) - tmp2 * x(i,2) 891*59599516SKenneth E. Jansen 2 - tmp3 * x(i,3) - tmp4 * x(i,4) 892*59599516SKenneth E. Jansen 3 - tmp5 * x(i,5) - tmp6 * x(i,6) 893*59599516SKenneth E. Jansen 4 - tmp7 * x(i,7) 894*59599516SKenneth E. Jansen enddo 895*59599516SKenneth E. Jansen goto 8000 896*59599516SKenneth E. Jansenc 897*59599516SKenneth E. Jansenc.... Do the remaining part 898*59599516SKenneth E. Jansenc 899*59599516SKenneth E. Jansen8000 continue 900*59599516SKenneth E. Jansenc 901*59599516SKenneth E. Jansen do j = m1, m, 8 902*59599516SKenneth E. Jansen tmp1 = c(j+0) 903*59599516SKenneth E. Jansen tmp2 = c(j+1) 904*59599516SKenneth E. Jansen tmp3 = c(j+2) 905*59599516SKenneth E. Jansen tmp4 = c(j+3) 906*59599516SKenneth E. Jansen tmp5 = c(j+4) 907*59599516SKenneth E. Jansen tmp6 = c(j+5) 908*59599516SKenneth E. Jansen tmp7 = c(j+6) 909*59599516SKenneth E. Jansen tmp8 = c(j+7) 910*59599516SKenneth E. Jansen do i = 1, n 911*59599516SKenneth E. Jansen y(i) = y(i) 912*59599516SKenneth E. Jansen 1 - tmp1 * x(i,j+0) - tmp2 * x(i,j+1) 913*59599516SKenneth E. Jansen 2 - tmp3 * x(i,j+2) - tmp4 * x(i,j+3) 914*59599516SKenneth E. Jansen 3 - tmp5 * x(i,j+4) - tmp6 * x(i,j+5) 915*59599516SKenneth E. Jansen 4 - tmp7 * x(i,j+6) - tmp8 * x(i,j+7) 916*59599516SKenneth E. Jansen enddo 917*59599516SKenneth E. Jansen enddo 918*59599516SKenneth E. Jansenc 919*59599516SKenneth E. Jansen return 920*59599516SKenneth E. Jansen end 921*59599516SKenneth E. Jansenc 922*59599516SKenneth E. Jansenc-------------------------- 923*59599516SKenneth E. Jansenc fMtxVdimVecCp 924*59599516SKenneth E. Jansenc Farzin's implementation 925*59599516SKenneth E. Jansenc row and column exchanged 926*59599516SKenneth E. Jansenc-------------------------- 927*59599516SKenneth E. Jansenc 928*59599516SKenneth E. Jansen subroutine fMtxVdimVecCp( a, b, na, nb, m, n ) 929*59599516SKenneth E. Jansenc 930*59599516SKenneth E. Jansenc.... Data declaration 931*59599516SKenneth E. Jansenc 932*59599516SKenneth E. Jansen implicit none 933*59599516SKenneth E. Jansen integer na, nb, m, n 934*59599516SKenneth E. Jansen real*8 a(n,na), b(n,nb) 935*59599516SKenneth E. Jansenc 936*59599516SKenneth E. Jansen integer i, j 937*59599516SKenneth E. Jansenc 938*59599516SKenneth E. Jansenc.... Do the work 939*59599516SKenneth E. Jansenc 940*59599516SKenneth E. Jansen if ( m .eq. 1 ) then 941*59599516SKenneth E. Jansen 942*59599516SKenneth E. Jansen do i = 1, n 943*59599516SKenneth E. Jansen b(i,1) = a(i,1) 944*59599516SKenneth E. Jansen enddo 945*59599516SKenneth E. Jansen 946*59599516SKenneth E. Jansen else if ( m .eq. 2 ) then 947*59599516SKenneth E. Jansen 948*59599516SKenneth E. Jansen do i = 1, n 949*59599516SKenneth E. Jansen b(i,1) = a(i,1) 950*59599516SKenneth E. Jansen b(i,2) = a(i,2) 951*59599516SKenneth E. Jansen enddo 952*59599516SKenneth E. Jansen 953*59599516SKenneth E. Jansen else if ( m .eq. 3 ) then 954*59599516SKenneth E. Jansen 955*59599516SKenneth E. Jansen do i = 1, n 956*59599516SKenneth E. Jansen b(i,1) = a(i,1) 957*59599516SKenneth E. Jansen b(i,2) = a(i,2) 958*59599516SKenneth E. Jansen b(i,3) = a(i,3) 959*59599516SKenneth E. Jansen enddo 960*59599516SKenneth E. Jansen 961*59599516SKenneth E. Jansen else if ( m .eq. 4 ) then 962*59599516SKenneth E. Jansen 963*59599516SKenneth E. Jansen do i = 1, n 964*59599516SKenneth E. Jansen b(i,1) = a(i,1) 965*59599516SKenneth E. Jansen b(i,2) = a(i,2) 966*59599516SKenneth E. Jansen b(i,3) = a(i,3) 967*59599516SKenneth E. Jansen b(i,4) = a(i,4) 968*59599516SKenneth E. Jansen enddo 969*59599516SKenneth E. Jansen 970*59599516SKenneth E. Jansen else 971*59599516SKenneth E. Jansen 972*59599516SKenneth E. Jansen do i = 1, n 973*59599516SKenneth E. Jansen do j = 1, m 974*59599516SKenneth E. Jansen b(i,j) = a(i,j) 975*59599516SKenneth E. Jansen enddo 976*59599516SKenneth E. Jansen enddo 977*59599516SKenneth E. Jansen 978*59599516SKenneth E. Jansen endif 979*59599516SKenneth E. Jansenc 980*59599516SKenneth E. Jansen return 981*59599516SKenneth E. Jansen end 982*59599516SKenneth E. Jansenc 983*59599516SKenneth E. Jansenc-------------------------- 984*59599516SKenneth E. Jansenc fMtxVdimVecDot2 985*59599516SKenneth E. Jansenc Farzin's implementation 986*59599516SKenneth E. Jansenc row and column exchanged 987*59599516SKenneth E. Jansenc-------------------------- 988*59599516SKenneth E. Jansenc 989*59599516SKenneth E. Jansen subroutine fMtxVdimVecDot2( a, b, c, na, nb, m, n ) 990*59599516SKenneth E. Jansenc 991*59599516SKenneth E. Jansenc.... Data declaration 992*59599516SKenneth E. Jansenc 993*59599516SKenneth E. Jansen implicit none 994*59599516SKenneth E. Jansen integer na, nb, m, n 995*59599516SKenneth E. Jansen real*8 a(n,na), b(n,nb), c(m) 996*59599516SKenneth E. Jansenc 997*59599516SKenneth E. Jansen integer i, j 998*59599516SKenneth E. Jansenc 999*59599516SKenneth E. Jansenc.... Do the work 1000*59599516SKenneth E. Jansenc 1001*59599516SKenneth E. Jansen if ( m .eq. 1 ) then 1002*59599516SKenneth E. Jansen 1003*59599516SKenneth E. Jansen c(1) = 0 1004*59599516SKenneth E. Jansen do i = 1, n 1005*59599516SKenneth E. Jansen c(1) = c(1) + a(i,1) * b(i,1) 1006*59599516SKenneth E. Jansen enddo 1007*59599516SKenneth E. Jansen 1008*59599516SKenneth E. Jansen else if ( m .eq. 2 ) then 1009*59599516SKenneth E. Jansen 1010*59599516SKenneth E. Jansen c(1) = 0 1011*59599516SKenneth E. Jansen c(2) = 0 1012*59599516SKenneth E. Jansen do i = 1, n 1013*59599516SKenneth E. Jansen c(1) = c(1) + a(i,1) * b(i,1) 1014*59599516SKenneth E. Jansen c(2) = c(2) + a(i,2) * b(i,2) 1015*59599516SKenneth E. Jansen enddo 1016*59599516SKenneth E. Jansen 1017*59599516SKenneth E. Jansen else if ( m .eq. 3 ) then 1018*59599516SKenneth E. Jansen 1019*59599516SKenneth E. Jansen c(1) = 0 1020*59599516SKenneth E. Jansen c(2) = 0 1021*59599516SKenneth E. Jansen c(3) = 0 1022*59599516SKenneth E. Jansen do i = 1, n 1023*59599516SKenneth E. Jansen c(1) = c(1) + a(i,1) * b(i,1) 1024*59599516SKenneth E. Jansen c(2) = c(2) + a(i,2) * b(i,2) 1025*59599516SKenneth E. Jansen c(3) = c(3) + a(i,3) * b(i,3) 1026*59599516SKenneth E. Jansen enddo 1027*59599516SKenneth E. Jansen 1028*59599516SKenneth E. Jansen else if ( m .eq. 4 ) then 1029*59599516SKenneth E. Jansen 1030*59599516SKenneth E. Jansen c(1) = 0 1031*59599516SKenneth E. Jansen c(2) = 0 1032*59599516SKenneth E. Jansen c(3) = 0 1033*59599516SKenneth E. Jansen c(4) = 0 1034*59599516SKenneth E. Jansen do i = 1, n 1035*59599516SKenneth E. Jansen c(1) = c(1) + a(i,1) * b(i,1) 1036*59599516SKenneth E. Jansen c(2) = c(2) + a(i,2) * b(i,2) 1037*59599516SKenneth E. Jansen c(3) = c(3) + a(i,3) * b(i,3) 1038*59599516SKenneth E. Jansen c(4) = c(4) + a(i,4) * b(i,4) 1039*59599516SKenneth E. Jansen enddo 1040*59599516SKenneth E. Jansen 1041*59599516SKenneth E. Jansen else 1042*59599516SKenneth E. Jansen 1043*59599516SKenneth E. Jansen do j = 1, m 1044*59599516SKenneth E. Jansen c(j) = 0 1045*59599516SKenneth E. Jansen do i = 1, n 1046*59599516SKenneth E. Jansen c(j) = c(j) + a(i,j) * b(i,j) 1047*59599516SKenneth E. Jansen enddo 1048*59599516SKenneth E. Jansen enddo 1049*59599516SKenneth E. Jansen 1050*59599516SKenneth E. Jansen endif 1051*59599516SKenneth E. Jansenc 1052*59599516SKenneth E. Jansen return 1053*59599516SKenneth E. Jansen end 1054*59599516SKenneth E. Jansenc 1055*59599516SKenneth E. Jansenc-------------------------- 1056*59599516SKenneth E. Jansenc fMtxVdimVecDaxpy 1057*59599516SKenneth E. Jansenc Farzin's implementation 1058*59599516SKenneth E. Jansenc row and column exchanged 1059*59599516SKenneth E. Jansenc-------------------------- 1060*59599516SKenneth E. Jansenc 1061*59599516SKenneth E. Jansen subroutine fMtxVdimVecDaxpy( a, b, c, na, nb, m, n ) 1062*59599516SKenneth E. Jansenc 1063*59599516SKenneth E. Jansenc.... Data declaration 1064*59599516SKenneth E. Jansenc 1065*59599516SKenneth E. Jansen implicit none 1066*59599516SKenneth E. Jansen integer na, nb, m, n 1067*59599516SKenneth E. Jansen real*8 a(n,na), b(n,nb), c(m) 1068*59599516SKenneth E. Jansenc 1069*59599516SKenneth E. Jansen integer i, j 1070*59599516SKenneth E. Jansenc 1071*59599516SKenneth E. Jansenc.... Do the work 1072*59599516SKenneth E. Jansenc 1073*59599516SKenneth E. Jansen if ( m .eq. 1 ) then 1074*59599516SKenneth E. Jansen 1075*59599516SKenneth E. Jansen do i = 1, n 1076*59599516SKenneth E. Jansen b(i,1) = b(i,1) + c(1) * a(i,1) 1077*59599516SKenneth E. Jansen enddo 1078*59599516SKenneth E. Jansen 1079*59599516SKenneth E. Jansen else if ( m .eq. 2 ) then 1080*59599516SKenneth E. Jansen 1081*59599516SKenneth E. Jansen do i = 1, n 1082*59599516SKenneth E. Jansen b(i,1) = b(i,1) + c(1) * a(i,1) 1083*59599516SKenneth E. Jansen b(i,2) = b(i,2) + c(2) * a(i,2) 1084*59599516SKenneth E. Jansen enddo 1085*59599516SKenneth E. Jansen 1086*59599516SKenneth E. Jansen else if ( m .eq. 3 ) then 1087*59599516SKenneth E. Jansen 1088*59599516SKenneth E. Jansen do i = 1, n 1089*59599516SKenneth E. Jansen b(i,1) = b(i,1) + c(1) * a(i,1) 1090*59599516SKenneth E. Jansen b(i,2) = b(i,2) + c(2) * a(i,2) 1091*59599516SKenneth E. Jansen b(i,3) = b(i,3) + c(3) * a(i,3) 1092*59599516SKenneth E. Jansen enddo 1093*59599516SKenneth E. Jansen 1094*59599516SKenneth E. Jansen else if ( m .eq. 4 ) then 1095*59599516SKenneth E. Jansen 1096*59599516SKenneth E. Jansen do i = 1, n 1097*59599516SKenneth E. Jansen b(i,1) = b(i,1) + c(1) * a(i,1) 1098*59599516SKenneth E. Jansen b(i,2) = b(i,2) + c(2) * a(i,2) 1099*59599516SKenneth E. Jansen b(i,3) = b(i,3) + c(3) * a(i,3) 1100*59599516SKenneth E. Jansen b(i,4) = b(i,4) + c(4) * a(i,4) 1101*59599516SKenneth E. Jansen enddo 1102*59599516SKenneth E. Jansen 1103*59599516SKenneth E. Jansen else 1104*59599516SKenneth E. Jansen 1105*59599516SKenneth E. Jansen do j = 1, m 1106*59599516SKenneth E. Jansen do i = 1, n 1107*59599516SKenneth E. Jansen b(i,j) = b(i,j) + c(j) * a(i,j) 1108*59599516SKenneth E. Jansen enddo 1109*59599516SKenneth E. Jansen enddo 1110*59599516SKenneth E. Jansen 1111*59599516SKenneth E. Jansen endif 1112*59599516SKenneth E. Jansenc 1113*59599516SKenneth E. Jansen return 1114*59599516SKenneth E. Jansen end 1115*59599516SKenneth E. Jansenc 1116*59599516SKenneth E. Jansenc--------- 1117*59599516SKenneth E. Jansenc flesApG 1118*59599516SKenneth E. Jansenc--------- 1119*59599516SKenneth E. Jansenc 1120*59599516SKenneth E. Jansen subroutine flesApG ( ien, xGoC, lesP, lesQ, nPs, nQs ) 1121*59599516SKenneth E. Jansenc 1122*59599516SKenneth E. Jansen include "common.h" 1123*59599516SKenneth E. Jansenc 1124*59599516SKenneth E. Jansen dimension xGoC(npro,4*nshl,nshl) 1125*59599516SKenneth E. Jansen real*8 lesP(nshg,nPs), lesQ(nshg,nQs) 1126*59599516SKenneth E. Jansen dimension ien(npro,nshl) 1127*59599516SKenneth E. Jansen dimension Ptemp(npro,nshl,nPs), Qtemp(npro,nshl,nQs) 1128*59599516SKenneth E. Jansenc 1129*59599516SKenneth E. Jansenc.... zero Qtemp 1130*59599516SKenneth E. Jansenc 1131*59599516SKenneth E. Jansen Qtemp = zero 1132*59599516SKenneth E. Jansenc 1133*59599516SKenneth E. Jansenc.... localize the lesP for the EBE product 1134*59599516SKenneth E. Jansenc 1135*59599516SKenneth E. Jansen call local ( lesP, Ptemp, ien, nPs, 'gather ' ) 1136*59599516SKenneth E. Jansenc 1137*59599516SKenneth E. Jansenc.... Now, product operation 1138*59599516SKenneth E. Jansenc 1139*59599516SKenneth E. Jansen do i = 1, nshl 1140*59599516SKenneth E. Jansen i0 = (nsd) * (i - 1) 1141*59599516SKenneth E. Jansen do j = 1, nshl 1142*59599516SKenneth E. Jansenc 1143*59599516SKenneth E. Jansen Qtemp(:,i,1) = Qtemp(:,i,1) 1144*59599516SKenneth E. Jansen & + xGoC(1:npro,i0+1,j) * Ptemp(:,j,nPs) 1145*59599516SKenneth E. Jansenc 1146*59599516SKenneth E. Jansen Qtemp(:,i,2) = Qtemp(:,i,2) 1147*59599516SKenneth E. Jansen & + xGoC(1:npro,i0+2,j) * Ptemp(:,j,nPs) 1148*59599516SKenneth E. Jansenc 1149*59599516SKenneth E. Jansen Qtemp(:,i,3) = Qtemp(:,i,3) 1150*59599516SKenneth E. Jansen & + xGoC(1:npro,i0+3,j) * Ptemp(:,j,nPs) 1151*59599516SKenneth E. Jansenc 1152*59599516SKenneth E. Jansen enddo 1153*59599516SKenneth E. Jansen enddo 1154*59599516SKenneth E. Jansenc 1155*59599516SKenneth E. Jansenc... assemble the result of the product 1156*59599516SKenneth E. Jansenc 1157*59599516SKenneth E. Jansen call local ( lesQ, Qtemp, ien, nQs, 'scatter ' ) 1158*59599516SKenneth E. Jansenc 1159*59599516SKenneth E. Jansen return 1160*59599516SKenneth E. Jansen end 1161*59599516SKenneth E. Jansenc 1162*59599516SKenneth E. Jansenc---------- 1163*59599516SKenneth E. Jansenc flesApKG 1164*59599516SKenneth E. Jansenc---------- 1165*59599516SKenneth E. Jansenc 1166*59599516SKenneth E. Jansen subroutine flesApKG ( ien, xKebe, xGoC, lesP, lesQ, nPs, nQs ) 1167*59599516SKenneth E. Jansenc 1168*59599516SKenneth E. Jansen include "common.h" 1169*59599516SKenneth E. Jansenc 1170*59599516SKenneth E. Jansen dimension xKebe(npro,3*nshl,3*nshl), 1171*59599516SKenneth E. Jansen & xGoC(npro,4*nshl,nshl) 1172*59599516SKenneth E. Jansen dimension ien(npro,nshl) 1173*59599516SKenneth E. Jansen real*8 lesP(nshg,nPs), lesQ(nshg,nQs) 1174*59599516SKenneth E. Jansen dimension Ptemp(npro,nshl,nPs), Qtemp(npro,nshl,nQs) 1175*59599516SKenneth E. Jansenc 1176*59599516SKenneth E. Jansenc.... zero Qtemp 1177*59599516SKenneth E. Jansenc 1178*59599516SKenneth E. Jansen Qtemp = zero 1179*59599516SKenneth E. Jansenc 1180*59599516SKenneth E. Jansenc.... localize the lesP for the EBE product 1181*59599516SKenneth E. Jansenc 1182*59599516SKenneth E. Jansen call local ( lesP, Ptemp, ien, nPs, 'gather ' ) 1183*59599516SKenneth E. Jansenc 1184*59599516SKenneth E. Jansenc.... Now, product operation 1185*59599516SKenneth E. Jansenc 1186*59599516SKenneth E. Jansenc.... K contribution 1187*59599516SKenneth E. Jansenc 1188*59599516SKenneth E. Jansen do i = 1, nshl 1189*59599516SKenneth E. Jansen i0 = (nsd) * (i - 1) 1190*59599516SKenneth E. Jansen do j = 1, nshl 1191*59599516SKenneth E. Jansen j0 = (nsd) * (j - 1) 1192*59599516SKenneth E. Jansenc 1193*59599516SKenneth E. Jansen Qtemp(:,i,1) = Qtemp(:,i,1) 1194*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+1,j0+1) * Ptemp(:,j,1) 1195*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+1,j0+2) * Ptemp(:,j,2) 1196*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+1,j0+3) * Ptemp(:,j,3) 1197*59599516SKenneth E. Jansenc 1198*59599516SKenneth E. Jansen Qtemp(:,i,2) = Qtemp(:,i,2) 1199*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+2,j0+1) * Ptemp(:,j,1) 1200*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+2,j0+2) * Ptemp(:,j,2) 1201*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+2,j0+3) * Ptemp(:,j,3) 1202*59599516SKenneth E. Jansen Qtemp(:,i,3) = Qtemp(:,i,3) 1203*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+3,j0+1) * Ptemp(:,j,1) 1204*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+3,j0+2) * Ptemp(:,j,2) 1205*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+3,j0+3) * Ptemp(:,j,3) 1206*59599516SKenneth E. Jansenc 1207*59599516SKenneth E. Jansen enddo 1208*59599516SKenneth E. Jansen enddo 1209*59599516SKenneth E. Jansenc 1210*59599516SKenneth E. Jansenc.... G contribution 1211*59599516SKenneth E. Jansenc 1212*59599516SKenneth E. Jansen do i = 1, nshl 1213*59599516SKenneth E. Jansen i0 = (nsd) * (i - 1) 1214*59599516SKenneth E. Jansen do j = 1, nshl 1215*59599516SKenneth E. Jansenc 1216*59599516SKenneth E. Jansen Qtemp(:,i,1) = Qtemp(:,i,1) 1217*59599516SKenneth E. Jansen & + xGoC(1:npro,i0+1,j) * Ptemp(:,j,nPs) 1218*59599516SKenneth E. Jansen Qtemp(:,i,2) = Qtemp(:,i,2) 1219*59599516SKenneth E. Jansen & + xGoC(1:npro,i0+2,j) * Ptemp(:,j,nPs) 1220*59599516SKenneth E. Jansen Qtemp(:,i,3) = Qtemp(1:,i,3) 1221*59599516SKenneth E. Jansen & + xGoC(1:npro,i0+3,j) * Ptemp(:,j,nPs) 1222*59599516SKenneth E. Jansenc 1223*59599516SKenneth E. Jansen enddo 1224*59599516SKenneth E. Jansen enddo 1225*59599516SKenneth E. Jansenc 1226*59599516SKenneth E. Jansenc.... assemble the result of the product 1227*59599516SKenneth E. Jansenc 1228*59599516SKenneth E. Jansen call local ( lesQ, Qtemp, ien, nQs, 'scatter ' ) 1229*59599516SKenneth E. Jansenc 1230*59599516SKenneth E. Jansen return 1231*59599516SKenneth E. Jansen end 1232*59599516SKenneth E. Jansenc 1233*59599516SKenneth E. Jansenc----------- 1234*59599516SKenneth E. Jansenc flesApNGt 1235*59599516SKenneth E. Jansenc----------- 1236*59599516SKenneth E. Jansenc 1237*59599516SKenneth E. Jansen subroutine flesApNGt ( ien, xGoC, lesP, lesQ, nPs, nQs ) 1238*59599516SKenneth E. Jansenc 1239*59599516SKenneth E. Jansen include "common.h" 1240*59599516SKenneth E. Jansenc 1241*59599516SKenneth E. Jansen dimension ien(npro,nshl), xGoC(npro,4*nshl,nshl) 1242*59599516SKenneth E. Jansen real*8 lesP(nshg,nPs), lesQ(nshg,nQs) 1243*59599516SKenneth E. Jansen dimension Ptemp(npro,nshl,nPs), Qtemp(npro,nshl,nQs) 1244*59599516SKenneth E. Jansenc 1245*59599516SKenneth E. Jansenc.... zero Qtemp 1246*59599516SKenneth E. Jansenc 1247*59599516SKenneth E. Jansen Qtemp = zero 1248*59599516SKenneth E. Jansenc 1249*59599516SKenneth E. Jansenc.... localize the lesP for the EBE product 1250*59599516SKenneth E. Jansenc 1251*59599516SKenneth E. Jansen call local ( lesP, Ptemp, ien, nPs, 'gather ' ) 1252*59599516SKenneth E. Jansenc 1253*59599516SKenneth E. Jansenc.... Now, product operation 1254*59599516SKenneth E. Jansenc 1255*59599516SKenneth E. Jansenc.... Negative G^t contribution ( not explicitly formed ) 1256*59599516SKenneth E. Jansenc 1257*59599516SKenneth E. Jansen do i = 1, nshl 1258*59599516SKenneth E. Jansen do j = 1, nshl 1259*59599516SKenneth E. Jansen i0 = (nsd) * (j - 1) 1260*59599516SKenneth E. Jansenc 1261*59599516SKenneth E. Jansen Qtemp(:,i,nQs) = Qtemp(:,i,nQs) 1262*59599516SKenneth E. Jansen & - xGoC(1:npro,i0+1,i) * Ptemp(:,j,1) 1263*59599516SKenneth E. Jansen & - xGoC(1:npro,i0+2,i) * Ptemp(:,j,2) 1264*59599516SKenneth E. Jansen & - xGoC(1:npro,i0+3,i) * Ptemp(:,j,3) 1265*59599516SKenneth E. Jansenc 1266*59599516SKenneth E. Jansen enddo 1267*59599516SKenneth E. Jansen enddo 1268*59599516SKenneth E. Jansenc 1269*59599516SKenneth E. Jansenc... assemble the result of the product 1270*59599516SKenneth E. Jansenc 1271*59599516SKenneth E. Jansen call local ( lesQ, Qtemp, ien, nQs, 'scatter ' ) 1272*59599516SKenneth E. Jansenc 1273*59599516SKenneth E. Jansen return 1274*59599516SKenneth E. Jansen end 1275*59599516SKenneth E. Jansenc 1276*59599516SKenneth E. Jansenc------------ 1277*59599516SKenneth E. Jansenc flesApNGtC 1278*59599516SKenneth E. Jansenc------------ 1279*59599516SKenneth E. Jansenc 1280*59599516SKenneth E. Jansen subroutine flesApNGtC ( ien, xGoC, lesP, lesQ, nPs, nQs ) 1281*59599516SKenneth E. Jansenc 1282*59599516SKenneth E. Jansen include "common.h" 1283*59599516SKenneth E. Jansenc 1284*59599516SKenneth E. Jansen dimension ien(npro,nshl), xGoC(npro,4*nshl,nshl) 1285*59599516SKenneth E. Jansen real*8 lesP(nshg,nPs), lesQ(nshg,nQs) 1286*59599516SKenneth E. Jansen dimension Ptemp(npro,nshl,nPs), Qtemp(npro,nshl,nQs) 1287*59599516SKenneth E. Jansenc 1288*59599516SKenneth E. Jansenc.... zero Qtemp 1289*59599516SKenneth E. Jansenc 1290*59599516SKenneth E. Jansen Qtemp = zero 1291*59599516SKenneth E. Jansenc 1292*59599516SKenneth E. Jansenc.... localize the lesP for the EBE product 1293*59599516SKenneth E. Jansenc 1294*59599516SKenneth E. Jansen call local ( lesP, Ptemp, ien, nPs, 'gather ') 1295*59599516SKenneth E. Jansenc 1296*59599516SKenneth E. Jansenc.... Now, product operation 1297*59599516SKenneth E. Jansenc 1298*59599516SKenneth E. Jansenc.... Negative G^t contribution ( not explicitly formed ) 1299*59599516SKenneth E. Jansenc 1300*59599516SKenneth E. Jansen do i = 1, nshl 1301*59599516SKenneth E. Jansen do j = 1, nshl 1302*59599516SKenneth E. Jansen i0 = (nsd) * (j - 1) 1303*59599516SKenneth E. Jansenc 1304*59599516SKenneth E. Jansen Qtemp(:,i,nQs) = Qtemp(:,i,nQs) 1305*59599516SKenneth E. Jansen & - xGoC(1:npro,i0+1,i) * Ptemp(:,j,1) 1306*59599516SKenneth E. Jansen & - xGoC(1:npro,i0+2,i) * Ptemp(:,j,2) 1307*59599516SKenneth E. Jansen & - xGoC(1:npro,i0+3,i) * Ptemp(:,j,3) 1308*59599516SKenneth E. Jansenc 1309*59599516SKenneth E. Jansen enddo 1310*59599516SKenneth E. Jansen enddo 1311*59599516SKenneth E. Jansenc 1312*59599516SKenneth E. Jansenc.... C contribution 1313*59599516SKenneth E. Jansenc 1314*59599516SKenneth E. Jansen nnm2 = nshl * (nsd) 1315*59599516SKenneth E. Jansenc 1316*59599516SKenneth E. Jansen do i = 1, nshl 1317*59599516SKenneth E. Jansen i0 = nnm2 + i 1318*59599516SKenneth E. Jansen do j = 1, nshl 1319*59599516SKenneth E. Jansenc 1320*59599516SKenneth E. Jansen Qtemp(:,i,nQs) = Qtemp(:,i,nQs) 1321*59599516SKenneth E. Jansen & + xGoC(1:npro,i0,j) * Ptemp(:,j,nPs) 1322*59599516SKenneth E. Jansenc 1323*59599516SKenneth E. Jansen enddo 1324*59599516SKenneth E. Jansen enddo 1325*59599516SKenneth E. Jansenc 1326*59599516SKenneth E. Jansenc... assemble the result of the product 1327*59599516SKenneth E. Jansenc 1328*59599516SKenneth E. Jansen call local ( lesQ, Qtemp, ien, nQs, 'scatter ' ) 1329*59599516SKenneth E. Jansenc 1330*59599516SKenneth E. Jansen return 1331*59599516SKenneth E. Jansen end 1332*59599516SKenneth E. Jansenc 1333*59599516SKenneth E. Jansenc------------ 1334*59599516SKenneth E. Jansenc flesApFull 1335*59599516SKenneth E. Jansenc------------ 1336*59599516SKenneth E. Jansenc 1337*59599516SKenneth E. Jansen subroutine flesApFull ( ien, xKebe, xGoC, lesP, lesQ, nPs, nQs ) 1338*59599516SKenneth E. Jansenc 1339*59599516SKenneth E. Jansen include "common.h" 1340*59599516SKenneth E. Jansenc 1341*59599516SKenneth E. Jansen dimension ien(npro,nshl) 1342*59599516SKenneth E. Jansen dimension xKebe(npro,3*nshl,3*nshl), 1343*59599516SKenneth E. Jansen & xGoC(npro,4*nshl,nshl) 1344*59599516SKenneth E. Jansen real*8 lesP(nshg,nPs), lesQ(nshg,nQs) 1345*59599516SKenneth E. Jansen dimension Ptemp(npro,nshl,nPs), Qtemp(npro,nshl,nQs) 1346*59599516SKenneth E. Jansenc 1347*59599516SKenneth E. Jansenc.... zero Qtemp 1348*59599516SKenneth E. Jansenc 1349*59599516SKenneth E. Jansen Qtemp = zero 1350*59599516SKenneth E. Jansenc 1351*59599516SKenneth E. Jansenc.... localize the lesP for the EBE product 1352*59599516SKenneth E. Jansenc 1353*59599516SKenneth E. Jansen call local ( lesP, Ptemp, ien, nPs, 'gather ' ) 1354*59599516SKenneth E. Jansenc 1355*59599516SKenneth E. Jansenc.... Now, product operation 1356*59599516SKenneth E. Jansenc 1357*59599516SKenneth E. Jansenc.... K * Du contribution 1358*59599516SKenneth E. Jansenc 1359*59599516SKenneth E. Jansen do i = 1, nshl 1360*59599516SKenneth E. Jansen i0 = (nsd) * (i - 1) 1361*59599516SKenneth E. Jansen do j = 1, nshl 1362*59599516SKenneth E. Jansen j0 = (nsd) * (j - 1) 1363*59599516SKenneth E. Jansenc 1364*59599516SKenneth E. Jansen Qtemp(:,i,1) = Qtemp(:,i,1) 1365*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+1,j0+1) * Ptemp(:,j,1) 1366*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+1,j0+2) * Ptemp(:,j,2) 1367*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+1,j0+3) * Ptemp(:,j,3) 1368*59599516SKenneth E. Jansenc 1369*59599516SKenneth E. Jansen Qtemp(:,i,2) = Qtemp(:,i,2) 1370*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+2,j0+1) * Ptemp(:,j,1) 1371*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+2,j0+2) * Ptemp(:,j,2) 1372*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+2,j0+3) * Ptemp(:,j,3) 1373*59599516SKenneth E. Jansen Qtemp(:,i,3) = Qtemp(:,i,3) 1374*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+3,j0+1) * Ptemp(:,j,1) 1375*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+3,j0+2) * Ptemp(:,j,2) 1376*59599516SKenneth E. Jansen & + xKebe(1:npro,i0+3,j0+3) * Ptemp(:,j,3) 1377*59599516SKenneth E. Jansenc 1378*59599516SKenneth E. Jansen enddo 1379*59599516SKenneth E. Jansen enddo 1380*59599516SKenneth E. Jansenc 1381*59599516SKenneth E. Jansenc.... G * Dp contribution 1382*59599516SKenneth E. Jansenc 1383*59599516SKenneth E. Jansen do i = 1, nshl 1384*59599516SKenneth E. Jansen i0 = (nsd) * (i - 1) 1385*59599516SKenneth E. Jansen do j = 1, nshl 1386*59599516SKenneth E. Jansenc 1387*59599516SKenneth E. Jansen Qtemp(:,i,1) = Qtemp(:,i,1) 1388*59599516SKenneth E. Jansen & + xGoC(1:npro,i0+1,j) * Ptemp(:,j,nPs) 1389*59599516SKenneth E. Jansen Qtemp(:,i,2) = Qtemp(:,i,2) 1390*59599516SKenneth E. Jansen & + xGoC(1:npro,i0+2,j) * Ptemp(:,j,nPs) 1391*59599516SKenneth E. Jansen Qtemp(:,i,3) = Qtemp(:,i,3) 1392*59599516SKenneth E. Jansen & + xGoC(1:npro,i0+3,j) * Ptemp(:,j,nPs) 1393*59599516SKenneth E. Jansenc 1394*59599516SKenneth E. Jansen enddo 1395*59599516SKenneth E. Jansen enddo 1396*59599516SKenneth E. Jansenc 1397*59599516SKenneth E. Jansenc.... -G^t * Du contribution 1398*59599516SKenneth E. Jansenc 1399*59599516SKenneth E. Jansen do i = 1, nshl 1400*59599516SKenneth E. Jansen do j = 1, nshl 1401*59599516SKenneth E. Jansen i0 = (nsd) * (j - 1) 1402*59599516SKenneth E. Jansenc 1403*59599516SKenneth E. Jansen Qtemp(:,i,nQs) = Qtemp(:,i,nQs) 1404*59599516SKenneth E. Jansen & - xGoC(1:npro,i0+1,i) * Ptemp(:,j,1) 1405*59599516SKenneth E. Jansen & - xGoC(1:npro,i0+2,i) * Ptemp(:,j,2) 1406*59599516SKenneth E. Jansen & - xGoC(1:npro,i0+3,i) * Ptemp(:,j,3) 1407*59599516SKenneth E. Jansenc 1408*59599516SKenneth E. Jansen enddo 1409*59599516SKenneth E. Jansen enddo 1410*59599516SKenneth E. Jansenc 1411*59599516SKenneth E. Jansenc.... C * Dp contribution 1412*59599516SKenneth E. Jansenc 1413*59599516SKenneth E. Jansen nnm2 = nshl * (nsd) 1414*59599516SKenneth E. Jansenc 1415*59599516SKenneth E. Jansen do i = 1, nshl 1416*59599516SKenneth E. Jansen i0 = nnm2 + i 1417*59599516SKenneth E. Jansen do j = 1, nshl 1418*59599516SKenneth E. Jansenc 1419*59599516SKenneth E. Jansen Qtemp(:,i,nQs) = Qtemp(:,i,nQs) 1420*59599516SKenneth E. Jansen & + xGoC(1:npro,i0,j) * Ptemp(:,j,nPs) 1421*59599516SKenneth E. Jansenc 1422*59599516SKenneth E. Jansen enddo 1423*59599516SKenneth E. Jansen enddo 1424*59599516SKenneth E. Jansen 1425*59599516SKenneth E. Jansen 1426*59599516SKenneth E. Jansen 1427*59599516SKenneth E. Jansenc 1428*59599516SKenneth E. Jansenc... assemble the result of the product 1429*59599516SKenneth E. Jansenc 1430*59599516SKenneth E. Jansen call local ( lesQ, Qtemp, ien, nQs, 'scatter ' ) 1431*59599516SKenneth E. Jansenc 1432*59599516SKenneth E. Jansen return 1433*59599516SKenneth E. Jansen end 1434*59599516SKenneth E. Jansenc 1435*59599516SKenneth E. Jansenc----------- 1436*59599516SKenneth E. Jansenc fsclrDiag 1437*59599516SKenneth E. Jansenc----------- 1438*59599516SKenneth E. Jansenc 1439*59599516SKenneth E. Jansen subroutine fsclrDiag ( ien, xTe, sclrDiag ) 1440*59599516SKenneth E. Jansenc 1441*59599516SKenneth E. Jansen include "common.h" 1442*59599516SKenneth E. Jansenc 1443*59599516SKenneth E. Jansen dimension xTe(npro,nshl,nshl) 1444*59599516SKenneth E. Jansen dimension sclrDiag(nshg,1), Diagl(npro,nshl,1) 1445*59599516SKenneth E. Jansen dimension ien(npro,nshl) 1446*59599516SKenneth E. Jansenc 1447*59599516SKenneth E. Jansen do i = 1, nshl 1448*59599516SKenneth E. Jansen Diagl(:,i,1) = xTe(1:npro,i,i) 1449*59599516SKenneth E. Jansen enddo 1450*59599516SKenneth E. Jansenc 1451*59599516SKenneth E. Jansen call local (sclrDiag, Diagl, ien, 1, 'scatter ') 1452*59599516SKenneth E. Jansenc 1453*59599516SKenneth E. Jansen return 1454*59599516SKenneth E. Jansen end 1455*59599516SKenneth E. Jansenc 1456*59599516SKenneth E. Jansenc------------ 1457*59599516SKenneth E. Jansenc flesApSclr 1458*59599516SKenneth E. Jansenc------------ 1459*59599516SKenneth E. Jansenc 1460*59599516SKenneth E. Jansen subroutine flesApSclr ( ien, xTe, lesP, lesQ, nPs, nQs ) 1461*59599516SKenneth E. Jansenc 1462*59599516SKenneth E. Jansen include "common.h" 1463*59599516SKenneth E. Jansenc 1464*59599516SKenneth E. Jansen dimension xTe(npro,nshl,nshl) 1465*59599516SKenneth E. Jansen dimension ien(npro,nshl) 1466*59599516SKenneth E. Jansen real*8 lesP(nshg,nPs), lesQ(nshg,nQs) 1467*59599516SKenneth E. Jansen dimension Ptemp(npro,nshl,nPs), Qtemp(npro,nshl,nQs) 1468*59599516SKenneth E. Jansenc 1469*59599516SKenneth E. Jansenc.... zero Qtemp 1470*59599516SKenneth E. Jansenc 1471*59599516SKenneth E. Jansen Qtemp = zero 1472*59599516SKenneth E. Jansenc 1473*59599516SKenneth E. Jansenc.... localize the lesP for the EBE product 1474*59599516SKenneth E. Jansenc 1475*59599516SKenneth E. Jansen call local ( lesP, Ptemp, ien, nPs, 'gather ') 1476*59599516SKenneth E. Jansenc 1477*59599516SKenneth E. Jansenc.... Now, product operation 1478*59599516SKenneth E. Jansenc 1479*59599516SKenneth E. Jansen do i = 1, nshl 1480*59599516SKenneth E. Jansen do j = 1, nshl 1481*59599516SKenneth E. Jansenc 1482*59599516SKenneth E. Jansen Qtemp(:,i,nQs) = Qtemp(:,i,nQs) 1483*59599516SKenneth E. Jansen & + xTe(1:npro,i,j) * Ptemp(:,j,nPs) 1484*59599516SKenneth E. Jansenc 1485*59599516SKenneth E. Jansen enddo 1486*59599516SKenneth E. Jansen enddo 1487*59599516SKenneth E. Jansenc 1488*59599516SKenneth E. Jansenc.... assemble the result of the product 1489*59599516SKenneth E. Jansenc 1490*59599516SKenneth E. Jansen call local ( lesQ, Qtemp, ien, nQs, 'scatter ' ) 1491*59599516SKenneth E. Jansenc 1492*59599516SKenneth E. Jansen return 1493*59599516SKenneth E. Jansen end 1494