CODE: revise with etime as real with array argument (10/10/97). Code: Convex Exemplar SPP1200/XA-16 version of starter fortran problem Comment: Only the "C90" comment marks need to be removed for Watfor77, Cont: "n=200" to "n=32" for non-timing variables. Compiler Directive "C$S" for extra CMS Watfor77 statements executed Cont: over 30000 default is C$S=300000 Compiler directive for extra CMS Watfor77 time is like "C$T=90" program bstart Change: change program name to less than 6 characters parameter(n=200,nn=6,nnd=5,ntime=20) implicit real*8 (a-h,o-z) Change: implicit statement added. real*8 cog(n),fractn(n),box(n,3),t(n),y(n) real*8 s(n),z(n),a(n),b(n),am(n),vm(n),zm(n) real*8 d1(n,n),d2(n,n),d3(n,n),fv(3,n,n) real etime, tarray(2),tusr(0:ntime),tsys(0:ntime),ttot(0:ntime) integer mm(n),kk(n),ll(n) data cutl/6./,cinc/4./,alfa/3.6/,xbar/8./ kt=0 ttot(kt)=etime(tarray) tusr(kt)=tarray(1) tsys(kt)=tarray(2) kt=kt+1 ttot(kt)=etime(tarray) tusr(kt)=tarray(1) tsys(kt)=tarray(2) ClockingLoops: you can also use this etime format around loops to time them. do 5 i=1,n cog(i)=1. fractn(i)=1. t(i)=1. y(i)=1. s(i)=1. z(i)=1. a(i)=1. b(i)=1. mm(i)=1 kk(i)=1 ll(i)=1 do 5 j=1,3 5 box(i,j)=1.5*j*i/(1.+n) do 6 i=1,n do 6 j=1,n d1(i,j)=12.5 d2(i,j)=12.5 6 d3(i,j)=14.5 do 10 i=1,n 10 y(i)=t(i)+s(i) do 20 m=1,n s(m)=a(m)*m 20 t(m)=y(m)+alfa+2.7 do 30 i=1,n cog(i)=fractn(i)/6. 30 mm(i)=kk(i)*ll(i)/4 k=1 do 50 i=1,n k=k+2 cog(i)=cutl+(i-1)*cinc dev=cog(i)+alfa-xbar do 50 j=1,3 box(i,j)=box(i,j)+0.25 50 continue do 60 i=1,n do 60 j=1,n do 60 k=1,n d1(i,j)=d1(i,j)+d2(i,j)+d3(i,j) do 60 l=1,5 60 d3(i,l)=d2(i,l)*d1(i,l) do 70 i=1,n do 70 j=1,3 70 t(i)=t(i)-box(i,j) do 80 i=2,n a(i)=b(i)*box(i,1) z(i)=t(i)*z(i-1)+cog(i) 80 continue do 90 i=4,n-2 b(i)=s(i-3) s(i)=y(i) cog(i)=b(i)*cutl 90 cog(i+2)=y(i)*xbar l=1 100 y(l)=t(l)*s(l) l=l+2 if(l.le.n)go to 100 sm=0 do 110 i=1,n 110 sm=sm+sqrt(1.+exp(-0.25*i)) do 120 i=1,n tm=1+exp(-0.21*i**2)+sin(0.25*i+6) 120 am(i)=0.9*tm/(1+tm**2) do 130 i=1,n 130 vm(i)=fm(am(i)) do 140 i=1,3 do 140 j=1,n do 140 k=1,n fv(i,j,k)=0.03*box(j,i)*box(k,4-i)/(1+0.34*box(j,i)) 140 continue do 150 i=1,n call sub(n,am,vm,zm) 150 continue kt=kt+1 ttot(kt)=etime(tarray) tusr(kt)=tarray(1) tsys(kt)=tarray(2) Clock: Overhead corrected elapsed time: tusrf=tusr(kt)-tusr(1)-(tusr(1)-tusr(0)) tsysf=tsys(kt)-tsys(1)-(tsys(1)-tsys(0)) ttotf=ttot(kt)-ttot(1)-(ttot(1)-ttot(0)) nd=(n-1)/(nn-1) ndd=(n-1)/(nnd-1) n2=(n+1)/2 write(6,106) tusrf,tsysf,ttotf 106 format(' Borg Starter Problem Output'/ & ' Timing Output:'/ & 1x,' tusr=',e12.4,', tsys=',e12.4,', ttot=',e12.4,' seconds') Change: Extra output statements: write(6,66) ' a(1:nn)',(a(i),i=1,nn) write(6,66) ' am(1:nn)',(am(i),i=1,nn) write(6,66) ' b(1:nn)',(b(i),i=1,nn) write(6,67) ' 1:n:nd',(i,i=1,n,nd) write(6,66) ' b(2:n:nd)',(b(i),i=2,n,nd) write(6,66) ' box(i,2)',(box(i,2),i=1,n,nd) write(6,66) ' cog(2:n)',(cog(i),i=2,n,nd) write(6,66) ' dev',dev write(6,68) ' 1:n:ndd',(i,i=1,n,ndd) write(6,65) ' d1(1,j)',(d1(1,j),j=1,n,ndd) write(6,65) ' d1(n2,j)',(d1(n2,j),j=1,n,ndd) write(6,65) ' d1(n,j)',(d1(n,j),j=1,n,ndd) write(6,65) ' d1(i,1)',(d1(i,1),i=1,n,ndd) write(6,65) ' d1(i,n2)',(d1(i,n2),i=1,n,ndd) write(6,65) ' d1(i,n)',(d1(i,n),i=1,n,ndd) write(6,65) ' d2(n2,j)',(d2(n2,j),j=1,n,ndd) write(6,65) ' d3(i,1)',(d3(i,1),i=1,n,ndd) write(6,65) ' d3(i,n2)',(d3(i,n2),i=1,n,ndd) write(6,65) ' d3(i,n)',(d3(i,n),i=1,n,ndd) write(6,65) ' d3(1,j)',(d3(1,j),j=1,n,ndd) write(6,65) ' d3(n2,j)',(d3(n2,j),j=1,n,ndd) write(6,65) ' d3(n,j)',(d3(n,j),j=1,n,ndd) write(6,66) ' fractn(i)',(fractn(i),i=1,n,nd) write(6,66) 'fv(1,n2,k)',(fv(1,n2,k),k=1,n,nd) write(6,66) 'fv(3,n2,k)',(fv(3,n2,k),k=1,n,nd) write(6,66) 'fv(1,k,n2)',(fv(1,k,n2),k=1,n,nd) write(6,66) 'fv(3,k,n2)',(fv(3,k,n2),k=1,n,nd) write(6,67) ' k',k write(6,67) ' kt',kt write(6,67) ' kk(1:nn)',(kk(i),i=1,nn) write(6,67) ' ll(1:nn)',(ll(i),i=1,nn) write(6,67) ' mm(1:nn)',(mm(i),i=1,nn) write(6,67) ' nd',nd write(6,67) ' ndd',ndd write(6,67) ' n2',n2 write(6,66) ' s(1:nn)',(s(i),i=1,nn) write(6,66) ' s(2:n:d)',(s(i),i=2,n,nd) write(6,66) ' sm',sm write(6,66) ' t(1:n:d)',(t(i),i=1,n,nd) write(6,66) ' tm',tm write(6,66) ' vm(1:nn)',(vm(i),i=1,nn) write(6,66) ' y(1:n:d)',(y(i),i=1,n,nd) write(6,66) ' z(1:n:d)',(z(i),i=1,n,nd) write(6,66) ' zm(1:nn)',(zm(i),i=1,nn) 65 format(1x,a,':',10e13.5) 66 format(1x,a,':',10e11.3) 67 format(1x,a,':',10i11) 68 format(1x,a,':',10i13) stop end function fm(x) implicit real*8 (a-h,o-z) fm=0.532*x*(17.25-x)+48.66 return end subroutine sub(n,a,v,z) real*8 a(n),v(n),z(n) do 1 i=1,n if(a(i).gt.v(i)) then z(i)=a(i) else z(i)=a(i)+2.6*v(i) endif 1 continue return end C90 function etime(t1,t2)) C90Change: add this timer subroutine C90Code: substitute for intrinsic second timers: etime in SPP-UX C90Caution: remove or comment out this subroutine for UIC Convex C90 real t1,t2,t3 C90 t1=0 C90Comment: ctime is the IMSL timer on CMS. C90 t1=ctime() C90Comment: timer gives no system time. C90 t2=0 C90 t3=t1+t2 C90 etime=t3 C90 return C90 end