1! { dg-do compile } 2! { dg-options "-O -fno-tree-fre -fno-tree-sra -ftree-loop-vectorize" } 3! { dg-additional-options "-mavx2" { target x86_64-*-* i?86-*-* } } 4 5module lfk_prec 6 integer, parameter :: dp=kind(1.d0) 7end module lfk_prec 8 9!*********************************************** 10 11SUBROUTINE kernel(tk) 12!*********************************************************************** 13! * 14! KERNEL executes 24 samples of Fortran computation * 15! TK(1) - total cpu time to execute only the 24 kernels. * 16! TK(2) - total Flops executed by the 24 Kernels * 17!*********************************************************************** 18! * 19! L. L. N. L. F O R T R A N K E R N E L S: M F L O P S * 20! * 21! These kernels measure Fortran numerical computation rates for a * 22! spectrum of CPU-limited computational structures. Mathematical * 23! through-put is measured in units of millions of floating-point * 24! operations executed per Second, called Mega-Flops/Sec. * 25! * 26! This program measures a realistic CPU performance range for the * 27! Fortran programming system on a given day. The CPU performance * 28! rates depend strongly on the maturity of the Fortran compiler's * 29! ability to translate Fortran code into efficient machine code. * 30! [ The CPU hardware capability apart from compiler maturity (or * 31! availability), could be measured (or simulated) by programming the * 32! kernels in assembly or machine code directly. These measurements * 33! can also serve as a framework for tracking the maturation of the * 34! Fortran compiler during system development.] * 35! * 36! Fonzi's Law: There is not now and there never will be a language * 37! in which it is the least bit difficult to write * 38! bad programs. * 39! F.H.MCMAHON 1972 * 40!*********************************************************************** 41 42! l1 := param-dimension governs the size of most 1-d arrays 43! l2 := param-dimension governs the size of most 2-d arrays 44 45! Loop := multiple pass control to execute kernel long enough to ti 46! me. 47! n := DO loop control for each kernel. Controls are set in subr. 48! SIZES 49 50! ****************************************************************** 51use lfk_prec 52implicit double precision (a-h,o-z) 53!IBM IMPLICIT REAL*8 (A-H,O-Z) 54 55REAL(kind=dp), INTENT(inout) :: tk 56INTEGER :: test !!,AND 57 58COMMON/alpha/mk,ik,im,ml,il,mruns,nruns,jr,iovec,npfs(8,3,47) 59COMMON/beta/tic,times(8,3,47),see(5,3,8,3),terrs(8,3,47),csums(8,3 & 60 ,47),fopn(8,3,47),dos(8,3,47) 61 62COMMON/spaces/ion,j5,k2,k3,loop1,laps,loop,m,kr,lp,n13h,ibuf,nx,l, & 63 npass,nfail,n,n1,n2,n13,n213,n813,n14,n16,n416,n21,nt1,nt2,last,idebug & 64 ,mpy,loop2,mucho,mpylim,intbuf(16) 65 66COMMON/spacer/a11,a12,a13,a21,a22,a23,a31,a32,a33,ar,br,c0,cr,di,dk & 67 ,dm22,dm23,dm24,dm25,dm26,dm27,dm28,dn,e3,e6,expmax,flx,q,qa,r,ri & 68 ,s,scale,sig,stb5,t,xnc,xnei,xnm 69 70COMMON/space0/time(47),csum(47),ww(47),wt(47),ticks,fr(9),terr1(47 & 71 ),sumw(7),start,skale(47),bias(47),ws(95),total(47),flopn(47),iq(7 & 72 ),npf,npfs1(47) 73 74COMMON/spacei/wtp(3),mul(3),ispan(47,3),ipass(47,3) 75 76! ****************************************************************** 77 78 79INTEGER :: e,f,zone 80COMMON/ispace/e(96),f(96),ix(1001),ir(1001),zone(300) 81 82COMMON/space1/u(1001),v(1001),w(1001),x(1001),y(1001),z(1001),g(1001) & 83 ,du1(101),du2(101),du3(101),grd(1001),dex(1001),xi(1001),ex(1001) & 84 ,ex1(1001),dex1(1001),vx(1001),xx(1001),rx(1001),rh(2048),vsp(101) & 85 ,vstp(101),vxne(101),vxnd(101),ve3(101),vlr(101),vlin(101),b5(101) & 86 ,plan(300),d(300),sa(101),sb(101) 87 88COMMON/space2/p(4,512),px(25,101),cx(25,101),vy(101,25),vh(101,7), & 89 vf(101,7),vg(101,7),vs(101,7),za(101,7),zp(101,7),zq(101,7),zr(101 & 90 ,7),zm(101,7),zb(101,7),zu(101,7),zv(101,7),zz(101,7),b(64,64),c(64,64) & 91 ,h(64,64),u1(5,101,2),u2(5,101,2),u3(5,101,2) 92 93! ****************************************************************** 94 95dimension zx(1023),xz(447,3),tk(6),mtmp(1) 96EQUIVALENCE(zx(1),z(1)),(xz(1,1),x(1)) 97double precision temp 98logical ltmp 99 100 101! ****************************************************************** 102 103! STANDARD PRODUCT COMPILER DIRECTIVES MAY BE USED FOR OPTIMIZATION 104 105 106 107 108 109CALL trace('KERNEL ') 110 111CALL SPACE 112 113mpy= 1 114mpysav= mpylim 115loop2= 1 116mpylim= loop2 117l= 1 118loop= 1 119lp= loop 120it0= test(0) 121loop2= mpysav 122mpylim= loop2 123do 124 125!*********************************************************************** 126!*** KERNEL 1 HYDRO FRAGMENT 127!*********************************************************************** 128 129 x(:n)= q+y(:n)*(r*zx(11:n+10)+t*zx(12:n+11)) 130IF(test(1) <= 0)THEN 131 EXIT 132END IF 133END DO 134 135do 136! we must execute DO k= 1,n repeatedly for accurat 137! e timing 138 139!*********************************************************************** 140!*** KERNEL 2 ICCG EXCERPT (INCOMPLETE CHOLESKY - CONJUGATE GRADIE 141! NT) 142!*********************************************************************** 143 144 145ii= n 146ipntp= 0 147 148do while(ii > 1) 149ipnt= ipntp 150ipntp= ipntp+ii 151ii= ishft(ii,-1) 152i= ipntp+1 153!dir$ vector always 154 x(ipntp+2:ipntp+ii+1)=x(ipnt+2:ipntp:2)-v(ipnt+2:ipntp:2) & 155 &*x(ipnt+1:ipntp-1:2)-v(ipnt+3:ipntp+1:2)*x(ipnt+3:ipntp+1:2) 156END DO 157IF(test(2) <= 0)THEN 158 EXIT 159END IF 160END DO 161 162do 163 164!*********************************************************************** 165!*** KERNEL 3 INNER PRODUCT 166!*********************************************************************** 167 168 169q= dot_product(z(:n),x(:n)) 170IF(test(3) <= 0)THEN 171 EXIT 172END IF 173END DO 174m= (1001-7)/2 175 176!*********************************************************************** 177!*** KERNEL 4 BANDED LINEAR EQUATIONS 178!*********************************************************************** 179 180fw= 1.000D-25 181 182do 183!dir$ vector always 184 xz(6,:3)= y(5)*(xz(6,:3)+matmul(y(5:n:5), xz(:n/5,:3))) 185 186IF(test(4) <= 0)THEN 187 EXIT 188END IF 189END DO 190 191do 192 193!*********************************************************************** 194!*** KERNEL 5 TRI-DIAGONAL ELIMINATION, BELOW DIAGONAL (NO VECTORS 195! ) 196!*********************************************************************** 197 198 199tmp= x(1) 200DO i= 2,n 201 tmp= z(i)*(y(i)-tmp) 202 x(i)= tmp 203END DO 204IF(test(5) <= 0)THEN 205 EXIT 206END IF 207END DO 208 209do 210 211!*********************************************************************** 212!*** KERNEL 6 GENERAL LINEAR RECURRENCE EQUATIONS 213!*********************************************************************** 214 215 216DO i= 2,n 217 w(i)= 0.0100D0+dot_product(b(i,:i-1),w(i-1:1:-1)) 218END DO 219IF(test(6) <= 0)THEN 220 EXIT 221END IF 222END DO 223 224do 225 226!*********************************************************************** 227!*** KERNEL 7 EQUATION OF STATE FRAGMENT 228!*********************************************************************** 229 230 231 x(:n)= u(:n)+r*(z(:n)+r*y(:n))+t*(u(4:n+3)+r*(u(3:n+2)+r*u(2:n+1))+t*( & 232 u(7:n+6)+q*(u(6:n+5)+q*u(5:n+4)))) 233IF(test(7) <= 0)THEN 234 EXIT 235END IF 236END DO 237 238do 239 240 241!*********************************************************************** 242!*** KERNEL 8 A.D.I. INTEGRATION 243!*********************************************************************** 244 245 246nl1= 1 247nl2= 2 248fw= 2.000D0 249 DO ky= 2,n 250DO kx= 2,3 251 du1ky= u1(kx,ky+1,nl1)-u1(kx,ky-1,nl1) 252 du2ky= u2(kx,ky+1,nl1)-u2(kx,ky-1,nl1) 253 du3ky= u3(kx,ky+1,nl1)-u3(kx,ky-1,nl1) 254 u1(kx,ky,nl2)= u1(kx,ky,nl1)+a11*du1ky+a12*du2ky+a13 & 255 *du3ky+sig*(u1(kx+1,ky,nl1)-fw*u1(kx,ky,nl1)+u1(kx-1,ky,nl1)) 256 u2(kx,ky,nl2)= u2(kx,ky,nl1)+a21*du1ky+a22*du2ky+a23 & 257 *du3ky+sig*(u2(kx+1,ky,nl1)-fw*u2(kx,ky,nl1)+u2(kx-1,ky,nl1)) 258 u3(kx,ky,nl2)= u3(kx,ky,nl1)+a31*du1ky+a32*du2ky+a33 & 259 *du3ky+sig*(u3(kx+1,ky,nl1)-fw*u3(kx,ky,nl1)+u3(kx-1,ky,nl1)) 260 END DO 261END DO 262IF(test(8) <= 0)THEN 263 EXIT 264END IF 265END DO 266 267do 268 269!*********************************************************************** 270!*** KERNEL 9 INTEGRATE PREDICTORS 271!*********************************************************************** 272 273 274 px(1,:n)= dm28*px(13,:n)+px(3,:n)+dm27*px(12,:n)+dm26*px(11,:n)+dm25*px(10 & 275 ,:n)+dm24*px(9,:n)+dm23*px(8,:n)+dm22*px(7,:n)+c0*(px(5,:n)+px(6,:n)) 276IF(test(9) <= 0)THEN 277 EXIT 278END IF 279END DO 280 281do 282 283!*********************************************************************** 284!*** KERNEL 10 DIFFERENCE PREDICTORS 285!*********************************************************************** 286 287!dir$ unroll(2) 288 do k= 1,n 289 br= cx(5,k)-px(5,k) 290 px(5,k)= cx(5,k) 291 cr= br-px(6,k) 292 px(6,k)= br 293 ar= cr-px(7,k) 294 px(7,k)= cr 295 br= ar-px(8,k) 296 px(8,k)= ar 297 cr= br-px(9,k) 298 px(9,k)= br 299 ar= cr-px(10,k) 300 px(10,k)= cr 301 br= ar-px(11,k) 302 px(11,k)= ar 303 cr= br-px(12,k) 304 px(12,k)= br 305 px(14,k)= cr-px(13,k) 306 px(13,k)= cr 307 enddo 308IF(test(10) <= 0)THEN 309 EXIT 310END IF 311END DO 312 313do 314 315!*********************************************************************** 316!*** KERNEL 11 FIRST SUM. PARTIAL SUMS. (NO VECTORS) 317!*********************************************************************** 318 319 320temp= 0 321DO k= 1,n 322 temp= temp+y(k) 323 x(k)= temp 324END DO 325IF(test(11) <= 0)THEN 326 EXIT 327END IF 328END DO 329 330do 331 332!*********************************************************************** 333!*** KERNEL 12 FIRST DIFF. 334!*********************************************************************** 335 336 x(:n)= y(2:n+1)-y(:n) 337IF(test(12) <= 0)THEN 338 EXIT 339END IF 340END DO 341fw= 1.000D0 342 343!*********************************************************************** 344!*** KERNEL 13 2-D PIC Particle In Cell 345!*********************************************************************** 346 347 348do 349 350! rounding modes for integerizing make no difference here 351 do k= 1,n 352 i1= 1+iand(int(p(1,k)),63) 353 j1= 1+iand(int(p(2,k)),63) 354 p(3,k)= p(3,k)+b(i1,j1) 355 p(1,k)= p(1,k)+p(3,k) 356 i2= iand(int(p(1,k)),63) 357 p(1,k)= p(1,k)+y(i2+32) 358 p(4,k)= p(4,k)+c(i1,j1) 359 p(2,k)= p(2,k)+p(4,k) 360 j2= iand(int(p(2,k)),63) 361 p(2,k)= p(2,k)+z(j2+32) 362 i2= i2+e(i2+32) 363 j2= j2+f(j2+32) 364 h(i2,j2)= h(i2,j2)+fw 365 enddo 366IF(test(13) <= 0)THEN 367 EXIT 368END IF 369END DO 370fw= 1.000D0 371 372!*********************************************************************** 373!*** KERNEL 14 1-D PIC Particle In Cell 374!*********************************************************************** 375 376 377 378do 379 380 ix(:n)= grd(:n) 381!dir$ ivdep 382 vx(:n)= ex(ix(:n))-ix(:n)*dex(ix(:n)) 383 ir(:n)= vx(:n)+flx 384 rx(:n)= vx(:n)+flx-ir(:n) 385 ir(:n)= iand(ir(:n),2047)+1 386 xx(:n)= rx(:n)+ir(:n) 387DO k= 1,n 388 rh(ir(k))= rh(ir(k))+fw-rx(k) 389 rh(ir(k)+1)= rh(ir(k)+1)+rx(k) 390END DO 391IF(test(14) <= 0)THEN 392 EXIT 393END IF 394END DO 395 396do 397 398!*********************************************************************** 399!*** KERNEL 15 CASUAL FORTRAN. DEVELOPMENT VERSION. 400!*********************************************************************** 401 402 403! CASUAL ORDERING OF SCALAR OPERATIONS IS TYPICAL PRACTICE. 404! THIS EXAMPLE DEMONSTRATES THE NON-TRIVIAL TRANSFORMATION 405! REQUIRED TO MAP INTO AN EFFICIENT MACHINE IMPLEMENTATION. 406 407 408ng= 7 409nz= n 410ar= 0.05300D0 411br= 0.07300D0 412!$omp parallel do private(t,j,k,r,s,i,ltmp) if(nz>98) 413do j= 2,ng-1 414 do k= 2,nz 415 i= merge(k-1,k,vf(k,j) < vf((k-1),j)) 416 t= merge(br,ar,vh(k,(j+1)) <= vh(k,j)) 417 r= MAX(vh(i,j),vh(i,j+1)) 418 s= vf(i,j) 419 vy(k,j)= t/s*SQRT(vg(k,j)**2+r*r) 420 if(k < nz)then 421 ltmp=vf(k,j) >= vf(k,(j-1)) 422 i= merge(j,j-1,ltmp) 423 t= merge(ar,br,ltmp) 424 r= MAX(vg(k,i),vg(k+1,i)) 425 s= vf(k,i) 426 vs(k,j)= t/s*SQRT(vh(k,j)**2+r*r) 427 endif 428 END do 429 vs(nz,j)= 0.0D0 430END do 431 vy(2:nz,ng)= 0.0D0 432IF(test(15) <= 0)THEN 433 EXIT 434END IF 435END DO 436ii= n/3 437 438!*********************************************************************** 439!*** KERNEL 16 MONTE CARLO SEARCH LOOP 440!*********************************************************************** 441 442lb= ii+ii 443k2= 0 444k3= 0 445 446do 447DO m= 1,zone(1) 448 j2= (n+n)*(m-1)+1 449 DO k= 1,n 450 k2= k2+1 451 j4= j2+k+k 452 j5= zone(j4) 453 IF(j5 >= n)THEN 454 IF(j5 == n)THEN 455 EXIT 456 END IF 457 k3= k3+1 458 IF(d(j5) < d(j5-1)*(t-d(j5-2))**2+(s-d(j5-3))**2+ (r-d(j5-4))**2)THEN 459 go to 200 460 END IF 461 IF(d(j5) == d(j5-1)*(t-d(j5-2))**2+(s-d(j5-3))**2+ (r-d(j5-4))**2)THEN 462 EXIT 463 END IF 464 ELSE 465 IF(j5-n+lb < 0)THEN 466 IF(plan(j5) < t)THEN 467 go to 200 468 END IF 469 IF(plan(j5) == t)THEN 470 EXIT 471 END IF 472 ELSE 473 IF(j5-n+ii < 0)THEN 474 IF(plan(j5) < s)THEN 475 go to 200 476 END IF 477 IF(plan(j5) == s)THEN 478 EXIT 479 END IF 480 ELSE 481 IF(plan(j5) < r)THEN 482 go to 200 483 END IF 484 IF(plan(j5) == r)THEN 485 EXIT 486 END IF 487 END IF 488 END IF 489 END IF 490 IF(zone(j4-1) <= 0)THEN 491 go to 200 492 END IF 493 END DO 494 EXIT 495 200 IF(zone(j4-1) == 0)THEN 496 EXIT 497 END IF 498END DO 499IF(test(16) <= 0)THEN 500 EXIT 501END IF 502END DO 503dw= 5.0000D0/3.0000D0 504 505!*********************************************************************** 506!*** KERNEL 17 IMPLICIT, CONDITIONAL COMPUTATION (NO VECTORS) 507!*********************************************************************** 508 509! RECURSIVE-DOUBLING VECTOR TECHNIQUES CAN NOT BE USED 510! BECAUSE CONDITIONAL OPERATIONS APPLY TO EACH ELEMENT. 511 512fw= 1.0000D0/3.0000D0 513tw= 1.0300D0/3.0700D0 514 515do 516scale= dw 517rtmp= fw 518e6= tw 519DO k= n,2,-1 520 e3= rtmp*vlr(k)+vlin(k) 521 xnei= vxne(k) 522 vxnd(k)= e6 523 xnc= scale*e3 524! SELECT MODEL 525 IF(max(rtmp,xnei) <= xnc)THEN 526! LINEAR MODEL 527 ve3(k)= e3 528 rtmp= e3+e3-rtmp 529 vxne(k)= e3+e3-xnei 530 ELSE 531 rtmp= rtmp*vsp(k)+vstp(k) 532! STEP MODEL 533 vxne(k)= rtmp 534 ve3(k)= rtmp 535 END IF 536 e6= rtmp 537END DO 538xnm= rtmp 539IF(test(17) <= 0)THEN 540 EXIT 541END IF 542END DO 543 544do 545 546!*********************************************************************** 547!*** KERNEL 18 2-D EXPLICIT HYDRODYNAMICS FRAGMENT 548!*********************************************************************** 549 550 551t= 0.003700D0 552s= 0.004100D0 553kn= 6 554jn= n 555 zb(2:jn,2:kn)=(zr(2:jn,2:kn)+zr(2:jn,:kn-1))/(zm(2:jn,2:kn)+zm(:jn-1,2:kn)) & 556 *(zp(:jn-1,2:kn)-zp(2:jn,2:kn)+(zq(:jn-1,2:kn)-zq(2:jn,2:kn))) 557 za(2:jn,2:kn)=(zr(2:jn,2:kn)+zr(:jn-1,2:kn))/(zm(:jn-1,2:kn)+zm(:jn-1,3:kn+1)) & 558 *(zp(:jn-1,3:kn+1)-zp(:jn-1,2:kn)+(zq(:jn-1,3:kn+1)-zq(:jn-1,2:kn))) 559 zu(2:jn,2:kn)= zu(2:jn,2:kn)+ & 560 s*(za(2:jn,2:kn)*(zz(2:jn,2:kn)-zz(3:jn+1,2:kn)) & 561 -za(:jn-1,2:kn)*(zz(2:jn,2:kn)-zz(:jn-1,2:kn)) & 562 -zb(2:jn,2:kn)*(zz(2:jn,2:kn)-zz(2:jn,:kn-1))+ & 563 zb(2:jn,3:kn+1)*(zz(2:jn, 2:kn)-zz(2:jn,3:kn+1))) 564 zv(2:jn,2:kn)= zv(2:jn,2:kn)+ & 565 s*(za(2:jn,2:kn)*(zr(2:jn,2:kn)-zr(3:jn+1,2:kn)) & 566 -za(:jn-1,2:kn)*(zr(2:jn,2:kn)-zr(:jn-1,2:kn)) & 567 -zb(2:jn,2:kn)*(zr(2:jn,2:kn)-zr(2:jn,:kn-1))+ & 568 zb(2:jn,3:kn+1)*(zr(2:jn, 2:kn)-zr(2:jn,3:kn+1))) 569 zr(2:jn,2:kn)= zr(2:jn,2:kn)+t*zu(2:jn,2:kn) 570 zz(2:jn,2:kn)= zz(2:jn,2:kn)+t*zv(2:jn,2:kn) 571IF(test(18) <= 0)THEN 572 EXIT 573END IF 574END DO 575 576do 577 578!*********************************************************************** 579!*** KERNEL 19 GENERAL LINEAR RECURRENCE EQUATIONS (NO VECTORS) 580!*********************************************************************** 581 582kb5i= 0 583 584DO k= 1,n 585 b5(k+kb5i)= sa(k)+stb5*sb(k) 586 stb5= b5(k+kb5i)-stb5 587END DO 588DO k= n,1,-1 589 b5(k+kb5i)= sa(k)+stb5*sb(k) 590 stb5= b5(k+kb5i)-stb5 591END DO 592IF(test(19) <= 0)THEN 593 EXIT 594END IF 595END DO 596dw= 0.200D0 597 598!*********************************************************************** 599!*** KERNEL 20 DISCRETE ORDINATES TRANSPORT: RECURRENCE (NO VECTORS 600!*********************************************************************** 601 602 603do 604 605rtmp= xx(1) 606DO k= 1,n 607 di= y(k)*(rtmp+dk)-g(k) 608 dn=merge( max(s,min(z(k)*(rtmp+dk)/di,t)),dw,di /= 0.0) 609 x(k)= ((w(k)+v(k)*dn)*rtmp+u(k))/(vx(k)+v(k)*dn) 610 rtmp= ((w(k)-vx(k))*rtmp+u(k))*DN/(vx(k)+v(k)*dn)+ rtmp 611 xx(k+1)= rtmp 612END DO 613IF(test(20) <= 0)THEN 614 EXIT 615END IF 616END DO 617 618do 619 620!*********************************************************************** 621!*** KERNEL 21 MATRIX*MATRIX PRODUCT 622!*********************************************************************** 623 624 px(:25,:n)= px(:25,:n)+matmul(vy(:25,:25),cx(:25,:n)) 625IF(test(21) <= 0)THEN 626 EXIT 627END IF 628END DO 629expmax= 20.0000D0 630 631 632!*********************************************************************** 633!*** KERNEL 22 PLANCKIAN DISTRIBUTION 634!*********************************************************************** 635 636! EXPMAX= 234.500d0 637fw= 1.00000D0 638u(n)= 0.99000D0*expmax*v(n) 639 640do 641 642 y(:n)= u(:n)/v(:n) 643 w(:n)= x(:n)/(EXP(y(:n))-fw) 644IF(test(22) <= 0)THEN 645 EXIT 646END IF 647END DO 648fw= 0.17500D0 649 650!*********************************************************************** 651!*** KERNEL 23 2-D IMPLICIT HYDRODYNAMICS FRAGMENT 652!*********************************************************************** 653 654 655do 656 657 DO k= 2,n 658 do j=2,6 659 za(k,j)= za(k,j)+fw*(za(k,j+1)*zr(k,j)-za(k,j)+ & 660 & zv(k,j)*za(k-1,j)+(zz(k,j)+za(k+1,j)* & 661 & zu(k,j)+za(k,j-1)*zb(k,j))) 662 END DO 663 END DO 664IF(test(23) <= 0)THEN 665 EXIT 666END IF 667END DO 668x(n/2)= -1.000D+10 669 670!*********************************************************************** 671!*** KERNEL 24 FIND LOCATION OF FIRST MINIMUM IN ARRAY 672!*********************************************************************** 673 674! X( n/2)= -1.000d+50 675 676do 677 m= minloc(x(:n),DIM=1) 678 679IF(test(24) == 0)THEN 680 EXIT 681END IF 682END DO 683sum= 0.00D0 684som= 0.00D0 685DO k= 1,mk 686 sum= sum+time(k) 687 times(jr,il,k)= time(k) 688 terrs(jr,il,k)= terr1(k) 689 npfs(jr,il,k)= npfs1(k) 690 csums(jr,il,k)= csum(k) 691 dos(jr,il,k)= total(k) 692 fopn(jr,il,k)= flopn(k) 693 som= som+flopn(k)*total(k) 694END DO 695tk(1)= tk(1)+sum 696tk(2)= tk(2)+som 697! Dumpout Checksums: file "chksum" 698! WRITE ( 7,706) jr, il 699! 706 FORMAT(1X,2I3) 700! WRITE ( 7,707) ( CSUM(k), k= 1,mk) 701! 707 FORMAT(5X,'&',1PE23.16,',',1PE23.16,',',1PE23.16,',') 702 703CALL track('KERNEL ') 704RETURN 705END SUBROUTINE kernel 706